Thumbnail

Dynamixel

by Robotis

Connect and control Robotis Dynamixel Smart Servos to ARC. This open-source plugin converts the Virtual Servo ports on ARC (v0-v99) to control Robotis Dynamixel Servos.

How to add the Dynamixel robot skill

  1. Load the most recent release of ARC (Get ARC).
  2. Press the Project tab from the top menu bar in ARC.
  3. Press Add Robot Skill from the button ribbon bar in ARC.
  4. Choose the Servo category tab.
  5. Press the Dynamixel icon to add the robot skill to your project.

Don't have a robot yet?

Follow the Getting Started Guide to build a robot and use the Dynamixel robot skill.

How to use the Dynamixel robot skill

Connect and control Robotis Dynamixel Smart 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 specifically for 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.

ARC Capabilities

ARC has many parameters that can be assigned to servo movements. When selecting a servo, these parameters are specified by script commands or in the Advanced menu of robot skills. This skill supports the following ARC parameters...

  • Servo position
  • Speed
  • Release
  • Velocity
  • Acceleration

User-inserted image

User-inserted image

Speed, Velocity, and Acceleration, etc.

When configuring the speed, velocity, and acceleration settings, the manual for the dynamixel servo model should be referenced. Different servos will use specific settings and ranges for these parameters. Check the servo manual for the required parameters, such as Speed. To view the manual for your dynamixel model, look here: https://emanual.robotis.com/docs/en/dxl/

Cable Accessory

This plugin requires a cable accessory to easily connect your servo to the EZ-B. The cable includes RX and TX if you want to READ servo positions. There are instructions below for connecting the servo to READ positioning. User-inserted image

EZB Controller Types

There are a few different EZB controllers that each have their 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 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 Using this diagram, you must wire the servo to these controllers manually. Connecting TX and RX ports to read servo data with bi-directional communication would be best. On the EZ-Robot EZ-B v4, it’s port D5 (TX) and D6 (RX) for UART #1.  User-inserted image

Robotis Open CM9.04 Controller The Robotis Open CM9.04 controller can 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, selecting UART #2 in the dynamixel robot skill config.

UART/Serial Port Overview

There are a few options for connecting the Dynamixel servos 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 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 the unusual behavior of Dynamixel servos, the first common issue is insufficient 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 mirror their behavior. 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 to see the available ControlCommand syntax for the Dynamixel plugin when editing a script.

Control Commands

This robot skill supports several control commands. The most useful are the WriteRam commands. These allow the user to send a command directly to the servo RAM. These control commands are not required to use this robot skill, as these are added for advanced users. To use the robot skill and move servos, follow the instructions on this manual page to assign Dynamixel servos IDs to ARC Vx servos.


controlCommand("Dynamixel", "SetLED", Port, true|false);
controlCommand("Dynamixel", "TorqueEnable", Port, true|false);
controlCommand("Dynamixel", "WriteRamByte", Port, Address, Value);
controlCommand("Dynamixel", "WriteRamInt32", Port, Address, Value);
controlCommand("Dynamixel", "WriteRamUInt16", Port, Address, Value);

  1. The Address and Value can be referenced using the servo Control Table. Please find the list of Dynamixel Servos HERE to access their control table specifications.

  2. Each WriteRam ControlCommand() specifies the size of the value. This is because control table addresses require a value size (byte, int32, uint16). Check the control table command manual for the variable size it accepts.

For example, this command will set the goal position of an AX-12 servo on port V1 (id 1) to 512.


controlCommand("Dynamixel", "WriteRamUInt16", v1, 30, 512);

The parameters you need for the control commands are identified in the image below when viewing the control table. Notice the SIZE parameter, which determines the WriteRamXXXX to use. If the size is 1, the WriteRamByte will be used. If the size is 2, the WriteRamUInt16 will be used. If the size is 4, the WriteRamIn32 will be used.

The address and value range are also displayed in the control tables. User-inserted image

Video Demo With Robotis Arm

This video uses a Robotis Dynamixel arm and XM430 servos with an OpenCM9.04 controller. 

Troubleshooting Dynamixel Servos

