Connect and control Robotis Dynamixel Servos to ARC. This open-source plugin converts the Virtual Servo ports on ARC (v0-v99) to control Robotis Dynamixel Servos.
+ How To Add This Control To Your Project (Click to Expand)
Manual
Connect and control Robotis Dynamixel Servos with ARC, including Arduino and Robotis controllers. This open-source plugin converts the Virtual servo ports with any EZ-B (v0-v99) to control Robotis Dynamixel Servos. The servos supported are XL-320, AX-12, and XL430 compatible protocols. Dynamixel Servos are very different than regular hobby PWM servos. Firstly, they are considered much more professional due to their design which is specific for the use in robotics. Each Dynamixel servo contains a microprocessor. The microprocessor is told what position to move the servo into over TTL at the configured baud rate.
Cable Accessory
This plugin requires a cable accessory to easily connect your servo to the EZ-B. If you desire to READ servo positions, the cable will need to include both RX and TX. There are instructions below for connecting the servo to READ positioning.
EZB Controller Types
There are a few different types of EZB controllers, that each has its own hardware configuration. We cover the controllers and what UART should be used below.
EZ-Robot IoTiny
The IoTiny does not have a hardware UART, so it cannot read servo positions. This means you can use any of the digital ports to transmit servo positions to the servo. Connect any digital port of the IoTiny to the signal wire of the dynamixel connector.
Arduino/EZ-Robot EZB v4 Wiring For Reading Positioning
You must manually wire the servo yourself to these controllers using this diagram. If you wish to read servo data with bi-directional communication, you must connect TX and RX ports together. On the EZ-Robot EZ-B v4, it’s port D5 (TX) and D6 (RX) for UART #1 together.
Robotis Open CM9.04 Controller
The Robotis Open CM9.04 controller can either support servos connected directly to itself or through the expansion board. If using only the controller, the UART #0 is used in ARC. If using the expansion board, UART #2 is used in ARC.
Robotis OpenCR Controller
The Robotis OpenCR controller can support servos connected directly to the onboard connectors. This uses UART #2 in ARC, which means select UART #2 in the dynamixel robot skill config.
UART/Serial Port Overview
There are a few options for connecting the Dynamixel servos that were covered above. Here is a summary...
1) EZB controllers without hardware UART (such as IoTiny) will use software serial pins for transmitting servo positions only. They cannot read servo positions. With this setup, you can use any digital port.
2) EZ-Robot EZ-B v4 or Arduino Mega is UART #1 (port D5 & D6). But depending on how many UARTs there EZB has, you can connect to any UART.
3) Robotis Open CM 9.04 without expansion board uses UART #0.
4) Robotis Open CM 9.04 with expansion board uses UART #2.
5) Robotis OpenCR uses UART #2.
Voltage
Most Dynamixel servo documentation states the operating voltage in the manual. Check the documentation for your dynamixel servo model to ensure your power source is sufficient. If you experience unusual behavior of Dynamixel servos, the first common issue is insufficient to power.
Servo ID
The Dynamixel Servos each have a unique ID. Because they are chained together through one cable, each servo must be given a unique ID. Servos with the same ID will respond to the same commands, and therefore mirror their behaviour. New Dynamixel Servos come pre-configured with the ID of 01. servo V0 relates to dynamixel ID:0, V1 is dynamixel ID:1, v2 is dynamixel ID:2, and so on...
Using this configuration utility, you can assign new ID's to servos. You may also test the servo to ensure the ID was successful.
Servo LEDs
The LEDs on the dynamixel servo can be controlled using the EZ-Script ControlCommand(). View the Cheat Sheet when editing a script to see the available ControlCommand syntax for the Dynamixel Plugin.
EZ-Script Commands
There are a number of EZ-Script commands added with this control. The commands are as follows...
Quote:
GetDynamixelTemp(ServoPort)
Returns the temp of the specified servo
GetDynamixelLoadDir(ServoPort)
Returns the direction of load on the specified servo
GetDynamixelLoad(ServoPort)
Returns the load of the specified servo
GetDynamixelPing(ServoPort)
Returns a ping response if the servo exists. Otherwise, returns false
Video Demo With Robotis Arm
This video uses a Robotis Dynamixel arm and XM430 servos with an OpenCM9.04 controller.
Step by Step Instructions
Once you have the servo wired, and sufficient power is provided, you can use any control in ARC that uses servos. This means it will work with Auto Position, Camera, WiiMote, Joystick, and more. In this example, we'll show you how to move a dynamixel servo with a generic servo control. Before following these steps, ensure you have this plugin installed.
Step 1
Load ARC

