Synchronisation loop with velocity and acceleration profile


I have a question about the handling of the updates to the Goal Position, Profile Velocity and Profile Acceleration in the X series. I understand how the trajectory is produced when these parameters are sent to the servo and how they generate (if all used) a sigmoid position graph leading to reduced jerk.

The situation that I have though is that the 3 registers are updated in a synchronisation loop at a certain frequency (ex. 50 Hz) from a ROS node. If I have, let’s say, a desired position to be reached in 2 seconds the node calculates an appropriate velocity profile and acceleration profile and then saves them into some internal proxys for the servo registers. The loop then syncs these with the servo 50 x 2 = 100 times (same value).

The question is what happens inside the servo in respect to the position trajectory determination: will the resend of the same data preserve the already calculated trajectory or the trajectory is recalculated based on the present position of the servo and the indicated velocity profile and acceleration profile. Because I have the feeling that when acceleration profile is used the trajectory ends up recalculated and undershoots the desired time and leads to excessive jerk in the end.

Could somebody confirm this or suggest a better way to handle it?


When you are using a Time-based profile, the profile is regenerated whenever the Goal Position is updated.
If you are generating your own profile, you should not use the Time-based profile mode as this will automatically adjust the profile acceleration and profile velocity.

Hi Will,

Thanks for the reply. I was actually using a Velocity-based profile, but I think what you wrote for Time-based profile is also applicable to Velocity-based profile if using acceleration profile too.

To make it more clear: the servo is configured with Velocity-based profile (bit 2 in register 10[Drive Mode] set to 0) and operating mode (register 11) is 3 (Position Control Mode). Suppose the servo is at position 2048 (register 132) and the main controller program would like to move it to position 3072 in a 2 seconds time using a smooth trajectory. So the controller will determine the following 3 parameters that are stored in proxy variables in the code:

goal_position = 3072;
profile_velocity = 90[deg]/ (0.229 [rev/min]* 360[deg/rev]/60[s/min]) / 2[s] = 33
profile_acceleration = profile_velocity/2 = 16

We calculate the velocity using the difference of 90 degrees that we want to move the servo, the rated 0.229[rev/min] unit defined for the profile_velocity register and and 2 seconds desired time. The profile_acceleration is set to half the profile_velocity to provide the smoothest sigmoid curve.

Now the sync loop will replicate these 3 values at (let’s say) a frequency of 50Hz, meaning there will be 100 updates in the servo of the 3 parameters (goal_position > register 116, profile_velocity > register 112, profile_acceleration > register 108).

I think also in this case the trajectory is recalculated every time the sync loop updates the values - even if the actual numbers are not changed.

It would be good if you could confirm this.


When you are using the Velocity-based profile, DYNAMIXEL calculates the trajectory when the Goal Position gets updated using the profile acceleration and the profile velocity to reach to the given goal position.
When the external software creates and transmits the calculated trajectory, we use the maximum profile acceleration so that unintended deceleration/acceleration would not affect to the seamless motion.
Thank you.