집에서 놀고 있는 안드로이드 폰으로, LEGO EV3을 조종하는 리모콘을 만들어 보려고 한다.
갤럭시 노트1 조종기 개념
화면에 포켓 몬스터 볼을 표시한다. 사용자가 휴대폰을 기울이면, 공이 그 방향으로 이동한다.
이 공의 좌표가 레고를 전진/후진, 좌회전/우회전 등으로 움직인다.
좌표 설정의 문제점
처음에는 아래와 같이 그리면, 멋지게 움직인다고 생각했다!!
그림의 x,y 좌표가 휴대폰 디스플레이의 시스템이다.
- 1번: 레고가 전진한다. 끝에 있을 수록 세게 간다.
- 5번: 후진
- 2번: 약한 우회전. 왼쪽 바퀴가 오른쪽 바퀴보다 더 돈다.
- 3번: 강한 우회전. 왼쪽이 2번보다 더 많이 돈다.
- 4번: ??그림의 (0,0) 기준으로 3번->4번으로 가면, 두 바퀴가 모두 거꾸로 돌아야 된다.후진으로 강한 우회전을 한다.
L/R 값이 (4,1) -> (-4,-1)로 변경되고, 변화되는 값이 크다. 그림이 어느 영역을 넘어가면 바퀴가 급격히 변하게 되면 좀 이상할 듯 하다.
위 표를 그려는데, L/R 바퀴가 방향이 항상 같다. 단순한 움직임만 구현될 듯 하다.
좌표 설정 제안
디스플레이 좌표(X,Y)를 135도 반시계 방향으로 돌려, L/R 축으로 표시했다. 아래 그림과 같이 표시 가능하다.
직진->적은 우회전->많은 우회전->적은 우회전->후진 이렇게 된다.
값으로 표시하면..(R,L).
- 직진: (+10,+10)
- 적은 우회전: L값이 0선을 닿으면 (0,MaxL)
- 많은 우회전: L값이 0선을 넘어가면 (-1,MaxL), R이 거꾸로 돌면서 더 회전
- 적은 우회전: L이 줄면서 R이 – 방향으로 증가(-5,MeanL)
원점을 수정하여 rotation 하려면, 여기를 참조한다.
여기를 참조하여 새로운 좌표계를 아래와 같이 설정했다.
디스플레이의 X, Y 좌표가 오른손 좌표가 아니기 때문에, 임의로 Y,X로 변경한 다음, L/R을 설정했다.
아래 동영상이 기울기에 따른 L,R 값이다.
이제, 레고에서 받는 부분을 만들기로 하고, 이건 접어야겠다.