I am using dynamixel MX-64 and MX-106 motors in a robot arm for my master thesis. I have implemented an inverse dynamics control for the arm which calculates the torques needed to move the robot to a desired position. The problem is that i get my torque values in [Nm] and the motors requires current values between 0 and 1941 for MX-64 and 0 ~ 2047 for MX-106 and the conversion i am doing is not working properly since gravity compensation is not working. If i have zero gains on my implemented PD controller the robot is still able to move to a desired position. It is not able to reach it but the motors each move a few good degrees towards the goal. And if i help it a bit manualy it reaches the goal and also once it reached its goal position and i try to push it, it still tries to compensate and go back to previous position. This indicates that it still overcompensates a little over gravity compensation.
I base my conversion on the stall torque: 8.4 [Nm] (at 12[V], 5.2 [A]) for MX-106 and 6.0 [Nm] (at 12 [V], 4.1 [A]) for MX-64.
I have used both the recommended current unit conversion of about 3.36 [mA] and also made a custom automatic mapping of the min and max torque range to min and max current range for the both MX-64 and MX-106, since they have different range limits as specified above. The custom mapping worked better than the suggested conversion of: (torque [Nm] * 1000 ) / 3.36.
I tried mapping using both max values of current limit but also modified limits given that the motors accept 0 ~ 1941 and respectively 0 ~ 2047 at max voltage of 14.8 [V] and since i am using 12 [V] with a different max amperage i reduced the limit values on both motors by the difference ratio in max amperage between 14.8 and 12 [V]. This did not visibly help either. Do you know what could be the problem and how should i correctly convert torque values to motor current values at 12 [V], 5.2 [A] and 4.1 [A] respectively?
Thank you for the detailed description about your application.
The MX series can support various features of X series after the Protocol 2.0 firmware update.
However, the hardware has not been updated which makes it difficult to get the precise current sensing for the application such as the gravity compensated manipulator arm.
For such applications, we recommend to use XM series or XH series.
Thank you for answering.
So it is not possible to get an accurate interval of min and max values of current values based on min and max values of torque values on the MX series motors?
And is it guaranteed that for the XM/XH series there is an accurate estimate for torque vs current values ratio?
Since the feature for the XM/XH is intended to report the actual current flowing into the internal motor coil, it'll be working better than MX series.
Each module might have a slight variation, but I'd say it is pretty accurate and will work fine for gravity compensation manipulator.
Although there's little can be shared, we've successfully implemented gravity compensation with a humanoid arm based on XM430-W350.
I see. Thank you for answering. But can you please confirm if the values (current values) that i have to send to the MX motors are of type "uint16_t" or "unint32_t"?
For MX series, even if you are using Protocol 2.0, the Current related data(such as Present Current(126)) is using 2 byte memory.
Please refer to the eManual below that describes the structure of memory area.
Also, for the negative values, DYNAMIXELs are using 2's complement.