안녕하세요.
현재 저는 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로 만들 수 있는 설정이나 프로토콜이 존재하는지요?
감사합니다.