안녕하세요!
C언어로 FastSyncRead를 이용하여 현재 7개의 XM430-W350 모터의 엔코더 값을 읽으려고 하고 있습니다. 다른 모터의 엔코도 값은 잘 읽히는데 계속 4번째 모터의 값을 읽히지 않고 있습니다. 모터의 문제도 아닌게 Dynamixel wizard와 Sync_readwrite의 example code에서도 잘 작동합니다.
제가 원인을 찾아보기 위해서 7개의 모터 중에 일정 개수의 모터들만 따로 골라서 읽어 보면서 알아낸게 굳이 4번 모터가 작동이 안되는 것이 아니라 4번째 모터가 작동을 안 한다는 것입니다. 혹시 FastSyncRead를 사용하면서 비슷한 경우가 있으셨는지 궁금하고 원인을 알고 계신다면 답변 부탁드립니다! 감사합니다.
통신라인을 통해 주고 받는 패킷을 확인해보시면 어떨까요?
테스트 환경에서 통신라인을 병렬로 분기해서 PC에서 모니터링할 수 있습니다.
예를들면, 제어기 또는 PC와 다이나믹셀이 통신으로 연결되어 있을텐데요.
통신라인을 병렬로 분기해서 별도의 U2D2와 연결하면, PC에서 통신라인을 모니터링 할 수 있습니다. PC에서 통신라인을 모니터링할 때는 범용 시리얼 통신 프로그램이나 Wizard2.0의 패킷 모니터링 기능을 사용하시면 됩니다.
답변 감사합니다. 말씀해주신대로 패킷을 확인해보았는데 아래 사진과 같이 모든 아이디에서 잘 받는 것처럼 보이는데 확인 한 번 부탁드리겠습니다. 패킷에 문제가 없는 경우 어떤 부분을 확인해야할까요? 이게 어떤 때는 정상 작동을 하고, 어떤 때는 안하는 것으로 보아 코드 상에는 문제가 없어 보입니다.
간헐적으로 발생한다면, 외부 요인(노이즈 등), 케이블의 길이, 상태 등을 한번 확인 해주세요.
2가지를 고민해볼 수 있을 것 같습니다.
- Baudrate 오차(제어기와 Dynamixel) 확인 : Baudrate 오차가 크면 통신오류가 발생할 수 있습니다.
- Packet을 해석하실 때, 타임아웃 설정이 있다면 타임아웃을 조금더 길게 조정해보세요.