If the servos are not responding, verify the physical connection is correct. Next, confirm adequate power is provided to the servo. Verify that this robot skill config selected the servo ID and correct type.

If the XL430 or similar type servo is not responding, the torque may be disabled. This can be force-enabled by using the ControlCommand() or releasing the servo. When the servo is released, it will automatically allow torque once it is instructed to move.

The configuration window of this robot skill has some tools for diagnosing the connection. You can use these diagnostic tools to verify a bi-directional communication with the servo. For example, you can use the PING or READ servo POSITION to confirm that the servo communicates bi-directional with the EZB.

User-inserted image

Step by Step Instructions

Once the servo is wired and sufficient power is provided, you can use any robot skill in ARC that uses servos. It will work with Auto Position, Camera, WiiMote, Joystick, and more. This example will show you how to move a dynamixel servo with generic servo robot skills. Before following these steps, ensure you have this plugin installed.

Step 1 Load ARC

User-inserted image

Step 2

Connect to your I/O controller.

User-inserted image

Step 3

Add the robot skill by selecting the Project tab and Add Robot Skill.

User-inserted image

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.

User-inserted image

Step 5

The Dyamixel robot skill will be added to your project. Press the Config gear icon to load the configuration screen.

User-inserted image

Step 6

Enter the baud rate that matches your servo configuration. The servos have a baud rate specified or a default baud rate shipped from the factory. If you need to change the baud rate of the servo, use the Dyanmixel utility. You cannot change the baud rate 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 baud rate of the servo.

User-inserted image

Step 6a

Specify what port the servo is connected to on the controller. It is essential to follow this recommendation. The plugin has blue question boxes (and throughout the ARC software) to assist your robot development. Using the blue question marks and reading the content is recommended to understand what options do.

User-inserted image

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. Ensure you have entered the MAX resolution for that servo model to get the servo's full resolution. Each model has different resolutions or can be configured using the Dyanmixel utilities.

User-inserted image

Step 8

After you have enabled your servos, press Save

User-inserted image

Step 9

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

User-inserted image

Step 10

Press the GEAR icon to configure the horizontal servo robot skill.

User-inserted image

Step 11

To configure this robot skill to use a virtual servo, select the servo to bring up the port dialog. This applies to all robot skills in ARC that use servos.

User-inserted image

Step 12

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

User-inserted image

Step 13

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

User-inserted image

Related Tutorials

Related Hack Events

Related Robots

Related Questions


ARC Pro

Upgrade to ARC Pro

With Synthiam ARC Pro, you're not just programming a robot; you're shaping the future of automation, one innovative idea at a time.

PRO
USA
#1   — Edited

I  am revisiting this today. 2 brands of dynamixels new servos:

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

User-inserted image

User-inserted image

When I set up the environment I use 57,600 and protocol 2 and save.

User-inserted image

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:

User-inserted image

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?

PRO
Synthiam
#2  

yes - we tested with protocol 2 and it works great. The video demonstration is using protocol, as you can see by watching the video. After selecting and configuring the servos, you may have to SAVE the control configuration and go back in. I find sometimes saving the control config screen helps.

PRO
USA
#3  

Newp. As I stated above after configuring the environment I Saved. Went back out and go into utilities and choose protocol 2, and nothing responds with either dynamixel i test with.

PRO
USA
#4  

Also to add: Voltage is also set at 12 volts. The ezb is connected to dynamixel via D5, cable is oriented correctly, i.e +,-,gnd

PRO
Synthiam
#5  

The instructions for reading state the cable must be connected to both RX and TX. Please revisit the instructions above.

PRO
USA
#6   — Edited

I’m not trying to read state. Therefore I’m just using one way communication using the starndard 3 prong ttl cord.  I’m just trying to get these new dynamixels to work with 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.

PRO
USA
#7  

Why would the ping return v1 not supported for protocol 2 yet

PRO
Synthiam
#8  

Ping requires two way communication. You can’t ping without expect a response

PRO
USA
#9   — Edited

I just spliced into the signal line and added it to D4, when I press ping I get the same message.

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.

PRO
Synthiam
#10   — Edited

