Dynamixel SDK Serial 통신 비정상적인 중단 시 Torque mode를 자동으로 끄는 방법 문의

안녕하세요.

현재 저는 Dynamxel XH540 W150을 사용하고 있습니다.

위 링크의 Dynamixel SDK (Protocol 2.0)을 활용해 C++ 언어로 제어를 하고 있는데요.
속도제어를 펌웨어에 goal velocitt를 Serial 통신으로 명령을 주어 모터를 동작하게끔 하고 있습니다.

우선 문제 상황을 소개해드리면, 비정상적으로 코드가 멈추는 경우 (예를 들어, 컴퓨터 셧다운, 비정상적인 터미널 창 종료 등) 시리얼 통신은 중단 되었으나 토크 enable가 활성화되어 있고, 마지막으로 준 속도 값이 모터에 반영되어, 계속해서 그 값을 유지합니다. 예를 들어 10 rpm이라는 명령어를 준다음, 비정상적으로 코드가 멈추는 경우, 10 rpm으로 모터가 계속회전합니다.
제가 원하는 것은 시리얼 통신이 멈추고 약 50 ms 정도 흐른다면 토크 enable false로 바꿔 다이나믹셀이 움직이지 않도록 하고 싶습니다. (방금 임의로 50ms로 정한 이 시간도 제가 정할 수 있다면 정하고 싶습니다.)

평상시에는 코드를 잘 종료하면 Dynamixel SDK의 c++ read_write.cpp 코드와 같이 마지막에 토크 enable를 끄는 코드를 넣어 문제가 없습니다. 하지만 어떤 부득이한 사유로 통신 상대와 시리얼 통신이 멈추었을 때에는 토크 enable를 끌 수 있는 방법이 없습니다. 그래서 펌웨어에서 통신이 끊겼을 때, 토크 enable를 멈추는 코드가 필요합니다.

그래서 결론의 질문은 다음과 같습니다.
혹시 시리얼 통신이 비정상적으로 중단되어도 토크 enable를 false로 만들 수 있는 설정이나 프로토콜이 존재하는지요?

감사합니다.

The simplest way for you to implement this is using DYNAMIXEL’s built in bus watchdog timer. This will allow you to detect when communication has failed for a specified amount of time, and disable torque to the actuator.

1 Like

That’s exactly what I want. Many thanks for your help.