Dynamixel USB Controller

USB2Dynamixel controller Networked Dynamixel servos

This IO controller targets the Dynamixel USB controller hardware from Robotis. You can purchase this controller at a number of different robot supply stores (TrossenRobotics, Robot Store). The Dynamixel servos are networked so you can have all of them on a common bus and use half-duplex serial communications to write commands to them, and read data like actual position, velocity, load, etc. from them. To use this type of controller you need to first add it to your robot interface and then configure it. Please make sure you look at this post on the FTDI driver issue related to this controller. If you do not have the correct drivers installed it will not communicate correctly. Once you have the drivers installed and working, then when you plug in the controller to a USB port it will create a new serial port on your computer. You will need to know that port number and set that in the DynamixelUSB property grid. I suggest you leave the baud rate set to 1. That is the maximum rate for the AX servos, and it is what they use from the factory. Next, you will need to add Robot Part Interfaces. Right click on the controller and select Add Part. It has two options, Hinge and Prismatic motors. You can only use the hinge motor to connect to hinge joints on your simulated system, and the same with prismatic. The motor properties shown in the property grid are pre-configured to emulate the AX-12 servo. To emulate an AX-18 instead choose AX-18 from the motor type drop down and it will change the settings to match that. If you want to emulate a different motor then select Other and you can edit the settings by hand to what you need. Below is a list of the properties available for the hinge servo type.


  • Angle Max: Maximum angle in degrees that the motor can move.
  • Angle Min: Minimum angle in degrees that the motor can move.
  • Position FP Max: Fixed point value that represents the maximum movement angle.
  • Position FP Min: Fixed point value that represents the minimum movement angle.
  • Max Rotations Per Minute: Maximum rotations per minute for the motor.
  • Velocity FP Max: Fixed point value that represents the maximum velocity.
  • Velocity FP Min: Fixed point value that represents the minimum velocity.
  • Load FP Max: Fixed point value that represents the maximum load value.
  • Load FP Min: Fixed point value that represents the minimum load value.
  • Linked Part: Allows you to choose the motor within the simulation that this corresponds with.
  • Query Motor Data: If this is true then it will periodically pull back the motor data like position and velocity. If not then it will not poll this motor for data.
  • Reset To Start Pos: If this is true then it will reset this motor to its 0 position each time the simulation start.
  • Servo ID: This is the ID value of the servo on the network.
  • Update All Params Count: When querying the motor it will only get all the data every now and then. Usually, it will just get key data. This value tells how many update loops to perform before it will attempt to pull back all data for a motor.
  • Update Queue Index: This IO controller can poll the motors in a round robin fashion in order to get a faster motor update rate. If do not want to use this set this value to -1 and this motor will be updated every single step. Otherwise, set the index to some non-negative value. So if you have three motors and you set them to 0,1,2 receptively, then on the first update loop it will poll motor 1, then on the next loop it will poll motor 2, and then motor 3. If instead, you set the first two motors to 0, and the next one to 1 then on the first update loop it will poll motors 1 and 2, and then poll the 3 motor on the following update loop. 
  • Translation Range: This is only on prismatic motors. It is used to convert the angular movements of the motor to the corresponding linear movements. So if a full 300 degrees of servo movement can move the part by 2 cm, then this is the range value that should be placed here.

For Dynamixel servos you can choose any of the three types of control options. When you select velocity only it will set the position to be the maximum angles in the direction you are moving and then move the servo at the specified rate. For position only control it will use the maximum servo velocity and set its position based on the input. For position and velocity control you will need to have two adapters with different target data types. One to control the position and another for the velocity. One thing to keep in mind here is that if you set the position, but have the velocity still set at 0 then it will not move the part. You have to control both of them. This controller uses the synchronous move request to control the Dynamixel motors, and it will only send move commands for motors that have changed values. For example, say you have changed the position and velocity of two motors in a given time step, then it will send out a single move packet with the new position and velocity values for those two motors instead of sending out multiple separate packets. This helps minimize the amount of data that has to be sent out and increases the motor update rate.  

The prismatic part type is essentially a hinge that is geared to produce linear motion. You can only associate this type with prismatic joints. All of the settings are essentially the same except it has an additional Translation Range parameter that is used to convert the maximum angular movement to the maximum translation movement.