I'll include it on my next hack night since there's so many questions on how to do it: https://synthiam.com/HackEvent/DJ-s-Third-Hack-Night-17480

PRO
USA
#11  

Ok. I spent about 8 hours on this just trying to get these to work. Any help will be appreciated. I’ll throw together a quick video tomorrow..sometimes those can show something i could be doing wrong.

I’m also going to try and connect the servos to the controller from Robotis to just verify the servos are working correctly.

PRO
Synthiam
#12  

Again, we’ll revisit this on Friday at my next hack session. I’ll[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"] include it on my next hack night since there's so many questions on how to do it: [/font][/size][/color][color=#ce3991][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"]https://synthiam.com/HackEvent/DJ-s-Third-Hack-Night-17480[/font][/size][/color] session.

PRO
USA
#13   — Edited

Ok after hours of googleing and testing I can say..absolutely that these new servos with the label XL and XM  (Not MX series..easy to dyslexia it) are not functioning with the Robotis CM 700 board. After much research they are developed for ROS and their new board the Open CR (i know they are just serial and should work but they dont?!)

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.User-inserted image

EDIT: I Purchased a OpenCM9.04 with expansion card to try to flash the servos to protocol 1. Will post here the results.

PRO
Synthiam
#14  

The XM series servo is supported in this plugin. However, you require ARC v2019.01.26.00 or newer

PRO
USA
#15  

Thanks again for this. Quick question.

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.

User-inserted image

PRO
Synthiam
#16  

Use the drop down to select the servo on the particular Id. The protocol doesn’t matter because there’s no drop down anymore. Use the DEFAULT values of the servos. Meaning, if your servo supports both protocols, ensure the default protocol is configured in the servo.

PRO
USA
#17  

Ok cool. I’ll test the robots this afternoon. Thanks again for figuring out the XL line with the torque!

#18  

:)Wow so this is good to know that if something does not seem to work, always check for ARC update in the software and Bingo all good again!

PRO
USA
#19   — Edited

I have an issue:

[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]

PRO
Synthiam
#20   — Edited

Why would you ever want to set lower max positions? That’s the number of positions for the servo. If you want to limit the servo positions then use the correct way of specifying limits with the appropriate ezscript commands for the servo.

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

PRO
USA
#21  

I’m about to throw the towel in on Robotis. It’s redicoulous to have a different specifications on every servo they make. It worked great the way every servo they made shared same commands.

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.

PRO
Synthiam
#23  

Also, i don't see where you mentioned that you updated ARC as required for the dynamixel plugin to work. Did you update ARC?

PRO
USA
#24   — Edited

Yeah newest version of ARC I updated this morning before i added the updated plugins.

Here is the code for the XM430-W350-T....no movement. Led blinks and no errors on the code and no movement.

ControlCommand("Dynamixel", SetLED, v1, true)
Sleep(1000 ) 
ControlCommand("Dynamixel", SetLED, v1,false)
Sleep(1000 )
ControlCommand("Dynamixel", SetLED, v1, true)
Sleep(1000 ) 
ControlCommand("Dynamixel", SetLED, v1,false)
Sleep(1000 )
ControlCommand("Dynamixel", TorqueEnable ,v1, true)
servo(v1,180)
Sleep(150 ) 
Servo(v1,0) 
PRO
Synthiam
#25   — Edited

position 0 isn't a position, although it'll default to 1. servo positions are defined in the manual between 1-180 or 1-XXX (if you set the max positions). Either way, the lowest position is 1 not 0 (zero)

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.

PRO
USA
#26  

No problem. Thanks for your time.

PRO
USA
#27  

Is there a way to remove and downgrade the Dynamixel plug in to prior version?

PRO
Synthiam
#28   — Edited

My time was wasted if you dont' get it working:) so don't give up! lol

PRO
USA
#29   — Edited

Its not you, its Robotis. If they change protocol for every servo then it will be impossible to keep up on every flavor they make.

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)

PRO
Synthiam
#30   — Edited

The dynamixel plugin has no support for the XM series servos. The servos supported are specified in this plugin description in the first paragraph. I'll copy and paste:

Quote:

