Closed jimruxton closed 7 years ago
Hi Jim,
thanks for your feedback, I'm glad to know that pyax12 works on MX actuators too. Pyax12 has been written for AX-12 actuators and these actuators don't have the "goal acceleration" data in their control table ; Sadly I don't have any MX actuator so I can give you some clues but I cannot test them.
You use utils.int_to_little_endian_bytes
function to make the acceleration value params
. This function return a 2 bytes value.
According to Robotis documentation, the goal acceleration
data is coded with only 1 byte (it takes values in range [0,254]) contrary to the moving speed
data (which takes 2 bytes).
That's certainly why you have this range error.
For one byte values, one should not use the params = utils.int_to_little_endian_bytes(acceleration)
line and simply write this (like the set_id
function):
def set_goal_acceleration(self, dynamixel_id, acceleration):
self.write_data(dynamixel_id, pk.GOAL_ACCELERATION, acceleration)
Also, don't forget that pyax12 has been written for AX-12 actuators, there may be deeper causes for issues observed on others Dynamixel series.
I am experimenting with pyax12 on an MX28 motor. It works quite well. Thanks for sharing your code. I want to add a command that will control acceleration so I tried just copying your set-speed function and creating a set_goal_acceleration function as below:
When I call this function I get a range error , just wondering if you have experimented with setting acceleration and if so what I could be doing wrong. I assume I only need to send the 1 parameter. I can set the "Goal Acceleration" using Dynamixel Wizard but when the motor power is recycled it reverts back to 0 "maximum acceleration" I'd also like to modify the PID values but that's another issue.