Step 2
Connect to your I/O controller

Step 3
Add the control by selecting the Project tab and Add Control

Step 4
Navigate to the servo tab and select Dynamixel. If the plugin has been successfully installed, you will see the Dynamixel plugin in the list.

Step 5
The Dyamixel control will be added to your project. Press the Config gear icon to load the configuration screen.

Step 6
Enter the baudrate that matches your servo configuration. The servos have a baud rate that can be specified, or a default baudrate shipped from factory. If you need to change the baudrate of the servo, use the Dyanmixel utility. You cannot change the baudrate of the servo in ARC. This value is the baud rate that the EZ-B will use to communicate with the dynamixel servo. This must match the baudrate of the servo.

Step 6a
Specify what port the servo is connected to on the controller. It is important to follow this recommendation. There are blue question boxes in the plugin (and throughout the ARC software) to assist you robot development. It is recommended to use the blue question marks and read the content to understand what options do.

Step 7
Each dynamixel servo will have a unique ID. Enable each ID for the servos by checking the respective box. When an ID is checked, the ARC software will use the Vx (virtual servos) corresponding with that ID. For example, if you enable Dynamixel servo ID #2, the ARC V2 servo will control it. Also, specify the protocol version of the servo. Different dynamixel models will use one of the two protocols. Consult the datasheet of the dynamixel servo to know what protocol it uses -or- contact Robotis for more information on using their product. To get full resolution of the servo, also ensure you have entered the MAX resolution for that servo model. Each model has different resolutions, or it can be configured using the Dyanmixel utilities.

Step 8
After you have enabled your servos, press Save

Step 9
Now we will show you an example of how the servo can be moved. We will do this by using a generic horizontal servo control. Press Project -> Add Control to return to the add control menu. Navigate to servo and select Horizontal Servo. Remember, any control in ARC that uses servos can now control dynamixel servos by the respective Vx (virtual) servo ID.

Step 10
Press the GEAR icon to configure the horizontal servo control.

Step 11
To configure this control to use a virtual servo, select the servo to bring up the port dialog. This applies to all controls in ARC that use servos.

Step 12
Select the Virtual servo ID for your dynamixel servo from the list and press Close.

Step 13
Now use the sliders to specify the Min and Max position that you wish this servo to move and press Close.

Finished
You can now control the dynamixel servo with the horizontal servo control. To find out more about servos, consult the learn section of this website for activities on using your Synthiam product.
Related Content

DJ's Third Hack Night

DJ's 4Th Hack Event (Arduino, Bioloid, Lewansoul, And More)

Dj's 5Th Live Hack Session

Dynamixel With Ezbpi Server

DJ's 9Th Live Hack - Raspberry Pi + Dynamixel... Together...

Hacking Robotis Opencm 9.04 With Bioloid

The Lattepanda Robot Hack

Leap Motion Combine With Ez-Builder To Control In Space