[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"]The [url=https://synthiam.com/Software/Manual/Introduction-to-servo-motors-17393][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"]servo[/font][/color][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"][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"]s supported are XL-320, AX-12, and XL430 models. [/font][/font][/color] [/font][/color][/font]
[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]

PRO
USA
#31  

So you removed all support for the servos introduced in the first plug in?

PRO
Synthiam
#32   — Edited

i explicitly specified support of models in the plugin and on this description page that i verify and know work. Those servo models which are specified in the plugin are [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-320, AX-12, and XL430. Any servos outside of those 3 are not supported. If another servo model works for you, great. The only 3 that i will discuss and acknowledge supporting are [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-320, AX-12, and XL430. [/font][/font]

PRO
USA
#33   — Edited

The AX-12 servo controls are the same commands as the older servos.

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.

PRO
Synthiam
#34  

Thanks - there's no need for apologies. Eventually i have to draw a line on how far down the rabbit hole i go supporting a product that makes it impossible to support. In this case, i praise dynamixel servos for their robustness and quality but it's a full-time job maintaining the communication protocol differences between models. The only reason for not having a standard protocol across all models is poor planning. However, that's common with hardware companies because hardware people do not understand software and vice versa. Pick one thing to be good at and focus on that only.

PRO
USA
#35  

Totally agree. Hopefully they don't change their products any further. Don't fix it if it ain't broke. I'll try and dump these $229 servos on ebay and stick with the $50 ones for now. Thanks again.

PRO
Canada
#36  

Hello from the ROBOTIS Customer Support team!

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! :)

PRO
Synthiam
#37   — Edited

Robotis - great to see you! The challenge we had experienced is not due to understanding the protocol difference, but the difference in the protocols between product models. However, we redesigned the robotis dynamixel plugin and it's working great now... continue reading

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

#38   — Edited

Hi DJ,

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.."

PRO
Synthiam
#39  

Hey there!

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.

PRO
USA
#40  

out of the box the AX12 Baudrate is set to 1000000 bps.

#41   — Edited

Well now.  The baud rate options for the AX12s (using Dynamixel Wizard) don't exactly match the options for the Tiny...however, using 115200 for the Tiny and 111111 for the Dynamixel did work.  Woohoo!   (Although now I wish I had gotten the EZB.). Now, one more question...I have been assuming that I can still daisy chain my dynamixels with the IoTiny...is that a correct assumption?  It looked like it worked with the OpenCM demo.

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.  :-)   )

PRO
Synthiam
#42  

Yeah - you can daisy chain them. They each need their own ID.

#43  

Great!  Thanks so much!

#44  

Hi DJ,

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

PRO
Synthiam
#45   — Edited

Updated the control and documentation for the Open CM9.04 expansion board. The expansion board uses UART #2 in ARC. While the Open CM9.04 connectors use UART #0 in ARC.

Also, ensure the latest firmware on the Open CM9.04 is installed

#46  

DC,

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

PRO
Synthiam
#47  

