Issue:
I am running 18 h54-200-s500-r servos on my hexapod robot Marauder:
I have recently upgraded the robot with spring loaded hall effect foot sensors that I have wired into the external port on six of 18 h54-200-s500-r servos. While I can send sync_move commands to all motors just fine, I am experiencing comms timeouts with several of the motors while sync reading the external port.
The Dynamixel SDK reports error COMM_RX_TIMEOUT frequently, and loading the servo bus in DynaWizard looks like this:
Clicking on any greyed out / starred returns TIME OUT when trying to change any parameter. Interestingly, the motors seem to receive the command but the software gets no response, as I tried changing all motors to 1000000 baud and, while they did set the new baud, I got TIMEOUT on any greyed motor. Rescanning showed the motors at the new baud. However, reducing the baud rate did not help with the timeout.
In my code, using the Dynamixel SDK GroupSyncRead function, I am trying to read six motor’s external port simultaneously and I am getting intermittent status packet failures (COMM_RX_TIMEOUT -3001). Sending commands to all 18 motors via GroupSyncWrite works fine and returns 0 (COMM_SUCCESS), I think because it does not require a response.
Interestingly, my simple calibration routine that queries all encoders and external ports and prints the data once every 4 seconds works fine. The main robot program runs at a much faster update rate and sends multiple sync_move commands per second.
Is there any reason why multiple motors would be displaying this issue or any possible fix?
DYNAMIXEL Servo:
18 x h54-200-s500-r
1 x h54-100-s500-r
1 x H42-20-S300r
1 x L42-10-S300r
DYNAMIXEL Controller:
usb2dynamixel
Also tested on U2D2
Software Interface:
Python3 on Ubuntu 18.04.5 LTS
Dynamixel SDK