XL 430-W250-T $49
XM 430-W350-T $220
Both use the version 2 protocol per the manual.
Both come default 57600 Baud rate per manual.
And default ID 1
When I set up the environment I use 57,600 and protocol 2 and save.
When I enter settings, I choose Protocol 2. When I try to activate leds, nothing. Move servo, nothing.
If I ping, I get the following:
Now if my memory serves me, we have had support for protocol v2 for some time. I have not tested protocol 2 as I've not had a protocol 2 dynamixel until now. Have you guys tested with a v2 dynamixel when you added support for it in the plug in?
As stated elsewhere I have 20 64mx dynamixels working in all my Alan and Alena’s robots no problem.
It’s these new servos from Dynamixel I cannot get them to respond with the plug in.
If I try to do anything protocol 2 related I get message this function is not implemented for protocol v2. Please let us know on the ez robot forum community forum if you wish to use it like if I try to reset to factory defaults or try and change baud or ID. Same message.
I’m also going to try and connect the servos to the controller from Robotis to just verify the servos are working correctly.
Its unfortunate as their only affordable $50 servo the XL430-W250-T is in that list too.
I can can also say that I cannot get these to work with the EZB. I would beg you to try one of the above listed servos for your testing on Friday night.
THESE are NOT like their other servos like the ones i've used in the past.
EDIT: I Purchased a OpenCM9.04 with expansion card to try to flash the servos to protocol 1. Will post here the results.
Can I assume the AX12 in the utilities drop down uses the same protocol (1) as the old plugin along with the entire line of these servos? I have the MX-64 in the Alan and Alena robots.
[color=#111111][size=3][font=Verdana, Arial, Helvetica, sans-serif]1) Settings: max position regardless of what number i put in and save upon re-opening max position displays 4095 on V1. [/font][/size][/color]
[color=#111111][size=3][font=Verdana, Arial, Helvetica, sans-serif]The old plug in allowed me to set other lower max positions.[/font][/size][/color]
[color=#111111][font=Verdana, Arial, Helvetica, sans-serif]Edit: fixed issue 2[/font][/color]
Click on the word servo in this reply and read how to limit servo positions the correct way to avoid damaging your robot.
See this thread: https://synthiam.com/Question/17497
I have two XM430-w350, tried ever combination and I can ping and turn led on and off no servo movement. So I’m done with those.
My robots are set up with the older XM 64s and I have them set up with global max position 4096 and max position 720. This gave me the smoothest motion with in the range.
I’m going on the air live with DigitalTrends and will just use an older laptop with the old plug in.
Here is the code for the XM430-W350-T....no movement. Led blinks and no errors on the code and no movement.
Code:
I made a minor update to the dynamixel plugin just now. Try that? If not, i can't help any further and can't guess what's incorrect with your setup.
Here is what is happening. Alan and Alena work on the MX-64s ($299)...the plug in you wrote has worked perfect for these past years. I use them for strength, silence and longevity.
Robotis [font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"]XL 430-W250-T (the $50) version is small enough to fix 8 inside the robot heads for a project I'm working on for Amazon. This is the reason I was trying to get the servos to work together (the MX-64s old protocol ver 1 and the new ones XL 430-w250-T )
If Robotis just kept the commands the same everything would work with the old plug in.
The XM430-w350 ($229)was a back up servo which has more strength than the XL-430-w250 ($50), but in same form factor. The reason I was trying to get it working today. (but least important)
To be clear your work was not wasted as the XL430-w250 ($50 ver) works perfect with the new plug in. Just not it’s expensive brother.
( there are a lot of nomenclatures here with sometimes one letter or number difference reason i added pricing to make it a bit more clear which servos im talking about)
[color=#ce3991][font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"][font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"][font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"]
[size=3][font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"]If you wish to use one of those 3 servo models, go for it. Any servos outside of those 3 are not supported. If the conversation you're having is about servos outside of those 3 models, i can't help you.[/font][/size][/font][/font][/font][/color][font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"][font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"]
[font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"][color=#442e5f][size=3][font=OpenSans, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"]Perhaps one day I'll look at the other model servos. At this time, i've spent more time at work and personally on supporting these servos. I was up until 4:30 AM working on a plugin for you. And at this point, i'm done. Choose your technology based on what's supported and works is the best advice i can give you. [/font][/size][/color][/font][/font][/font]
I had tried earlier today with the robot heads, with no movement. User error. Once I figured out what went wrong, I tried again with the most recent updated plug in and the heads came to life.
I now have both types of servos working in the same environment. Thanks again for all the hard work. I never stop praising the time and effort you guys put in. Hopefully you can accept apologizes.
We were informed that there was some confusion regarding the Communication Protocols and firmware of DYNAMIXEL smart actuators and their implementations.
All DYNAMIXEL smart actuators communicate over a shared serial bus using asynchronous serial communication, over which users may send instruction packets with commands, or receive status packets with information. The method used to order the data contained in these packets is known as the DYNAMIXEL Communication Protocol.
Protocol 1.0 was the first Communication Protocol implemented in DYNAMIXEL firmware, and was used with all classic series of DYNAMIXEL including DX, EX, RX, AX, and MX models, and has seen well over a decade of use implemented in these models. This Communication Protocol works well for DYNAMIXELs in these series, and allows for simple packet construction and relatively simple validation via checksum.
Protocol 2.0 is the modern implementation of ROBOTIS' Communication Protocol for DYNAMIXELs and was recently released with DYNAMIXEL X-series and DYNAMIXEL PRO-series. Protocol 2.0 was developed to more effectively manage larger amounts of data while maintaining DYNAMIXELs' asynchronous serial communication through instruction and status packets. Protocol 2.0 includes an expanded set of packet instructions, as well as CRC-based packet validation to eliminate the need for (potentially huge) checksum calculations.
In addition to Communication Protocol, every DYNAMIXEL is operated using the Control Table. The Control Table contains every numbered firmware address that the user has access to and which may be referenced in instruction or status packets. Many models of DYNAMIXEL which used Protocol 1.0 utilized similar Control Tables, and this has been continued for DYNAMIXELs which use the newer Protocol 2.0 being associated with "Control Table 2.0". For a "Control Table 1.0" example, on AX-12A the firmware address for Goal Position is 30, which is identical to Goal Position for MX-106. "Control Table 2.0" is much the same- Goal Position on an XL430-W250-T is firmware address 116, which also matches the Goal Position address of XH540-W150-T.
ROBOTIS realizes that a change in Communication Protocol and firmware features can be an adjustment the DYNAMIXEL community, and for this reason ROBOTIS included a firmware parameter known as "Protocol Version" in Control Table 2.0 DYNAMIXELs. This value acts to switch the DYNAMIXELs' accepted communication format between Protocol 1.0 and Protocol 2.0 packet structures. In addition, users can upgrade their MX-series DYNAMIXELs to Control Table 2.0 for the new firmware features, new control table, and "Protocol Version" parameter for Communication Protocol flexibility.
If anyone has further questions about DYNAMIXEL actuators or ROBOTIS products feel free to reach out to our Customer Support team at CS@robotis.com, and we're excited to be a part of the Synthiam and ARC community!
The Protocol 2.0 has different commands in the control table for different servo models. For example, the XL-320 with protocol 2.0 uses decimal 30 (16 bit value) in the control table for Set Goal Position and the XL430 uses decimal 116 (32 bit value) in the control table. So each servo uses the same "protocol" but different commands, which isn't entirely a protocol if they're different enough to have varying bit sizes and command values.
Also, the behavior of the servos are different. The XL430 requires Torque Enabled (decimal 64) to be set before the servo will move, while all other servos will move when they receive the goal position. This behavior added a number of hours of trouble-shooting because there's no documentation we came across stating the torque must be enabled before Set Goal Position would work.
We love your hardware and products, and will continue supporting them. However, documentation and standardization across servo models using the same protocol versions would be appreciated in future products :). I enjoy working with you to achieve our mutual goal of robots helping society, together.
Thanks for responding and hope to see you around often
I hope that all is well with the ARC team and their families during this time. We have been conversing on another thread regarding an OpenCM9 + Exp Board. I have a cable coming that will allow me to use just the OpenCM and my AX12s and am hoping that resolves my issue there. Now I am trying to use my IoTiny with my AX12s. (I am using your cables).
The tiny connects as long as I get my servo baud rate within the plugin set at an acceptable level for it. The AX12 seems to be a variable baud rate so thinking that part should be fine. (I have tried 9600 and 115,200 thus far.). Power is appropriate for the Dynamixel. I have set the virtual ports, etc. per the tutorials. I am only connecting one servo at this point to D0.
The servo is not responding to the horizontal control. It is receiving power and seems to be connected. Ping does not work with the Digital Port and the LED test doesn't do anything...
Your thoughts?
One more comment...there is a message in the Dynamixel plugin..."disable status packet.."
You have to program the dynamixel for the specified baud rate. It's not "Variable" as in it magically detects it. The dynamixel will need to be configured for the baudrate. There's a tool from robotis that does that. Otherwise, an EZ-B v4 can do it because it has variable baud rate. The opencm should also be able to adjust teh baudrate as well.
And Thanks! (I had only looked and the Roboplus Manager program...not the Dynamixel so I did not see how I could change the baud rate. Also, the Dynamixel Wizard requires a different part to connect and I had to dig around to figure out if I had one. :-) )
I wanted to let you know I got the OpenCM9 to work with my AX12As using something similar to the AX/MX power hub that is equipped with a connector that is the same size as the connectors on the OpenCM9. Then you need a specific cable to connect the power hub to the AX12. At any rate - it is working like a champ! Now I am going to go out and do your tutorials for learning ARC. I also plan to build a small robot to practice with the IoTiny now that I have found a baud rate on the AX12 that seems to work.
I am so pleased to have something new to learn while I am cooped up. You do good work! Stay well. Vicki
Also, ensure the latest firmware on the Open CM9.04 is installed
Thanks for the expansion board update! I will try it out. I have been able to get my Dynamixel arm to respond to voice commands through the computer and a variety of other things (enjoying it). I am going to order the EZ-B v4/2 and Camera Combo this week. I want to try it with another more robust arm and also with another robot built with the Bioloid Premium kit.
I have played around with the IoTiny but I prefer to not have to reset the baud rates.
Thanks again!
VK