Updated for latest OpenCR firmware support (available here: https://synthiam.com/Support/Hardware/Robotis-OpenCR)

PRO
Synthiam
#48  

Added support for Wheeled Mode (act like a wheel) or Position mode (act like a servo) for XH430 servos.

User-inserted image

PRO
Synthiam
#49  

Updated with a debug checkbox option that can be used for testing. It is not recommended to use the option other than testing because it will slow the computer down a lot.

PRO
Synthiam
#50  

Added controlcommands to allow writing directly to the dynamixel RAM by specifying the control table address. Check the manual above on how to access the control tables for each robotis servo.

User-inserted image

PRO
USA
#51  

I just did a test and wasn't able to get my XM servo to change profile velocity using the Skill. The Cheat Sheet shows a lot of extra parenthesis and slash marks...  I removed them and tried it.  I may have gotten that wrong but I used my Dynamixel line sniffer and it didnt send.

This is what my script sent... I know it needs 4 bytes of data so that makes it Int32 Cheat Sheet shows:  controlCommand("Dynamixel", ""WriteRamInt32", Port, Address, Value");

my javascript reads:

controlCommand("Dynamixel", "SetLED", V2, true);
controlCommand("Dynamixel", "WriteRamInt32", V2, 112, 10);

The first line turns on the LED and is there just to be sure things are talking to each other.

On the sniffer end all I get is the led command as having been sent.

BTW here is the correct command that should appear. User-inserted image

It is probably just a syntax error on my part from misinterpreting the Cheat Sheet instruction, but if properly executed it should make my servo run extremely slow.  I do get this error when running the above script: User-inserted image I am testing on two XM540-W150-R servos.   Profile velocity is #112 on the control table

BTW profile acceleration and profile Velocity are the two settings that make dynamixels amazing!  I'm super excited that you are working to give us access to them in ARC!!!!

PRO
USA
#52   — Edited

I agree with David on this. Acceleration and velocity!

PRO
Synthiam
#53  

Interesting - I’ll take a look. Stay tuned

PRO
Synthiam
#54   — Edited

Try the latest version (v43)

The Cheat Sheet will still be incorrect with the slashes (Escape) because there is a bug in ARC that is doing it. That explains the multiple " in the cheatsheet.  I submitted a fix and it'll be released in a few days I suspect. The bug seems to be with multiple ControlCommand() parameters.

However, there is a workaround for the time being. Simply right-click in the editor and use the menu-driven ControlCommand() interface. The right-click when editing a script is the most common method of using the cheat sheet.

PRO
USA
#55  

That worked beautifully! I wrote this short dynamixel test with a well documented script to help people understand how acceleration and velocity work in the simplest terms.  Ill link it below

Change Dynamixel Acc and Vel.EZB

This is the simple script within it :

// Simple Script to change the acceleration and velocity on two XM540-W150-R
// This script works on most x series 500 and 400 Dynamixels.. Check control
// table at Robotis wesite to make sure your servos use these same control codes
// Note acceleration value should be half or less of the velocity value.
// Max values allowed vary from servo to servo (see control table for more info)
// A lower acceleration value gives a more sluggish but more dampened motion
// values of 0 = max value so setting both acceleration and velocity 
// to 0 gives you full speed with no dampening
// Acceleration and velocity values should just be set as needed and not constantly within a loop

//change velocity on servo 1 to 75 (profile velocity control code is 112)
controlCommand("Dynamixel", "WriteRamInt32", V1, 112, 75);
//change acceleration on servo 1 to 10 (profile velocity control code is 108)
controlCommand("Dynamixel", "WriteRamInt32", V1, 108, 10);

controlCommand("Dynamixel", "WriteRamInt32", V2, 112, 75);
controlCommand("Dynamixel", "WriteRamInt32", V2, 108, 10);
PRO
USA
#56  

Here is a quick test showing one servo at full speed and acceleration and the second set at slow speed with very low acceleration...  Congrats on this awesome skill! It opens up to a ton of possibilities! Wonder if it can do time based movements yet?  if not maybe look into it... telling a servo where to go and what time to get there and having it do all of the math itself is pretty cool too!

PRO
USA
#57  

Sweet! Thanks DJ!

PRO
Synthiam
#58   — Edited

Updated to support native Velocity and Acceleration for ARC 2021.06.11.00 or newer. See this release note: https://synthiam.com/Products/ARC/Releases/ARC-2021-06-11-00-Early-Access-Runtime-20634

PRO
USA
#59  

Some new awesomeness! Thanks!

PRO
USA
#60  

I'm having some strange behavior on Alan and Alena's dynamixels. The robots have not been on for several months and I needed to activate them for an interview. I updated to the latest build and updated the skill.

The servos power up and move for a moment, but  they reach an odd start position and then they do not respond to input from touchpad or the sliders. It happens on both robots and the rest position is the same for both. I'll dive deeper into the issue tomorrow and make a video if I can't troubleshoot the issue.

PRO
Synthiam
#61  

You can turn on servo debugging to see what’s going on temporarily

also remember the global servo position limit is in a new place. It’s not global for arc. So if you had it set before, it will need to be set again

PRO
USA
#62  

...ahhhh that's right, I forgot about the global setting...I bet that's it...I'll take a look! Thanks for the reminder!

PRO
USA
#63  

I am having an issue that started with the latest revision.  I had the dynamixels working, but when the acceleration and velocity settings were added it stopped responding.  I am not sure if it is because of this but it did start exactly on that day.  I am getting connection on ARC and I can see the green communication light flicker when I move a horizontal control,  but the servos remain torqued off. I'm not sure what the global servo position is so maybe the solution is in your previous response.  I just couldn't find anything called global servo limits anywhere. Could it be a baud rate issue? my servos are set to 1000000 baud* That is the speed that the OpenCM talks to the servo on and not the speed that the ARC software talks to openCM... that is set to 921600 on COMUSB connection settings page... not sure if I need DTR RTS enabled for this.... but like I said, it worked prior to the last change so Im guessing my settings should work.  The Dynamixels do get power and the leds turn on and off with the script below so I know they are talking back and forth


// This script works on most x series 500 and 400 Dynamixels.. Check control
// table at Robotis wesite to make sure your servos use these same control codes
// Note acceleration value should be half or less of the velocity value.
// Max values allowed vary from servo to servo (see control table for more info)
// A lower acceleration value gives a more sluggish but more dampened motion
// values of 0 = max value so setting both acceleration and velocity 
// to 0 gives you full speed with no dampening
// Acceleration and velocity values should just be set as needed and not constantly within a loop

//change velocity on servo 1 to 75 (profile velocity control code is 112)
controlCommand("Dynamixel", "WriteRamInt32", V1, 112, 75);
//change acceleration on servo 1 to 10 (profile velocity control code is 108)
controlCommand("Dynamixel", "WriteRamInt32", V1, 108, 10);

controlCommand("Dynamixel", "WriteRamInt32", V2, 112, 75);
controlCommand("Dynamixel", "WriteRamInt32", V2, 108, 10);

controlCommand("Dynamixel", "SetLED", V1, false);
controlCommand("Dynamixel", "TorqueEnable", V1, true);

controlCommand("Dynamixel", "SetLED", V2, true);
controlCommand("Dynamixel", "TorqueEnable", V2, true);
PRO
Synthiam
#64  

The ezb baudrate and servo baudrate can be different. It’s okay because they’re different ports on different connections.

dtr and rts only need to be enabled if the ezb won’t connect at all. If the ezb is connecting, then it’s golden.

I’ll take a peek to see if the previous changes would affect anything. Stay tuned

PRO
USA
#65  

This might help you guys... I did some line sniffing and found that the Torque Enable command in the Cheat Sheet doesn't actually send anything down to the Dynamixel that is readable by the Dynamixel wizard. My workaround was to use this line of code instead.

controlCommand("Dynamixel", "WriteRamByte", V1, 64, 1);

register 64 torques on the servo when it gets a 1 value and torques it off when it gets a 0. This got my servo torqued ON and working, but I am pretty sure that before the servos torqued on from the start and didn't require this step.

Either way I'm back in business while you have time to look up the bug.

PRO
Synthiam
#66  

Ya they used to torque from startup. Strange they’re not. Thanks for debugging that because it’ll help.

PRO
Synthiam
#67  

A bug was introduced from an optimization in the ezb servo library which caused the torque to not enable when the servo was released. This has been resolved and will be included in tonight's release

#68  

Hello,

I am trying to connect my Dynamixel servo directly to my EZ-B4 and the skill is not able to connect to the servo. I have the servo signal connected to EZ-B4 pins D5 and D6, I have the servo power connected to EZ-B4 D5's power pin, and the ground connected to EZ-B4 D5's ground pin. I am supplying 11 volts. I connected to the EZB4 and verified it was connected. I checked the power and the ground at the connector. I added the Dynamixel skill and set the UART Port to #1 option. The baud rate is 1000000 on the settings page and 57600 on the Utilities page. I enabled V1. I tried scanning for sensors and nothing. I tried pinging the sensor and nothing. I tried increasing the board to 1000000 on the Utilities, but it seems that was not allowed by the skill. I have been working at this for over 4 hours and still nothing. I went through the tutorial line by line. I read the community support until my eyes got blurry. I updated my Synthiam software to version 2022.01.17.00. Any suggestions?:( (frustration)

User-inserted image

#69  

Sorry. I found my problem 30 seconds after I posted.:D I'm good for now. :):):)

PRO
Synthiam
#70  

Haha what was the issue?

#71  

I had the ground and the signal wires switched. That’s the problem with doing robotics at 3 AM!

PRO
Synthiam
#72  

Ooooh i hear you on that one! I was doing the same last night - fighting with code until i realized i should just sleep

#73  

LOL!xD Are roboticists allowed to sleep?

Ps. Who would I talk to about the possibility of licensing ARC software so that I can sell my code commercially?

PRO
Synthiam
#74  

Select "sales and billing" i think here: https://synthiam.com/About/Contact

#75  

I have gotten the movement of my 5 robot arm servos working well. Now I am attempting to read the position of each servo using

Print(GetServoRealtime(V1))

before I move them so that I don't strip a gear when they are too far in the wrong place. The problem I see is that when I first connect to the EZ-B4 and the servos, the positions read as "0" until I move each servo. That doesn't help me. I want to read the servo position BEFORE I initialize each servo. Is this possible?  --Thanks!

PRO
Synthiam
#76   — Edited

And you have the TX and RX wires connected to the EZB? Here's the image from the manual above

User-inserted image

You can also see if you have it connected by using the diagnostics in the robot skill's config screen... User-inserted image

#77  

Yes, I have the two wires connected properly and when I click the "read position" button  in Utilities it reads the "raw position" in in real time. When I try to get it from (Python) code, I just get "0". If I move the servo even a little, only then can I read the position.

You can see that in the console V1 and V2 have a number. That is because I FIRST incremented them. V3, V4, and V5 show 0. I haven not yet moved them and they are NOT at 0. If only I could get the "raw position"!

User-inserted image

User-inserted image

PRO
Synthiam
#78   — Edited

Try updating to the latest robot skill version. I made a change that should fix it. There's also a performance improvement as well

User-inserted image

#79  

Hello DJ. Thanks!

I found that it works for "GetPositionRealtime" but not for "GetPosition". Is that the way it is supposed to work?

Also, do I get a $100 credit added to my Synthiam credit balance for finding this issue? :)

