I'm trying to simulate a humanoid robot using Gazebo with plugins. Since our actual model uses Dynamixel motors, I'd like to know how exactly they work to make the simulation as realistic as possible.
Gazebo offers two options to control joints. One is a PID controller, provided by the
JointController class. The other way is to directly set a torque to the joint. (The PID method too is ultimately implemented using torques).
Currently, I'm trying the PID-based implementation. I've used a P-only controller with damping on all joints (I've had to guess both values). However, there is a large amount of noise, and the difference between actual and desired position is at times as much as 10-12 degrees (especially when the foot of the robot hits the ground).
Does the actual motor use a PID controller as well? I can't seem to find the details here, Dynamixel EX-106 User's guide, but this link, Dynamixel EX-106+ Robot Actuator mentions "Compliance/PID : Yes".
If the motor does use a PID controller, then what are the parameters? And how does it allow us to set moving speed then?
If the motor doesn't use a PID controller, then what is the pattern of torque provided? In the manual (first link), I found this
From the current position 200 to 491 ( 512-16-5=491 ), movement is made with appropriate torque to reach the set speed; from 491 to 507 ( 512-5=507 ), torque is continuously reduced to the Punch value; from 507 through 517 ( 512+5=517 ), no torque is generated.
This is rather vague though, and no further details are provided.
Also, I'm aware that extremely high damping and extremely high P-values might do the trick. But I want to simulate what actually happens on the motors, and that is probably not the way to go.
I'd appreciate it if anyone has any idea of what Dynamixel servos do, or examples of simulated Dynamixel motors anywhere else.