Torque readings: Dynamixel MX 64

I’m trying to get some torque readings for parameter estimation. Does the get_present_load function return the torque reading from a sensor? On the Dynamixel manual it says:

"Current load is inferred from the internal torque value, not from Torque sensor etc. For that reason, it cannot be used to measure weight or torque; however, it must be used only to detect which direction the force works. "

Is the value I read from the function an accurate reading or does it suffer from the drawback above?
I suppose I could also use a function created to read the current register (x044 I think). Is there some place I can get an accurate set of values for mapping between the current and output torque?

This value is a percentage of the motor max torque. It is very noisy and you do not really know what is the max torque so it’s quite limited.

Yet we still use it to detect when someone is applying a force on an arm to turn it compliant:

Thanks for the reply, but what I need are the torque readings to estimate the inertia and friction coefficients of an arm. I’ve obtained the current from the registers and the noise is small enough after data averaging over several cycles.

What I’m trying to do is obtain a function that maps this current to the torque. The Dynamixel manual has the graph shown below, so I’m wondering if it’s appropriate to approximate the pink curve as a straight line and then calculate the torque. Accuracy is important, but I haven’t been able to find any numerical data and this graph seems to be the best I can get.

Yep this is the only documentation Robotis has…

You can try using this approximation and evaluate how good it is with a benchmark, e.g. adding a known mass and lever arm on the output.

How many cycles ? Possible to see your code ?
I’m interested to obtain a way to read the torque on a motor because it is a way to balance the robot.

Important Update: The method described below does NOT work. We did some experimentation and the values we read were not consistent

Update 2: Robotis just informed us that the current in the figure above should be in amps, not milliamps

Go to pypot->dynamixel->conversion.py and add this:

 # MARK: - consuming current


def dxl_to_current(value, model):
    return (value-2048)*4.5


def current_to_dxl(value, model):
    return int((value/float(4.5)) + 2048)

Then, to pypot->dynamixel->io->io.py and add:

_add_control('present current',
             address=0x44,
             access=_DxlAccess.readonly,
             dxl_to_si=dxl_to_current)'

This should allow you to read the current (I think) using

dxl_io.get_present_current(found_ids)

We did data averaging over 500 cycles following a sinusoidal trajectory.