Single XC330 servo responding that it's not moving when it is



Issue Description

Hello. I have set up a few servos in my project and I am waiting for them to complete their movements before I do any further commands in the machine. However, after I send a command to the servo to start moving, it does receive this and starts to move, but then immediately after I send a command to ask if it’s moving until it gives a negative response, but it gives negative moving immediately…

I have set the profile velocity quite low on this one, however. It is at 5. Could this be an issue? I can’t have it faster than that.

Thanks for any help.

It seems as though if I check it too soon (I had a delay of 40ms already), then it says it’s not moving. I just increased the delay to 500ms and it did the check 5 times over 2.5s confirming it’s moving until it came to a stop.
I wouldn’t have a problem with these delays generally. But is this going to be reliable enough for me in a commercial product?


I don’t mean any disrespect, but is this the first time you use a ROBOTIS Actuator?

If you are, you may want to try this YouTube video for the XL430 which functions similarly to the XC330. This video describes several ways to set up “simple” Position Control Modes with Parameters such as Profile Velocity and Profile Acceleration. A Profile Velocity value of 5 is very small, so your XC330 should have started and moved very slowly. What was the value of your Profile Acceleration?

Also it seems like that you are an experienced control engineer, so you may want to look at using your XC330 in Current Control Mode or PWM Control Mode or Current based Position Control mode too - see Address 11 of the Control Table of the XC330:

Also were you checking Moving Parameter (Addr 122) or Moving Status (Addr 123)?


1 Like

Hello @roboteer . Thanks for the response.

I have been using these servos during the development of this product for a few months in an isolated environment, but now I am bringing everything together, there are these issues.

I was setting the acceleration of this single servo to 10, but I removed it while testing and it didn’t change much. Apart from checking the Moving field, everything else does work great. Although the positioning is a bit off, I need to do PID tuning but it’s difficult to get the cables into the Dynamixel module for it, so I want to try and do it through my API I built.

The moving status could be very useful for me for this situation. It seems that the Profile Ongoing bit will give me the information I need once I have provided a Goal position?

What are the values used for Drive Mode and Operating Mode in your current system?
Also what Board is used to control the servos? If you can share that.

Drive mode is default and also same for operating, so it’s in position control mode.
One of the servos I do put into velocity control mode sometimes but that’s working fine. In fact, I would prefer to use velocity control as it seems to move much smoother from the initial movement to the end, but I can’t record exact positions with it, afaiu.

I am going to try PID tuning by using the maths for it (this definitely isn’t my strong suit).

If it turns out to be a failure, how much of an issue is it to use goal position, and if there’s still a distance to get to, or overshoot, then I can use velocity mode to push to that position?

You can always monitor Present Position at any time.

Switching back and forth between Position Control and Velocity Control is not recommended as that switching takes time. If the primary goal is to reach a Goal Position and hold it there, then it is best to use Position Control mode.

Next, about the precision of the final position obtained. The XC330 has metallic spur gear so it sure is better than XL330’s plastic gear but still it does not have perfect precision. Goal Pos will always be slightly different than Present Pos when the servo stops. You need to play between Profile Acceleration and Profile Velocity to get the best performance that you need. Remember that PA and PV at start time do not have to be the same values used for the stop event. And all this with the default values of PID parameters, so when you put the PID parameters into play you’ll have multiple possible solutions to consider too! :grinning:


Another “design” idea that I forgot to mention, if you use this kind of X3P JST Expansion Board

You can create a “tap” into your finished robot so you can access into the “already in-place” servos (i.e. the Dynamixel Network) and access them via a U2D2 and use Dynamixel Wizard to do your tuning process without having to open up the robot each time.

This seems quite useful actually and I will probably invest in this. I will, however, need to crimp the JST connectors myself then and make long cables for them. Currently I just used shielded cable and then soldered the provided JST connector cables to the shields wires. I have provided a youtube video with the machine I am building.

You can see the rotary motion is controlled by an XC430, and the claw closing and opening, as well as the tonearm rotation, are controlled by XC330s.

The tonearm rotation is the biggest issue currently. It needs to be so accurate because the leverage becomes much bigger, ultimately making each degree much larger. I need this to be perfectly accurate… So I think I may need to go for a totally different mechanical approach.