ros2_control packages for ROBOTIS Dynamixel

Overview

dynamixel_control

The ros2_control implementation for any kind of ROBOTIS Dynamixel robots.

  • dynamixel_hardware: the SystemInterface implementation for the multiple ROBOTIS Dynamixel servos.
  • open_manipulator_x_robot: the reference implementation of the ros2_control robot 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_robot/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="joint_ids">11,12,13,14,15</param>
  <!-- <param name="use_dummy">true</param> -->
</hardware>
  • Terminal 1

Launch the ros2_control manager for the OpenManipulator-X.

$ ros2 launch open_manipulator_x_robot open_manipulator_x_robot.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-controllers joint_trajectory_controller
$ ros2 control list_controllers
$ ros2 control list_hardware_interfaces
$ 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.01], time_from_start: { sec: 2 } },
      { positions: [-0.1, -0.1, -0.1, -0.1, -0.01], time_from_start: { sec: 4 } },
      { positions: [0, 0, 0, 0, 0], time_from_start: { sec: 6 } }
    ]
  }
}"

dynamixel_control: the ros2_control implementation for any kind of ROBOTIS Dynamixel robots

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_robot/urdf/open_manipulator_x.ros2_control.xacro b/open_manipulator_x_robot/urdf/open_manipulator_x.ros2_control.xacro
index c6cdb74..111846d 100644
--- a/open_manipulator_x_robot/urdf/open_manipulator_x.ros2_control.xacro
+++ b/open_manipulator_x_robot/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="joint_ids">11,12,13,14,15</param>
-        <!-- <param name="use_dummy">true</param> -->
+        <param name="use_dummy">true</param>
       </hardware>
       <joint name="joint1">
         <command_interface name="position"/>

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.

