Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | rolling |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
|
dynamixel_hardware repositorydynamixel_hardware open_manipulator_x_description pantilt_bot_description |
ROS Distro
|
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | foxy |
| Last Updated | 2022-12-12 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.0.0 |
| open_manipulator_x_description | 0.0.0 |
| pantilt_bot_description | 0.0.0 |
README
dynamixel_control
The ros2_control implementation for any kind of ROBOTIS Dynamixel robots.
-
dynamixel_hardware: theSystemInterfaceimplementation for the multiple ROBOTIS Dynamixel servos. -
open_manipulator_x_description: the reference implementation of theros2_controlrobot using ROBOTIS OpenManipulator-X.
The dynamixel_hardware package is hopefully compatible any configuration of ROBOTIS Dynamixel servos thanks to the ros2_control’s flexible architecture.
Set up
First install ROS 2 Foxy on Ubuntu 20.04. Then follow the instruction below.
$ source /opt/ros/foxy/setup.bash
$ mkdir -p ~/ros/foxy && cd ~/ros/foxy
$ git clone https://github.com/youtalk/dynamixel_control.git src
$ vcs import src < src/dynamixel_control.repos
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Demo with real ROBOTIS OpenManipulator-X
Configure Dynamixel motor parameters
Update the usb_port, baud_rate, and joint_ids parameters on open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro to correctly communicate with Dynamixel motors.
The use_dummy parameter is required if you don’t have a real OpenManipulator-X.
Note that joint_ids parameters must be splited by ,.
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="usb_port">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
- Terminal 1
Launch the ros2_control manager for the OpenManipulator-X.
$ ros2 launch open_manipulator_x_description open_manipulator_x.launch.py
- Terminal 2
Start the joint_trajectory_controller and send a /joint_trajectory_controller/follow_joint_trajectory goal to move the OpenManipulator-X.
$ ros2 control switch_controllers --start joint_state_broadcaster --start joint_trajectory_controller --stop velocity_controller
$ ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory -f "{
trajectory: {
joint_names: [joint1, joint2, joint3, joint4, gripper],
points: [
{ positions: [0.1, 0.1, 0.1, 0.1, 0], time_from_start: { sec: 2 } },
{ positions: [-0.1, -0.1, -0.1, -0.1, 0], time_from_start: { sec: 4 } },
{ positions: [0, 0, 0, 0, 0], time_from_start: { sec: 6 } }
]
}
}"
If you would like to use the velocity control instead, switch to the velocity_controller and publish a /velocity_controller/commands message to move the OpenManipulator-X.
$ ros2 control switch_controllers --start joint_state_broadcaster --stop joint_trajectory_controller --start velocity_controller
$ ros2 topic pub /velocity_controller/commands std_msgs/msg/Float64MultiArray "data: [0.1, 0.1, 0.1, 0.1, 0]"
Demo with dummy ROBOTIS OpenManipulator-X
The use_dummy parameter is required if you use the dummy OpenManipulator-X.
diff --git a/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro b/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro
index c6cdb74..111846d 100644
--- a/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro
+++ b/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro
@@ -9,7 +9,7 @@
<param name="usb_port">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
- <!-- <param name="use_dummy">true</param> -->
+ <param name="use_dummy">true</param>
</hardware>
<joint name="joint1">
<param name="id">11</param>
Then follow the same instruction of the real robot one.
Note that the dummy implementation has no interpolation so far. If you sent a joint message, the robot would move directly to the joints without interpolation.
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | iron |
| Last Updated | 2024-04-24 |
| Dev Status | END-OF-LIFE |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.4.0 |
README
dynamixel_hardware
The ros2_control implementation for any kind of ROBOTIS Dynamixel robots.
The dynamixel_hardware package is the SystemInterface implementation for the multiple ROBOTIS Dynamixel servos.
It is hopefully compatible any configuration of ROBOTIS Dynamixel servos thanks to the ros2_control’s flexible architecture.
Set up
First install ROS 2 Rolling on Ubuntu 22.04. Then follow the instruction below.
$ source /opt/ros/rolling/setup.bash
$ mkdir -p ~/ros/rolling && cd ~/ros/rolling/src
$ git clone https://github.com/youtalk/dynamixel_hardware.git
$ git clone https://github.com/youtalk/dynamixel_hardware_examples.git
$ cd -
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Demo with real ROBOTIS OpenManipulator-X
Configure Dynamixel motor parameters
Update the usb_port, baud_rate, and joint_ids parameters on open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro to correctly communicate with Dynamixel motors.
The use_dummy parameter is required if you don’t have a real OpenManipulator-X.
Note that joint_ids parameters must be splited by ,.
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="usb_port">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
- Terminal 1
Launch the ros2_control manager for the OpenManipulator-X.
$ ros2 launch open_manipulator_x_description open_manipulator_x.launch.py
- Terminal 2
Start the joint_trajectory_controller and send a /joint_trajectory_controller/follow_joint_trajectory goal to move the OpenManipulator-X.
$ ros2 control switch_controllers --activate joint_state_broadcaster --activate joint_trajectory_controller --deactivate velocity_controller
$ ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory -f "{
trajectory: {
joint_names: [joint1, joint2, joint3, joint4, gripper],
points: [
{ positions: [0.1, 0.1, 0.1, 0.1, 0], time_from_start: { sec: 2 } },
{ positions: [-0.1, -0.1, -0.1, -0.1, 0], time_from_start: { sec: 4 } },
{ positions: [0, 0, 0, 0, 0], time_from_start: { sec: 6 } }
]
}
}"
If you would like to use the velocity control instead, switch to the velocity_controller and publish a /velocity_controller/commands message to move the OpenManipulator-X.
$ ros2 control switch_controllers --activate joint_state_broadcaster --deactivate joint_trajectory_controller --activate velocity_controller
$ ros2 topic pub /velocity_controller/commands std_msgs/msg/Float64MultiArray "data: [0.1, 0.1, 0.1, 0.1, 0]"
Demo with dummy ROBOTIS OpenManipulator-X
The use_dummy parameter is required if you use the dummy OpenManipulator-X.
diff --git a/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro b/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro
index c6cdb74..111846d 100644
--- a/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro
+++ b/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro
@@ -9,7 +9,7 @@
<param name="usb_port">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
- <!-- <param name="use_dummy">true</param> -->
+ <param name="use_dummy">true</param>
</hardware>
<joint name="joint1">
<param name="id">11</param>
Then follow the same instruction of the real robot one.
Note that the dummy implementation has no interpolation so far. If you sent a joint message, the robot would move directly to the joints without interpolation.
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Checkout URI | https://github.com/dynamixel-community/dynamixel_hardware.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-07-26 |
| Dev Status | END-OF-LIFE |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| dynamixel_hardware | 0.6.1 |
README
dynamixel_hardware
⚠️ This package is deprecated
Use ROBOTIS’s officially maintained
dynamixel_hardware_interfaceinstead. It fills the same role, is released for humble, jazzy, kilted, lyrical, and rolling, and has capabilities this package never had.Read the migration guide. It maps every parameter and interface, and is honest about the four things you lose — runtime control-mode switching,
use_dummy, Protocol 1.0 servos, and lifecycle-based reconnection — with a workaround for each.No further releases will be made; the last one was 0.6.1. This repository will be archived (read-only) once the end-of-life status lands in
ros/rosdistro. Published binaries stay published and keep working. If you cannot migrate, pin this package.
The ros2_control hardware interface for any kind of ROBOTIS Dynamixel robot.
The package builds one pluginlib plugin, dynamixel_hardware/DynamixelHardware: a SystemInterface implementation that drives any number of ROBOTIS Dynamixel servos sharing a single serial bus. It is hopefully compatible with any configuration of Dynamixel servos, thanks to ros2_control’s flexible architecture.
Features
-
All eight Dynamixel operating modes –
position,extended_position,multi_turn,current_based_position,velocity,current,torqueandpwm– selected per joint with thecontrol_modeparameter. - Per-joint mode switching at runtime: the mode a joint runs in follows the command interfaces the active controller claims, so a position-controlled arm and a velocity-controlled wheel can share one bus and one control cycle.
-
A
pwmcommand interface next toposition,velocityandeffort, for direct duty-ratio control. -
Joint-side units: per-joint
gear_ratio,offsetandtorque_constantconvert between the servo and the joint, so controllers command joint radians and Nm rather than motor revolutions and milliamps. -
Hardware-free operation:
use_dummyswaps the serial driver for a built-in dummy that emulates every operating mode through the same plugin logic, so a robot description can be brought up with no servos attached. -
Bounded error handling:
write()sends nothing until the first successfulread()after activation, and each direction of the bus tolerates a configurable burst of consecutive failures before it reports an error to the controller manager. -
Protocol 1.0 and 2.0 servos, through automatic control-table name fallbacks (
Goal_VelocitytoMoving_Speed,Present_VelocitytoPresent_Speed,Present_CurrenttoPresent_Load). -
One codebase for every supported distro: the version differences live in
compat.hppand a single CMake standard check, not in diverging branches.
Supported distros
| ROS 2 distro | Branch | Support |
|---|---|---|
| rolling | rolling |
Development branch; all pull requests target it |
| lyrical | lyrical |
Supported, by label-driven backport |
| jazzy | jazzy |
Supported, by label-driven backport |
| humble | humble |
Supported until its upstream EOL in May 2027 (via the compat.hpp shim) |
Each distro branch is built and tested by its own workflow, and a nightly matrix rebuilds all four plus the examples repository downstream. The older branches (foxy, galactic, iron) are frozen and unsupported.
Kilted is not part of this line: it has no branch here and receives no backports. Kilted users stay on the released ros-kilted-dynamixel-hardware 0.6.0 binary, which predates everything documented below.
Installation
Binary packages are published for jazzy, kilted, lyrical and rolling, and carry the older 0.5.x/0.6.x line:
$ sudo apt install ros-$ROS_DISTRO-dynamixel-hardware
There is no humble binary – dynamixel_hardware has never been released into humble – so humble users build from source, as does anyone who wants what this README documents:
$ export ROS_DISTRO=rolling # humble, jazzy, lyrical or rolling
$ source /opt/ros/$ROS_DISTRO/setup.bash
$ mkdir -p ~/ws/src && cd ~/ws/src
$ git clone https://github.com/dynamixel-community/dynamixel_hardware.git
$ git clone https://github.com/dynamixel-community/dynamixel_hardware_examples.git
$ cd ~/ws
$ rosdep install --from-paths src --ignore-src -r -y
$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ . install/setup.bash
Clone the default rolling branch whichever distro you build against. It is the only branch that carries what this README describes, and the same codebase builds on humble, jazzy, lyrical and rolling – that is what the compat.hpp shim is for. The distro branches receive this content by backport once 1.0.0 is released; until then -b humble and -b jazzy would give you the 0.6.x line instead, and -b lyrical would fail, because that branch is cut as part of the 1.0.0 release.
The examples repository is optional; it is what the walkthrough further down uses.
Configuration
A minimal <ros2_control> section:
<ros2_control name="DynamixelHardware" type="system">
<hardware>
<plugin>dynamixel_hardware/DynamixelHardware</plugin>
<param name="port_name">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
<!-- <param name="use_dummy">true</param> -->
</hardware>
<joint name="joint1">
<param name="id">1</param>
<command_interface name="position"/>
<state_interface name="position"/>
<state_interface name="velocity"/>
<state_interface name="effort"/>
</joint>
</ros2_control>
Every parameter below is a <param> element inside that tag. These tables are the reference; the OpenManipulator-X walkthrough further down shows the same parameters in context.
Hardware parameters
Parameters of the <hardware> tag:
| Parameter | Default | Description |
|---|---|---|
port_name |
required | Serial port, e.g. /dev/ttyUSB0. The old name usb_port is still accepted but deprecated and logs a warning at startup. Only optional under use_dummy. |
File truncated at 100 lines see the full file