PRO
Synthiam
#80  

I get $100 credit for doing the work to fix it :D

You can read the difference between the two commands. But real-time is for bi-direction communication.

Since you're using python, here's the manual in the support section for python commands: https://synthiam.com/Support/python-api/python-overview

You'll find the documentation for those commands on that link

Unknown Country
#81  

Does ARC work work if using the U2D2 (https://www.robotis.us/u2d2/)? Windows PC running ARC connected through USB to U2D2 that connects to Dynamixel X series servos.

PRO
USA
#82   — Edited

..sigh..I'm back here again. I'm having issues with alan and alena dynamixels. I've not turned them on for prolly 1 year or more. I can say that i am connected to the heads and they move for 1/10 of a second then stop (eyes work fine which are standard servos). So at least I know that the connection is working . Since the last time i fired them up, I can tell there have been several revisions to the plug in and something has changed that is causing this problem.

I am still on uart #1 for EZB on D5. The baud rates haven't changed. Its set for Ax-12 protocol for the DYNAMIXEL MX-64T. I cant see what else might have changed. Could it be the addition of the acceleration or some other addition?

I am on current version of ARC and updated all the plug ins.

Thanks in advance for any help trouble shooting.

https://www.robotis.us/dynamixel-mx-64t/

Editsee below

PRO
USA
#83   — Edited

After messing around with it after dinner I had success. I went into the servo settings for the dynamixels (in my case the servo pad settings) and click on all three velocity/acceleration and speed settings (-1). I just clicked on them and they changed from red to black then saved. This for some reason got the servos moving again. Not sure why that would happen?! But was not the dynamixel servo plug in but rather how ARC sets up the virtual servo controls with the dynamixels. I'll have to check and see if after I save the project and reload will the dynamixels work or will i need to do this pattern to fix it each time.

User-inserted image ****Edit: Saving the the project after doing above fixes the issue..i might have to do this for all my project files?!