안녕하세요, 거북이 팀의 주영훈입니다.
문의 내용에 대한 답변입니다.
On Wednesday, 6 February 2013 12:00:12 UTC+9, 재식 윤 wrote:
Odometry ( x, y, theta ) 를 계산 해서 통신으로 바로 주는 것이 아니었네요.
직접 계산을 해야 할듯 한데. ROS를 사용 하지 못하는 환경이라서요;
몇가지 궁금한게 있어 이렇게 글을 남깁니다.
1. 바퀴간의 거리 : 코드에 보니 0.23이라 되어 있는데 m단위로 이 수치가 맞겠지요?
2. 바퀴 반지름 : 코드에 보니 0.035이라 되어 있는데 m단위로 이 수치가 맞겠지요?
네, 전부 m 단위 입니다.
3. Pulse / Rev :
가이드에 보니 : Odometry: 52 ticks/enc rev, 2578.33 ticks/wheel rev, 11.7 ticks/mm
라 되어 있는데. 이것을 그냥 Pulse per Revolution 이라 봐도 되는 것인가요? tick이라는 말이 확신이 없네요.
그럼 기어비가 대략 2578.33 / 52 = 49.5832 정도 되는 것이고요?
tick값은 pulse를 계수한 값입니다. 일반적으로 4체배해서 사용하므로, pulse per revolution 값은 13입니다.
모터와 휠 사이의 기어비는 6545/132로 약 49.58333333333333 입니다.
4. 수신 하는 Inertial sensor data의 Angle의 경우 0 ~ 65,535 까지 출력되는 것을 확인 하였는데
이는 0~360도 까지의 Angle로 매핑하는 특별한 식이 있나요? 아니면 그냥 선형적으로 매핑 하여야 하나요?
단위는 1/100 deg 입니다. 마찬가지로 각속도의 단위는 1/100 deg/s 입니다.
데이터를 signed short으로 변환한 후, 100으로 나누면 deg 값을 얻을 수 있습니다.
5. D-SUB 25Pin에 있는 RS232 Rx, Tx 에 voltage level 3.3V 에 맞추어 연결을 하였는데 신호를 한번 보냈다고 해서
바로 연결이 되지 않고. 신호를 여러번 보내야 소리가 나면서 반응을 하네요. 그냥 USB에 직결 하여 하면 한번에 반응 하는데요.
혹시 Rx, Tx, GND 외에 다른것을 연결 해야 하는 것인가요?
시리얼 통신을 위해서는 Rx, Tx, GND 3개의 핀만 사용하시면 됩니다.
USB와 시리얼 통신 사이에 다른 프로토콜 상의 차이점은 없습니다.
다만, 위 증상은 인터페이스에 할당된 우선 순위에 따른 것으로 추정됩니다.
거북이가 USB와 시리얼 통신, 두 개의 인터페이스를 가지기 때문에, 내부적으로 우선순위를 할당하여 제어명령의 충돌을 처리합니다.
로봇이 켜진 후 제어명령이 먼저 도착한 인터페이스를 우선순위로 두고, 다른 인터페이스의 제어명령은 무시합니다.
그리고 마지막 제어명령이 도착한 후 3초가 지나면 우선순위는 초기화됩니다.
USB에 우선순위가 할당되어 있어서, 시리얼로 보낸 처음 몇 번의 제어 명령을 무시했던 것으로 생각됩니다.
혹시 다른 점이 있거나, 계속적으로 위 증상이 나타나면 다시 알려주시기 바랍니다.
질문이 많아 귀찬으시겠지만 좋은 답변 기다 리겠습니다.
좋은 하루 되세요.
행복한 설 연휴 보내시기 바랍니다.
감사합니다.
거북이 팀 드림.