{"id":13831281,"url":"https://github.com/dynamixel-community/dynamixel_hardware","last_synced_at":"2025-07-09T13:33:11.534Z","repository":{"id":41181243,"uuid":"331868090","full_name":"dynamixel-community/dynamixel_hardware","owner":"dynamixel-community","description":"ros2_control packages for ROBOTIS Dynamixel","archived":false,"fork":false,"pushed_at":"2024-05-12T09:44:00.000Z","size":1384,"stargazers_count":109,"open_issues_count":19,"forks_count":49,"subscribers_count":6,"default_branch":"rolling","last_synced_at":"2024-08-04T10:06:03.747Z","etag":null,"topics":["cpp","dynamixel","robotics","robotis","ros2","ros2-control","ros2-foxy","ros2-humble","ros2-rolling"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dynamixel-community.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-01-22T07:20:11.000Z","updated_at":"2024-08-04T10:06:19.020Z","dependencies_parsed_at":"2024-08-04T10:06:12.557Z","dependency_job_id":"34d6f8ae-980c-44bb-9710-9032f58e879d","html_url":"https://github.com/dynamixel-community/dynamixel_hardware","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dynamixel-community%2Fdynamixel_hardware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dynamixel-community%2Fdynamixel_hardware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dynamixel-community%2Fdynamixel_hardware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dynamixel-community%2Fdynamixel_hardware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dynamixel-community","download_url":"https://codeload.github.com/dynamixel-community/dynamixel_hardware/tar.gz/refs/heads/rolling","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225553359,"owners_count":17487293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","dynamixel","robotics","robotis","ros2","ros2-control","ros2-foxy","ros2-humble","ros2-rolling"],"created_at":"2024-08-04T10:01:23.663Z","updated_at":"2024-11-20T12:31:35.582Z","avatar_url":"https://github.com/dynamixel-community.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# dynamixel_hardware\n\nThe [`ros2_control`](https://github.com/ros-controls/ros2_control) implementation for any kind of [ROBOTIS Dynamixel](https://emanual.robotis.com/docs/en/dxl/) robots.\n\nThe `dynamixel_hardware` package is the [`SystemInterface`](https://github.com/ros-controls/ros2_control/blob/master/hardware_interface/include/hardware_interface/system_interface.hpp) implementation for the multiple ROBOTIS Dynamixel servos.\n\nIt is hopefully compatible any configuration of ROBOTIS Dynamixel servos thanks to the `ros2_control`'s flexible architecture.\n\n## Set up\n\nFirst [install ROS 2 Rolling on Ubuntu 22.04](http://docs.ros.org/en/rolling/Installation/Ubuntu-Install-Debians.html). Then follow the instruction below.\n\n```shell\n$ source /opt/ros/rolling/setup.bash\n$ mkdir -p ~/ros/rolling \u0026\u0026 cd ~/ros/rolling/src\n$ git clone https://github.com/youtalk/dynamixel_hardware.git\n$ git clone https://github.com/youtalk/dynamixel_hardware_examples.git\n$ cd -\n$ rosdep install --from-paths src --ignore-src -r -y\n$ colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n$ . install/setup.bash\n```\n\n## Demo with real ROBOTIS OpenManipulator-X\n\n### Configure Dynamixel motor parameters\n\nUpdate the `usb_port`, `baud_rate`, and `joint_ids` parameters on [`open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro`](https://github.com/youtalk/dynamixel_hardware_examples/blob/main/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro#L9-L12) to correctly communicate with Dynamixel motors.\nThe `use_dummy` parameter is required if you don't have a real OpenManipulator-X.\n\nNote that `joint_ids` parameters must be splited by `,`.\n\n```xml\n\u003chardware\u003e\n  \u003cplugin\u003edynamixel_hardware/DynamixelHardware\u003c/plugin\u003e\n  \u003cparam name=\"usb_port\"\u003e/dev/ttyUSB0\u003c/param\u003e\n  \u003cparam name=\"baud_rate\"\u003e1000000\u003c/param\u003e\n  \u003c!-- \u003cparam name=\"use_dummy\"\u003etrue\u003c/param\u003e --\u003e\n\u003c/hardware\u003e\n```\n\n- Terminal 1\n\nLaunch the `ros2_control` manager for the OpenManipulator-X.\n\n```shell\n$ ros2 launch open_manipulator_x_description open_manipulator_x.launch.py\n```\n\n- Terminal 2\n\nStart the `joint_trajectory_controller` and send a `/joint_trajectory_controller/follow_joint_trajectory` goal to move the OpenManipulator-X.\n\n```shell\n$ ros2 control switch_controllers --activate joint_state_broadcaster --activate joint_trajectory_controller --deactivate velocity_controller\n$ ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory -f \"{\n  trajectory: {\n    joint_names: [joint1, joint2, joint3, joint4, gripper],\n    points: [\n      { positions: [0.1, 0.1, 0.1, 0.1, 0], time_from_start: { sec: 2 } },\n      { positions: [-0.1, -0.1, -0.1, -0.1, 0], time_from_start: { sec: 4 } },\n      { positions: [0, 0, 0, 0, 0], time_from_start: { sec: 6 } }\n    ]\n  }\n}\"\n```\n\nIf 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.\n\n```shell\n$ ros2 control switch_controllers --activate joint_state_broadcaster --deactivate joint_trajectory_controller --activate velocity_controller\n$ ros2 topic pub /velocity_controller/commands std_msgs/msg/Float64MultiArray \"data: [0.1, 0.1, 0.1, 0.1, 0]\"\n```\n\n[![dynamixel_control: the ros2_control implementation for any kind of ROBOTIS Dynamixel robots](https://img.youtube.com/vi/EZtBaU-otzI/0.jpg)](https://www.youtube.com/watch?v=EZtBaU-otzI)\n\n## Demo with dummy ROBOTIS OpenManipulator-X\n\nThe `use_dummy` parameter is required if you use the dummy OpenManipulator-X.\n\n```diff\ndiff --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\nindex c6cdb74..111846d 100644\n--- a/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro\n+++ b/open_manipulator_x_description/urdf/open_manipulator_x.ros2_control.xacro\n@@ -9,7 +9,7 @@\n         \u003cparam name=\"usb_port\"\u003e/dev/ttyUSB0\u003c/param\u003e\n         \u003cparam name=\"baud_rate\"\u003e1000000\u003c/param\u003e\n-        \u003c!-- \u003cparam name=\"use_dummy\"\u003etrue\u003c/param\u003e --\u003e\n+        \u003cparam name=\"use_dummy\"\u003etrue\u003c/param\u003e\n       \u003c/hardware\u003e\n       \u003cjoint name=\"joint1\"\u003e\n         \u003cparam name=\"id\"\u003e11\u003c/param\u003e\n```\n\nThen follow the same instruction of the real robot one.\n\nNote that the dummy implementation has no interpolation so far.\nIf you sent a joint message, the robot would move directly to the joints without interpolation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdynamixel-community%2Fdynamixel_hardware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdynamixel-community%2Fdynamixel_hardware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdynamixel-community%2Fdynamixel_hardware/lists"}