New Dynamixel Servos (XM430 Series): Updated Mechanical Design and a Constant Torque Mode

Robotis Dynamixel XM Series of Servos

It's no secret that I'm a huge fan of Robotis' Dynamixel servos.  I've written about them in the past (here and here), developed open source Python libraries to control them, and used them extensively in my past research.  The new XM Series of Dynamixel servos are a pretty big change for Robotis... the new mechanical design has a lot of benefits: better mounting options (direct-to-case rather than the weird nut insert), more visually appealing, and the ability to route the cable directly through the backside load bearing. But they also offer a lot of improved performance -- comparing the old MX-28AR to the new XM430-W350, we get 65% higher torque for 5% lower price (I'm told the MSRP will be ~$240). Plus a whole bunch of new operating modes, including a few that directly control current (and torque by proxy): Torque Control Mode (perfect for robot grippers!), Current-and-Position Control, and even raw PWM.  Read on for details, including a new open-source Python library to control the XM Series using Robotis' v2 Communication protocol.

If you want exact technical specifications, hop over to Robotis' XM430 Series e-Manual. (Quick aside: I love the transition away from PDFs!).  The most pronounced thing is the new design that ditches those funky inset nuts in favor of mounting holes directly on the servo body.  Also of note: The new backside load bearing supports through-hole cable routing (yay for cleaning up the wiring!).  The front of the servos remains relatively unchanged in terms of the servo horn itself.

New Robotis Dynamixel XM Series

New Robotis Dynamixel XM Series

New Robotis Dynamixel XM Series New Robotis Dynamixel XM Series New Robotis Dynamixel XM Series

New Robotis Dynamixel XM Series


I've heard that these new servos will retail for $240 (so about the same price as a comparable MX-Series servo)... but they have much better torque and standby-current ratings.


From a controls perspective, the most compelling news for these new servos is new Torque Control Mode.  There's a RobotisChannel Youtube video that shows off the new capability:


Robotis lent me a few developer test units to play around with and gave me permission to write about them. I wish I had time to play around extensively with the new servos... but alas, my new robotics startup is keeping me insanely busy.  [I know what you're thinking: "You have a new robotics startup?! Wat?"  Yep. But we're still a bit stealthy at the moment, so stay tuned; we'll announce it eventually.]

But I did take a bit of time to devise a new control library (similar to the old library), which supports the new XM servos and the Robotis v2.0 communication protocol. You can find the new source here:  Please note that it's not fully backwards compatible with the old library -- in fact, it's missing quite a lot.  Some day, maybe I'll go back and make a unified Python library for all Robotis servos.... but in the meantime, here's a very simple usage example (fully tested!):

dyn = USB2Dynamixel_Device( '/dev/ttyUSB0' )
p = Robotis_Servo2( dyn, 1, series = "XM" )
p.set_torque( 100 )  # 2.69mA/unit * 100 => 269mA current => 0.3 Nm according to torque curve


I can't stop 0.3 Nm on the servo horn directly with my hand... but if you back it down to 20 instead of 100 (off the torque-current curves), then I was able to stall the rotation while the motor provided constant opposing torque. Pretty cool -- this should prove really handy for building things like robot grippers!