Comments
  • support for ros2 galactic

    support for ros2 galactic

    Hallo on building with ros2-galatic i am getting this error:

    cmds: source /opt/ros/galactic/setup.bash mkdir -p ~/ros/galactic && cd ~/ros/galactic 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

    error: ` fatal error: hardware_interface/base_interface.hpp: No such file or directory 20 | #include <hardware_interface/base_interface.hpp> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. make[2]: *** [CMakeFiles/dynamixel_hardware.dir/build.make:63: CMakeFiles/dynamixel_hardware.dir/src/dynamixel_hardware.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/dynamixel_hardware.dir/all] Error 2 make: *** [Makefile:141: all] Error 2

    Failed <<< dynamixel_hardware [22.0s, exited with code 2] `

    opened by 3mrrrx 6
  • Adding back in ros_ign_gazebo and ign_ros2_control dependency

    Adding back in ros_ign_gazebo and ign_ros2_control dependency

    Addresses: https://github.com/youtalk/dynamixel_control/pull/35#issuecomment-1280696915

    But don't call find_package from within in CMakeLists.txt. They are only used in URDF, so a find_package should't be necessary.

    Signed-off-by: Kenji Brameld [email protected]

    opened by ijnek 3
  • Add missing dependencies

    Add missing dependencies

    This adds rclcpp_lifecycle and lifecycle_msgs as dependencies. When I compiled ROS2 Galactic from source, the build for dynamixel_control failed, complaining about these. (Not sure why, but when ROS2 is installed from packages on Ubuntu, the build is fine without these.)

    opened by pdenes 3
  • Can this hardware library be used with wheeled robot?

    Can this hardware library be used with wheeled robot?

    First of all, pretty awesome library. I tried to use this lib for a wheeled robot with foxy + ros2_control and standard diff_drive_controller but had some issues with it. Can this be used with wheeled robot in Velocity control mode or will it have to be modified to work with it? And what changes you would suggest. Thanks.

    opened by robofoundry 3
  • Transfer repository from youtalk to dynamixel-community

    Transfer repository from youtalk to dynamixel-community

    Hi @ijnek and @ROBOTIS-Will Thank you for discussing releasing dynamixel_hardware package on ROSCon 2022. It was so exciting.

    • [x] 1. Separate this repository into two repositories: dynamixel_hardware and dyanamixel_hardware_examples to resolve https://github.com/youtalk/dynamixel_control/issues/36
    • [x] 2. Transfer their repositories to a new organization dynamixel_community.
    • [x] 3. Make release repositories dynamixel_hardware-release and dyanamixel_hardware_examples-release on the organization.
    • [x] 4. Release dynamixel_hardware package first!

    What do you think? I want to add you to the organization's co-owners.

    opened by youtalk 2
  • rosdep fails on ROS 2 Rolling

    rosdep fails on ROS 2 Rolling

    ijnek@ijnek-MS-7924:~/tmp_workspaces/dynamixel_control_ws$ rosdep install --from-paths src --ignore-src -r -y
    ERROR: the following packages/stacks could not have their rosdep keys resolved
    to system dependencies:
    pantilt_bot_description: Cannot locate rosdep definition for [realsense2_description]
    Continuing to install resolvable dependencies...
    #All required rosdeps installed successfully
    

    Installation instructions' rosdep fails because the realsense2_description package isn't available in rolling. I've opened a ticket against IntelRealSense/realsense-ros to request for a release in rolling, which should solve this issue.

    opened by ijnek 2
  • Splitting out examples to a separate repository?

    Splitting out examples to a separate repository?

    The pantilt_bot_description and open_manipulator_x_description example packages are great, but I think it would be better split them out into a separate repository for two reasons.

    1. When building from source, I often use rosdep to install package dependencies. If I want to use the dynamixel_hardware package only, I still have to clone the other two packages add an AMENT_IGNORE file to the example packages to prevent unnecessary dependencies getting installed (eg. realsense2_description is not available in rolling) and getting built. If the repositories were separate, I wouldn't have to do this.
    2. When releasing the package, bloom will usually release all packages in the repository together. I'm not sure if you intend to release pantilt_bot_description and open_manipulator_x_description. The version numbers of all package numbers must be increased together.

    I don't know if I can get around to doing this, but want to hear your thoughts @youtalk.

    opened by ijnek 2
  • Could you recommend me  please .

    Could you recommend me please .

    Could you recommend me please , I want to read present_input_voltage form dynamixel but i don't know main file for ros node and code for read . i need some guide

    opened by pannatorn6395 2
  • Releasing this package

    Releasing this package

    Hi @youtalk , thanks for developing and maintaining this package. I remember at ROSCon JP (I was there), you mentioned some things preventing you releasing this package.

    I'd like to know what the roadblockers currently are, prevnting this package from being released into ROS 2? The obvious one I can think of is ROBOTIS-GIT/dynamixel-workbench missing releases for ROS2. Are there any others?

    opened by ijnek 2
  • fix 'CallbackReturn' does not name a type

    fix 'CallbackReturn' does not name a type

    Building on rolling, (and perhaps humble too), the following error shows up:

    /home/ijnek/tmp_workspaces/dynamixel_control_ws/src/dynamixel_control/dynamixel_hardware/src/dynamixel_hardware.cpp:51:1: error: ‘CallbackReturn’ does not name a type
       51 | CallbackReturn DynamixelHardware::on_init(const hardware_interface::HardwareInfo & info)
          | ^~~~~~~~~~~~~~
    

    This change fixes this error.

    opened by ijnek 2
  • Adding CI

    Adding CI

    Hi @youtalk , I'd like to create a new PR adding CI in. Do you have preferences for industrial_ci vs action-ros-ci, or another? My preference would be action-ros-ci, but would be happy to work with any tool you're comfortable with.

    opened by ijnek 1
  • No gripper movement

    No gripper movement

    Hi,

    I am using your code to test my Dynamixel openmanipulator arm. I am able to move the arm except for the gripper. I have checked all the settings including the ID numbers of the motor via Dynamixel Wizard. I can move the gripper motor via the Wizard tool so I can confirm that the motor is not an issue. Could you suggest what I can do to troubleshoot this issue.

    Thanks, Ajay

    opened by ajaysonar 2
  • failing to compile

    failing to compile

    I'm having trouble getting dynamixel_control to compile. Below is a dockerfile for reproducibility. The error I get is

    #0 6.315 --- stderr: dynamixel_workbench_toolbox
    #0 6.315 /ros2_ws/src/dynamixel-workbench-ros2/dynamixel_workbench_toolbox/src/dynamixel_workbench_toolbox/dynamixel_driver.cpp: In member function ‘bool DynamixelDriver::readRegister(uint8_t, uint16_t, uint16_t, uint32_t*, const char**)’:
    #0 6.315 /ros2_ws/src/dynamixel-workbench-ros2/dynamixel_workbench_toolbox/src/dynamixel_workbench_toolbox/dynamixel_driver.cpp:776:11: warning: ISO C++ forbids variable length array ‘data_read’ [-Wvla]
    #0 6.315   776 |   uint8_t data_read[length];
    #0 6.315       |           ^~~~~~~~~
    #0 6.315 /ros2_ws/src/dynamixel-workbench-ros2/dynamixel_workbench_toolbox/src/dynamixel_workbench_toolbox/dynamixel_driver.cpp: In member function ‘bool DynamixelDriver::syncWrite(uint8_t, uint8_t*, uint8_t, int32_t*, uint8_t, const char**)’:
    #0 6.315 /ros2_ws/src/dynamixel-workbench-ros2/dynamixel_workbench_toolbox/src/dynamixel_workbench_toolbox/dynamixel_driver.cpp:1012:11: warning: ISO C++ forbids variable length array ‘multi_parameter’ [-Wvla]
    #0 6.315  1012 |   uint8_t multi_parameter[4*data_num_for_each_id];
    #0 6.315       |           ^~~~~~~~~~~~~~~
    #0 6.315 ---
    #0 6.316 Finished <<< dynamixel_workbench_toolbox [3.09s]
    #0 6.321 Starting >>> dynamixel_hardware
    #0 6.336 Starting >>> dynamixel_workbench
    #0 7.692 Finished <<< dynamixel_sdk_custom_interfaces [6.74s]
    #0 7.693 Starting >>> dynamixel_sdk_examples
    #0 7.828 Finished <<< dynamixel_workbench [1.49s]
    #0 13.12 --- stderr: dynamixel_hardware
    #0 13.12 In file included from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:15:
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:66:3: error: ‘CallbackReturn’ does not name a type
    #0 13.12    66 |   CallbackReturn on_init(const hardware_interface::HardwareInfo & info) override;
    #0 13.12       |   ^~~~~~~~~~~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:75:3: error: ‘CallbackReturn’ does not name a type
    #0 13.12    75 |   CallbackReturn on_activate(const rclcpp_lifecycle::State & previous_state) override;
    #0 13.12       |   ^~~~~~~~~~~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:78:3: error: ‘CallbackReturn’ does not name a type
    #0 13.12    78 |   CallbackReturn on_deactivate(const rclcpp_lifecycle::State & previous_state) override;
    #0 13.12       |   ^~~~~~~~~~~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:51:1: error: ‘CallbackReturn’ does not name a type
    #0 13.12    51 | CallbackReturn DynamixelHardware::on_init(const hardware_interface::HardwareInfo & info)
    #0 13.12       | ^~~~~~~~~~~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘virtual std::vector<hardware_interface::StateInterface> dynamixel_hardware::DynamixelHardware::export_state_interfaces()’:
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:193:24: error: ‘info_’ was not declared in this scope
    #0 13.12   193 |   for (uint i = 0; i < info_.joints.size(); i++) {
    #0 13.12       |                        ^~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘virtual std::vector<hardware_interface::CommandInterface> dynamixel_hardware::DynamixelHardware::export_command_interfaces()’:
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:209:24: error: ‘info_’ was not declared in this scope
    #0 13.12   209 |   for (uint i = 0; i < info_.joints.size(); i++) {
    #0 13.12       |                        ^~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: At global scope:
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:219:1: error: ‘CallbackReturn’ does not name a type
    #0 13.12   219 | CallbackReturn DynamixelHardware::on_activate(const rclcpp_lifecycle::State & previous_state)
    #0 13.12       | ^~~~~~~~~~~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:236:1: error: ‘CallbackReturn’ does not name a type
    #0 13.12   236 | CallbackReturn DynamixelHardware::on_deactivate(const rclcpp_lifecycle::State & previous_state)
    #0 13.12       | ^~~~~~~~~~~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘virtual hardware_interface::return_type dynamixel_hardware::DynamixelHardware::read()’:
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:248:28: error: ‘info_’ was not declared in this scope
    #0 13.12   248 |   std::vector<uint8_t> ids(info_.joints.size(), 0);
    #0 13.12       |                            ^~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘virtual hardware_interface::return_type dynamixel_hardware::DynamixelHardware::write()’:
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:301:28: error: ‘info_’ was not declared in this scope
    #0 13.12   301 |   std::vector<uint8_t> ids(info_.joints.size(), 0);
    #0 13.12       |                            ^~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp: In member function ‘hardware_interface::return_type dynamixel_hardware::DynamixelHardware::enable_torque(bool)’:
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:346:26: error: ‘info_’ was not declared in this scope
    #0 13.12   346 |     for (uint i = 0; i < info_.joints.size(); ++i) {
    #0 13.12       |                          ^~~~~
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:355:26: error: ‘info_’ was not declared in this scope
    #0 13.12   355 |     for (uint i = 0; i < info_.joints.size(); ++i) {
    #0 13.12       |                          ^~~~~
    #0 13.12 In file included from /opt/ros/foxy/include/class_loader/class_loader_core.hpp:57,
    #0 13.12                  from /opt/ros/foxy/include/class_loader/class_loader.hpp:55,
    #0 13.12                  from /opt/ros/foxy/include/pluginlib/class_list_macros.hpp:40,
    #0 13.12                  from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:431:
    #0 13.12 /opt/ros/foxy/include/class_loader/meta_object.hpp: In instantiation of ‘B* class_loader::impl::MetaObject<C, B>::create() const [with C = dynamixel_hardware::DynamixelHardware; B = hardware_interface::SystemInterface]’:
    #0 13.12 /opt/ros/foxy/include/class_loader/meta_object.hpp:216:7:   required from here
    #0 13.12 /opt/ros/foxy/include/class_loader/meta_object.hpp:218:12: error: invalid new-expression of abstract class type ‘dynamixel_hardware::DynamixelHardware’
    #0 13.12   218 |     return new C;
    #0 13.12       |            ^~~~~
    #0 13.12 In file included from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:15:
    #0 13.12 /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:59:7: note:   because the following virtual functions are pure within ‘dynamixel_hardware::DynamixelHardware’:
    #0 13.12    59 | class DynamixelHardware
    #0 13.12       |       ^~~~~~~~~~~~~~~~~
    #0 13.12 In file included from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/include/dynamixel_hardware/dynamixel_hardware.hpp:22,
    #0 13.12                  from /ros2_ws/src/dynamixel_control-1a1e6ef0cec860e0d44d25e910d269af89ab41c4/dynamixel_hardware/src/dynamixel_hardware.cpp:15:
    #0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:48:23: note: 	‘virtual hardware_interface::return_type hardware_interface::SystemInterface::configure(const hardware_interface::HardwareInfo&)’
    #0 13.12    48 |   virtual return_type configure(const HardwareInfo & system_info) = 0;
    #0 13.12       |                       ^~~~~~~~~
    #0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:116:23: note: 	‘virtual hardware_interface::return_type hardware_interface::SystemInterface::start()’
    #0 13.12   116 |   virtual return_type start() = 0;
    #0 13.12       |                       ^~~~~
    #0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:122:23: note: 	‘virtual hardware_interface::return_type hardware_interface::SystemInterface::stop()’
    #0 13.12   122 |   virtual return_type stop() = 0;
    #0 13.12       |                       ^~~~
    #0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:128:23: note: 	‘virtual std::string hardware_interface::SystemInterface::get_name() const’
    #0 13.12   128 |   virtual std::string get_name() const = 0;
    #0 13.12       |                       ^~~~~~~~
    #0 13.12 /opt/ros/foxy/include/hardware_interface/system_interface.hpp:134:18: note: 	‘virtual hardware_interface::status hardware_interface::SystemInterface::get_status() const’
    #0 13.12   134 |   virtual status get_status() const = 0;
    #0 13.12       |                  ^~~~~~~~~~
    #0 13.12 make[2]: *** [CMakeFiles/dynamixel_hardware.dir/build.make:63: CMakeFiles/dynamixel_hardware.dir/src/dynamixel_hardware.cpp.o] Error 1
    #0 13.12 make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/dynamixel_hardware.dir/all] Error 2
    #0 13.12 make: *** [Makefile:141: all] Error 2
    #0 13.12 ---
    #0 13.12 Failed   <<< dynamixel_hardware [6.80s, exited with code 2]
    #0 18.16 Aborted  <<< dynamixel_sdk_examples [10.5s]
    #0 23.98 Aborted  <<< dynamixel_workbench_msgs [23.0s]
    #0 24.02 
    #0 24.02 Summary: 4 packages finished [23.3s]
    #0 24.02   1 package failed: dynamixel_hardware
    #0 24.02   2 packages aborted: dynamixel_sdk_examples dynamixel_workbench_msgs
    #0 24.02   2 packages had stderr output: dynamixel_hardware dynamixel_workbench_toolbox
    #0 24.02   2 packages not processed
    ------
    failed to solve: executor failed running [/bin/bash -c source /opt/ros/$ROS_DISTRO/setup.bash && colcon build --symlink-install]: exit code: 2
    
    dockerfile
    FROM ros:foxy
    
    # use bash instead of sh
    SHELL ["/bin/bash", "-c"]
    ENV DEBIAN_FRONTEND=noninteractive
    
    # update system
    RUN apt-get update && apt-get upgrade --yes
    RUN apt-get install -y \
        wget \
        ros-foxy-ros2-control \
        ros-foxy-ros2-controllers \
        && rm -rf /var/lib/apt/lists/*
    
    # create workspace
    RUN mkdir -p /ros2_ws/src
    WORKDIR /ros2_ws
    
    # download ROS packages
    RUN wget -c https://github.com/ROBOTIS-GIT/DynamixelSDK/archive/refs/tags/3.7.60.tar.gz -O - | tar -xz -C /ros2_ws/src
    RUN wget -c https://github.com/ROBOTIS-GIT/dynamixel-workbench/archive/ros2.tar.gz -O - | tar -xz -C /ros2_ws/src
    RUN wget -c https://github.com/ROBOTIS-GIT/dynamixel-workbench-msgs/archive/ros2.tar.gz -O - | tar -xz -C /ros2_ws/src
    RUN wget -c https://github.com/youtalk/dynamixel_control/archive/1a1e6ef0cec860e0d44d25e910d269af89ab41c4.tar.gz -O - | tar -xz -C /ros2_ws/src
    
    
    RUN apt-get update \
        && rosdep install --from-paths src --ignore-src -r -y \
        && rm -rf /var/lib/apt/lists/*
    
    # build ROS packages and allow non-compiled
    # sources to be edited without rebuild
    RUN source /opt/ros/$ROS_DISTRO/setup.bash && colcon build --symlink-install
    
    # add packages to path
    RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc
    RUN echo "source /ros2_ws/install/setup.bash" >> ~/.bashrc
    

    run using docker build .

    opened by patrickwasp 1
Owner
Yutaka Kondo
I'm always thinking about what people and robots can do together.
Yutaka Kondo
ODrive driver for ros2_control

odrive_ros2_control ENGLISH / 中文 Introduction ODrive driver for ros2_control Prerequisites ROS Foxy ODrive Firmware v0.5.3 Documentation Wiki Done Sup

null 135 Jan 7, 2023
This project contains the main ROS 2 packages of Xiaomi CyberDog®.

Xiaomi CyberDog ROS 2 文档包含简体中文和English 简介 - Introduction 本项目包含小米铁蛋®的ROS 2主要功能包. This project contains the main ROS 2 packages of Xiaomi CyberDog®. 基本信

null 383 Dec 31, 2022
ROS packages for Scout 2.0

ROS packages for Scout 2.0

ROAS 3 Jun 14, 2022
Packages for simulating the Tethys-class Long-Range AUV (LRAUV) from the Monterey Bay Aquarium Research Institute (MBARI).

LRAUV Simulation This repository contains packages for simulating the Tethys-class Long-Range AUV (LRAUV) from the Monterey Bay Aquarium Research Inst

Open Robotics 31 Dec 22, 2022
OpenWrt Packages

NueXini_Packages 1.如何使用NueXini_Packages? / How to use NueXini_Packages? cd lede sed -i '$a src-git NueXini_Packages https://github.com/NueXini/NueXini

null 194 Jan 2, 2023
Core ROS packages

Robot Operating System (ROS) =============================================================================== ROS is a meta-operating system for your

ROS core stacks 2.1k Dec 30, 2022
It's a static library that's provide a way to do hooking (intercepting software components) in native shared object from some Android Packages

ARM_hook It's a static library that's provide a way to do hooking (intercepting software components) in native shared object from some Android Package

Gabriel Correia 1 Feb 17, 2022
conversion from absolute encoder and incremental encoder, control two robotis dynamixel motors, testing qserialport library in qt

Q_dxl This example is created for testing: Serial connection Testing two dynamixel motors (eg. MX-28AT) Doing the conversion from absolute encoder (of

ibov 1 Oct 30, 2021
ODrive driver for ros2_control

odrive_ros2_control ENGLISH / 中文 Introduction ODrive driver for ros2_control Prerequisites ROS Foxy ODrive Firmware v0.5.3 Documentation Wiki Done Sup

null 135 Jan 7, 2023
A competitive programming helper tool, which packages included libraries into a single file, suitable for online judges.

cpack Cpack is a competitive programming helper tool, which packages the main source file along with included libraries into a single file, suitable f

PetarMihalj 11 Apr 22, 2022
ZT is a zig-contained library that automatically compiles+links ImGui, OpenGL, and GLFW into typed packages.

ZT is a zig-contained library that automatically compiles+links ImGui, OpenGL, and GLFW into typed packages. By zig contained I mean that ZT is intend

null 90 Jan 1, 2023
The goal of arrowvctrs is to wrap the Arrow Data C API and Arrow Stream C API to provide lightweight Arrow support for R packages

The goal of arrowvctrs is to wrap the Arrow Data C API and Arrow Stream C API to provide lightweight Arrow support for R packages to consume and produce streams of data in Arrow format. Right now it’s just a fun way for me to learn about Arrow!

Dewey Dunnington 30 Aug 5, 2022
This project contains the main ROS 2 packages of Xiaomi CyberDog®.

Xiaomi CyberDog ROS 2 文档包含简体中文和English 简介 - Introduction 本项目包含小米铁蛋®的ROS 2主要功能包. This project contains the main ROS 2 packages of Xiaomi CyberDog®. 基本信

null 383 Dec 31, 2022
ImmortalWrt is a fork of OpenWrt, with more packages ported, more devices supported, better performance, and special optimizations for mainland China users.

ImmortalWrt is a fork of OpenWrt, with more packages ported, more devices supported, better performance, and special optimizations for mainland China users.

null 4 Jan 31, 2022
ROS2 packages based on NVIDIA libArgus library for hardware-accelerated CSI camera support.

Isaac ROS Argus Camera This repository provides monocular and stereo nodes that enable ROS developers to use cameras connected to Jetson platforms ove

NVIDIA Isaac ROS 35 Dec 10, 2022
Hardware-accelerated DNN model inference ROS2 packages using NVIDIA Triton/TensorRT for both Jetson and x86_64 with CUDA-capable GPU.

Isaac ROS DNN Inference Overview This repository provides two NVIDIA GPU-accelerated ROS2 nodes that perform deep learning inference using custom mode

NVIDIA Isaac ROS 62 Dec 14, 2022
ROS packages for Scout 2.0

ROS packages for Scout 2.0

ROAS 3 Jun 14, 2022
Isaac ROS common utilities and scripts for use in conjunction with the Isaac ROS suite of packages.

Isaac ROS Common Isaac ROS common utilities and scripts for use in conjunction with the Isaac ROS suite of packages. Docker Scripts run_dev.sh creates

NVIDIA Isaac ROS 64 Jan 8, 2023
Packages for simulating the Tethys-class Long-Range AUV (LRAUV) from the Monterey Bay Aquarium Research Institute (MBARI).

LRAUV Simulation This repository contains packages for simulating the Tethys-class Long-Range AUV (LRAUV) from the Monterey Bay Aquarium Research Inst

Open Robotics 31 Dec 22, 2022
The required packages to build the control GUI for Ohmnibot

ohmni-ros-gui The required packages to build the control GUI for Ohmnibot These packages alow us to perfrom certain tasks on OHmnibot: Prequisite sett

Phoenix Ly 1 Jan 2, 2022