Welcome to Synthiam!

The easiest way to program the most powerful robots. Use technologies by leading industry experts. ARC is a free-to-use robot programming software that makes servo automation, computer vision, autonomous navigation, and artificial intelligence easy.

Get Started
Asked — Edited

Sudo's Guide To Dynamixels

PLEASE NOTE: THIS GUIDE IS OUTDATED. BADLY. (remind me later to fix this and spiff it up a bit, please)

So, you finally have your EZ-B v4. You love it already, and you're ready to hook this baby up to some sort of Dynamixel powered creation. You go to plug everything in, and - wait. You have no idea how to set those Dynamixels up.

Well, I do, and I'll show you how.


User-inserted image

Dynamixels are intelligent servos that can track not only position, but temperature, speed, and load. The servo can automagically shut itself of incase of a failure. These servos are also incredibly strong. But there's one feature in particular that is useful, but at the same time a little hard to wrap your head around. In this section, we will cover daisy chaining and other features of the AX-12A Dynamixel; however, most of the servos in the Dynamixel family work exactly alike, so this guide can help you with most models.

User-inserted image

On the back of all of your Dynamixels, you will notice a couple things. A place for a bolt, a light, two wire ports, and the ID. Lets go over all of them so you know what they do:

Light - Blinks once when turning on. If the light is flashing, there is a failure of some sort.

Screw hole - Allows you to attach the Dynamixel to a bracket.

Wire ports - Allows you to connect to other Dynamixels, in a long strand of servos, both to and from other Dynamixels. This means both ports work the same way, which means it doesn't matter which side is plugged in. (see image below)

ID - What the EZ-B and EZ Builder address the Dynamixel as.

User-inserted image


All Dynamixels must plug into port D5 in order to properly work. This means that all of your Dynamixels must plug into one port. If you have more than one strand of connectable Dynamixels, you will have to use a Dynamixel splitter hub, like this one here:

User-inserted image

You can either run a cable to the EZ-B via a power base or via the powered splitter. I advise that you use only one, as using both at once can brown out the EZ-B.

Q: So, now that that's done, what power supply do I use? Mains or a battery pack?

User-inserted image

A: Both will work just fine. Just make sure you have an adequate power supply at around 10v.

"But wait!" you scream. "Dynamixels can run at 9v-12v! Why 10v?"

Because voltage is gradually lost over time depending on how many servos you're running at once, as well as when the EZ-B is powered on. The more servos you have, the higher you should up your voltage to get a steady 10v overall.

So, if you have power running to the EZ-B, Dynamixels set up to port D5 (as well as the optional splitter) you should have something resembling this:

User-inserted image

Now that you're powered on, lets move into EZ Builder and get your Dynamixels running.


