Moving Status returning 0x08

Issue:

I have a system with 3 XL330’s and am trying to set their positions and then wait for them to arrive. To do this, I am monitoring bit 0 of MOVING_STATUS (register 123) for all 3. However, one of the motors consistently returns 0x8, which indicates a following error. However, it appears to be working (just looking at it move into position visually).

MOVING (register 122) is 0 for all.

Why might this be happening? Is there a robust way to detect movement has stopped?

Thank you!


DYNAMIXEL Servo:

XL330


DYNAMIXEL Controller:

Using a Waveshare controller board.


Software Interface:

Python with dynamixel-sdk.

First, no ROBOTIS servo can be so “perfect” so that the Final Present Position is matching exactly the Goal Position that you programmed into it. In the past, I have more success using Address 122 with the following procedure:

  1. Send in the new Goal Position value to your servo.

  2. Wait for 10-15 ms so that the Servo got the chance to start going to the new GP. At this point in time, Address 122 should read 1. Or DO a WAIT WHILE Addr. 122 == 0.

  3. Then I monitored Address 122, or waited until it reads 0, i.e. now DO a WAIT WHILE Addr. 122 == 1.

  4. Then check the servo’s Present Position vs. the previous Goal Position to see they are close enough to each other or not.

Do you need ALL XL-330s to arrive at their New Goal Positions at the same time? If that is the case, you can try to use them in Time-based Position Control mode (see info for Address 10 - Drive Mode):

Then it is a matter of waiting a certain amount of time in your programming.

Thanks, I’ll look into this mode and try the other approach as well. I’m trying to do real-time IK of a robotic arm. I probably don’t need to monitor that the goal position has been reached during normal operation but there are occasional times when I want to ensure the robot is in a given pose before proceeding.

You can always read in your set of Present Positions any time you want to, but just don’t expect that they are going to match exactly the original Goal Position values (i.e. the pose) that you told them to go to earlier.