Connect to your EZ-B as usual (We won't be covering connections in this guide). Bring up a servo control panel and go to the servo configuration screen as shown below.

User-inserted image

Click the Dynamixel box and scroll down until you see the ID of the Dynamixel you want to move (the ID on the back of the servo). In this demonstration, we'll be selecting Dynamixel AX18.

User-inserted image

Select it and save the configuration. Congrats, you just set up your first Dynamixel in EZ Builder! It should operate just like a normal servo. This applies to all servo control functions.


When you buy a Dynamixel that doesn't come in the kit, the ID sticker will sometimes be blank, which means it hasn't be assigned a "real" ID. However, a tool in EZ Builder can give Dynamixels a new ID.

First, open up the Dynamixel Config. control in EZ Builder. You should see something similar to this:

User-inserted image

All blank servos are assigned ID 1. If you have a dynamixel with the ID 1 already, remove it before you proceed. Simply choose the new ID you want (in this case, AX18) and press execute. ARC will assign it a new ID. That's it, you're done! You can also write the ID on the blank tag if so desired.



Upgrade to ARC Pro

Harnessing the power of ARC Pro, your robot can be more than just a simple automated machine.

i have robotis installed on my pc.then you have all info you need.
the above pic is port 3 on the left and port 4 on the right.
left side is port 1 and 2 and on the right side is port 5 and 6
there are little marks on each port.

I have read the Zig-110 6 word packets that result when 'boomerang' buttons are pushed with the EZ-B4. I used UART 0 for that. I intent to send EZ-B4 generated 6 word packets from the EZ-B to the Bioloid (CM-530) computer from UART 1.

My idea is to let the 6 word command packets to the CM-530 come from the button controller or EZ-B scripts.

Unfortunately, I damaged my CM-530 during experimentation and will have to wait till mid week to be able to work more on the project. I will keep you informed of progress.

The reason Zira is repeating the same line is because I wrote a line in the script to check if the number of servos found initially matches the servos that are having there positions captured. Try finding the servos again and make sure all your connections to your servos are secure.

I have added an updated motion capture script that allows you more time to pose your servos. Just keep repeating " start recording " when your ready to capture your next pose. Just read the notes in the script window for the commands. It will repeat you captured motion over and over until you say " stop " which will pause the motion. Just say " play " to continue , anyway just read the notes and check the Speech Recognition module to figure out how the scripts work together.

United Kingdom
So is there a way to script Dynamixel servos equivalent to what I posted in post #133?

Anyone? *confused*
@ Steve G

You have to specify the AX port to use.

" Servo(AX0,50) " the AX0 port corresponds to the D0 port on the EZ_B.
The only difference is that the position of the Dynamixel servos using ARC is from 0 to 100 not the 0 to 1023 that would by used by the Bioloid script
or my EZ-Script control.
Also check the previous posts because once you start using ARC to control you servos, it will change their settings. To bring them back just download the script example in #139 and click start on the " Change Delay/Read Only" module.

If you want to control your servos more easily using EZ-B add a second line to D6 and your dynamixel servo.
United Kingdom

Thanks for getting back to me. Maybe I'm not understanding this right, but I thought that Dynamixels only run on port D5, and AX0 corresponds to the servo addresses? This is where I'm having trouble converting a standard servo script like in post#133 to a Dynamixel servo script.

I've never tried Dynamixel servos before so this is all new to me. I have had a look at your Example Project but I'm still non the wiser. I would be greatful if you could translate or convert the script for standard servos in post #133 to Dynamixel for me as an example so I can compare the two? From there, I can probably work out the rest.

Your correct, you use the EZ-B port D5 to connect to the AX-12s but now you need to use the AX-12's ID to send them commands. AX0 is for servo id 0 and AX19 is for servo ID# 19 etc.

Servo(AX19,20) # send instruction to the AX-12 servo ID#19
ServoSpeed(AX19,100) # if you use 1 it will not move
United Kingdom

Many thanks buddy, that's a great help. At least from this I can compare the two and build on it from there.

Much appreciated.
No worries , EZ-Script is very powerful tool for all us hackers.
You can do some amazing things thanks to DJ.
@mtiberia I thought you could send from 1-180 not just 1-100 for servo position.
My AX-12 servos move from 1-180. (Using a EZ-B V4)
Hi @mtiberia,

Thanks for you great help. I have tried your latest script, but still it says "oops i need to read the position again" again and again.

Also there is no full torque given to my Dynamixel servos as it is should be after, says "Don't worry I won't hurt them".

I'm so sorry, I really don't know what is the issues could be. FYI, I still am using 4 Dynamixel servos and my power source is 11.1V 2200mAh Li-Po Battery (1.5C).

I hope my Dynamixel servos is not broken. I don't really think it is broken, because when I try it on Dynamixel Configuration Tool, the servos works very smoothly.

Thanks again.
Sorry that was a typo it is 180.
Ariffinastute try one Dynamixel servo at a time to track down the issue.
Make sure they are set to communicate at 1000000 .
Hi @mtiberia

I'm sorry, I have tried to test one Dynamixel at a time, but still the result is same.

I have make sure that the communication, is as stated UARTInit(0,1,1000000).

Lets see if we can track this bug down. So when you ask Zira to find your servos
all your servos are found and the settings are changed ?

If yes, then try this to test that you have a file to put the read positions in.

The easiest way is to check that it's in the folder. If its not, open a new window in ARC and write an EZ-Script to create a file and check that its there.

First, I thank you for helping me on this situation. Yes, Zira did found 4 of my servo.

Despite Zira told that, she has found 4 of my servo and going to adjust their settings, but nothing happened to all of my servos, as it should be getting the reset torque, like on the script.

I stuck it here, I think the settings are not changed.
Do have the file in your folder?

Yes, I do have the .txt file in my folder.

I have already changed the "path" from the original script of yours, to my own path of .txt file, which the example path ( "c:\Users\Mario\Desktop\Robot_Motion.txt" ) in the script are as stated in these three windows, Reading servo Position, Delete Motion File and Play.
@mtiberia, or anyone who has sent 6 word packet data to a Robotis CM-530 controller from an EZ-B4.

I have read the Zig-110 6 word packets that result when 'boomerang' buttons are pushed with the EZ-B4. I used UART 0 for that.

I have tried to send EZ-B4 generated 6 word packets from the EZ-B UART 2 to the Bioloid (CM-530) controller. The idea is to send the 6 word command packets to the CM-530 that come from the button controller through UART 0 or from EZ-B scripts through UART 2.

The packet contents captured by UART 0 (from the hand controller) and those sent by UART 2 from EZ-B4 have been verified by both 'scope and RealTerm capture.
I cannot get the CM530 to respond to the EZ-B4.

My scripts are on EZ Cloud as: LESTER Start.

Any suggestions?

Thank you.
Thanks again for your attention and excellent suggestion.
I will use the RoboPlus Manager to look at the Remote ID that the EZ-B exhibits.