├── ros2_control_demos-not-released.humble.repos ├── ros2_control_demos-not-released.jazzy.repos ├── ros2_control_demos-not-released.kilted.repos ├── ros2_control_demos-not-released.rolling.repos ├── example_1 ├── doc │ └── rrbot.png ├── bringup │ ├── config │ │ ├── rrbot_forward_position_publisher.yaml │ │ ├── rrbot_controllers.yaml │ │ ├── rrbot_joint_trajectory_publisher.yaml │ │ └── rrbot_jtc.yaml │ └── launch │ │ ├── test_forward_position_controller.launch.py │ │ └── test_joint_trajectory_controller.launch.py ├── README.md ├── ros2_control_demo_example_1.xml ├── description │ ├── urdf │ │ └── rrbot.urdf.xacro │ └── ros2_control │ │ └── rrbot.ros2_control.xacro ├── package.xml └── hardware │ └── include │ └── ros2_control_demo_example_1 │ └── rrbot.hpp ├── example_12 ├── doc │ └── rrbot.png ├── controllers │ └── src │ │ └── passthrough_controller_parameters.yaml ├── README.md ├── passthrough_controller.xml ├── ros2_control_demo_example_12.xml ├── description │ ├── urdf │ │ └── rrbot.urdf.xacro │ └── ros2_control │ │ └── rrbot.ros2_control.xacro ├── bringup │ ├── config │ │ └── rrbot_chained_controllers.yaml │ └── launch │ │ └── launch_chained_controllers.launch.py └── package.xml ├── example_2 ├── doc │ └── diffbot.png ├── README.md ├── ros2_control_demo_example_2.xml ├── description │ ├── urdf │ │ └── diffbot.urdf.xacro │ └── ros2_control │ │ └── diffbot.ros2_control.xacro ├── bringup │ └── config │ │ └── diffbot_controllers.yaml └── package.xml ├── example_15 ├── doc │ └── two_rrbot.png ├── README.md ├── bringup │ ├── config │ │ ├── rrbot_namespace_forward_position_publisher.yaml │ │ ├── rrbot_namespace_joint_trajectory_publisher.yaml │ │ ├── multi_controller_manager_forward_position_publisher.yaml │ │ ├── rrbot_namespace_controllers.yaml │ │ ├── multi_controller_manager_joint_trajectory_publisher.yaml │ │ └── multi_controller_manager_rrbot_generic_controllers.yaml │ └── launch │ │ ├── test_forward_position_controller.launch.py │ │ ├── test_joint_trajectory_controller.launch.py │ │ ├── test_multi_controller_manager_joint_trajectory_controller.launch.py │ │ └── test_multi_controller_manager_forward_position_controller.launch.py ├── CMakeLists.txt └── package.xml ├── example_11 ├── doc │ └── carlikebot.png ├── README.md ├── ros2_control_demo_example_11.xml ├── description │ ├── urdf │ │ └── carlikebot.urdf.xacro │ └── ros2_control │ │ └── carlikebot.ros2_control.xacro ├── bringup │ └── config │ │ └── carlikebot_controllers.yaml └── package.xml ├── example_5 ├── doc │ └── rrbot_wrench.png ├── bringup │ ├── config │ │ ├── wrench_transformer_params.yaml │ │ ├── rrbot_forward_position_publisher.yaml │ │ └── rrbot_with_external_sensor_controllers.yaml │ └── launch │ │ └── test_forward_position_controller.launch.py ├── README.md ├── ros2_control_demo_example_5.xml ├── description │ ├── ros2_control │ │ ├── rrbot_system_position_only.ros2_control.xacro │ │ └── external_rrbot_force_torque_sensor.ros2_control.xacro │ └── urdf │ │ └── rrbot_system_with_external_sensor.urdf.xacro ├── package.xml └── hardware │ └── include │ └── ros2_control_demo_example_5 │ └── external_rrbot_force_torque_sensor.hpp ├── example_9 ├── doc │ └── rrbot_gazebo.png ├── README.md ├── bringup │ ├── config │ │ ├── rrbot_forward_position_publisher.yaml │ │ └── rrbot_controllers.yaml │ └── launch │ │ └── test_forward_position_controller.launch.py ├── ros2_control_demo_example_9.xml ├── description │ ├── ros2_control │ │ └── rrbot.ros2_control.xacro │ ├── urdf │ │ └── rrbot.urdf.xacro │ └── gazebo │ │ └── rrbot.gazebo.xacro └── package.xml ├── example_7 ├── doc │ └── resources │ │ ├── robot.png │ │ ├── link_1.png │ │ ├── link_2.png │ │ ├── trajectory.gif │ │ ├── link_2_roll.png │ │ ├── link_2_aligned.png │ │ ├── link_2_roll_yaw.png │ │ └── link_2_roll_yaw_trans.png ├── README.md ├── bringup │ ├── config │ │ └── r6bot_controller.yaml │ └── launch │ │ └── send_trajectory.launch.py ├── description │ └── urdf │ │ └── r6bot.urdf.xacro ├── ros2_control_demo_example_7.xml ├── hardware │ └── include │ │ └── ros2_control_demo_example_7 │ │ └── r6bot_hardware.hpp └── package.xml ├── Dockerfile ├── entrypoint.sh └── Dockerfile ├── example_16 ├── doc │ └── diffbot_velocities.png ├── README.md ├── ros2_control_demo_example_16.xml ├── description │ ├── urdf │ │ └── diffbot.urdf.xacro │ └── ros2_control │ │ └── diffbot.ros2_control.xacro └── package.xml ├── ros2_control_demos ├── CMakeLists.txt └── package.xml ├── ros2_control_demo_description ├── r6bot │ ├── meshes │ │ └── collision │ │ │ ├── link_0.stl │ │ │ ├── link_1.stl │ │ │ ├── link_2.stl │ │ │ ├── link_3.stl │ │ │ ├── link_4.stl │ │ │ ├── link_5.stl │ │ │ └── link_6.stl │ ├── urdf │ │ └── inc │ │ │ └── create_link.xacro │ └── srdf │ │ └── r6bot.srdf ├── CMakeLists.txt ├── package.xml ├── diffbot │ └── urdf │ │ └── diffbot.materials.xacro ├── rrbot │ └── urdf │ │ └── rrbot.materials.xacro └── carlikebot │ └── urdf │ └── carlikebot.materials.xacro ├── example_3 ├── README.md ├── bringup │ ├── config │ │ ├── rrbot_forward_position_publisher.yaml │ │ └── rrbot_multi_interface_forward_controllers.yaml │ └── launch │ │ └── test_forward_position_controller.launch.py ├── ros2_control_demo_example_3.xml ├── description │ └── urdf │ │ └── rrbot_system_multi_interface.urdf.xacro └── package.xml ├── example_4 ├── README.md ├── bringup │ ├── config │ │ ├── rrbot_forward_position_publisher.yaml │ │ └── rrbot_with_sensor_controllers.yaml │ └── launch │ │ └── test_forward_position_controller.launch.py ├── ros2_control_demo_example_4.xml ├── description │ ├── urdf │ │ └── rrbot_system_with_sensor.urdf.xacro │ └── ros2_control │ │ └── rrbot_system_with_sensor.ros2_control.xacro └── package.xml ├── example_8 ├── README.md ├── bringup │ ├── config │ │ ├── rrbot_forward_position_publisher.yaml │ │ └── rrbot_controllers.yaml │ └── launch │ │ └── test_forward_position_controller.launch.py ├── ros2_control_demo_example_8.xml ├── description │ ├── urdf │ │ └── rrbot_transmissions_system_position_only.urdf.xacro │ └── ros2_control │ │ └── rrbot_transmissions_system_position_only.ros2_control.xacro └── package.xml ├── doc └── run_from_docker.rst ├── example_10 ├── README.md ├── bringup │ ├── config │ │ ├── rrbot_forward_position_publisher.yaml │ │ └── rrbot_controllers.yaml │ └── launch │ │ └── test_forward_position_controller.launch.py ├── ros2_control_demo_example_10.xml ├── description │ ├── urdf │ │ └── rrbot.urdf.xacro │ └── ros2_control │ │ └── rrbot.ros2_control.xacro ├── package.xml └── hardware │ └── include │ └── ros2_control_demo_example_10 │ └── rrbot.hpp ├── example_13 ├── README.md ├── bringup │ └── config │ │ └── three_robots_position_command_publishers.yaml ├── description │ └── ros2_control │ │ └── threedofbot.ros2_control.xacro ├── CMakeLists.txt └── package.xml ├── example_6 ├── README.md ├── bringup │ ├── config │ │ ├── rrbot_forward_position_publisher.yaml │ │ └── rrbot_modular_actuators.yaml │ └── launch │ │ └── test_forward_position_controller.launch.py ├── ros2_control_demo_example_6.xml ├── description │ ├── urdf │ │ └── rrbot_modular_actuators.urdf.xacro │ └── ros2_control │ │ └── rrbot_modular_actuators.ros2_control.xacro └── package.xml ├── example_14 ├── README.md ├── bringup │ └── config │ │ └── rrbot_modular_actuators_without_feedback_sensors_for_position_feedback.yaml ├── ros2_control_demo_example_14.xml ├── description │ └── urdf │ │ └── rrbot_modular_actuators_without_feedback_sensors_for_position_feedback.urdf.xacro └── package.xml ├── example_17 ├── README.md ├── bringup │ ├── config │ │ ├── rrbot_forward_position_publisher.yaml │ │ └── rrbot_controllers.yaml │ └── launch │ │ ├── test_forward_position_controller.launch.xml │ │ └── test_joint_trajectory_controller.launch.xml ├── ros2_control_demo_example_17.xml ├── description │ ├── urdf │ │ └── rrbot.urdf.xacro │ ├── ros2_control │ │ └── rrbot.ros2_control.xacro │ └── launch │ │ └── view_robot.launch.xml └── package.xml ├── .github ├── workflows │ ├── jazzy-pre-commit.yml │ ├── humble-pre-commit.yml │ ├── reviewer_lottery.yml │ ├── update-pre-commit.yml │ ├── rolling-pre-commit.yml │ ├── jazzy-check-docs.yml │ ├── humble-check-docs.yml │ ├── rolling-check-docs.yml │ ├── jazzy-docker-build.yml │ ├── humble-docker-build.yml │ ├── jazzy-semi-binary-build.yml │ ├── humble-semi-binary-build.yml │ ├── jazzy-binary-build.yml │ ├── rolling-docker-build.yaml │ ├── humble-binary-build.yml │ ├── rolling-semi-binary-build.yml │ ├── stale.yml │ └── rolling-binary-build.yml ├── pull_request_template.md ├── dependabot.yml └── mergify.yml ├── .clang-format ├── ros2_control_demos.humble.repos ├── ros2_control_demos.jazzy.repos ├── ros2_control_demos.kilted.repos ├── ros2_control_demos.rolling.repos └── stale.yml /ros2_control_demos-not-released.humble.repos: -------------------------------------------------------------------------------- 1 | repositories: 2 | -------------------------------------------------------------------------------- /ros2_control_demos-not-released.jazzy.repos: -------------------------------------------------------------------------------- 1 | repositories: 2 | -------------------------------------------------------------------------------- /ros2_control_demos-not-released.kilted.repos: -------------------------------------------------------------------------------- 1 | repositories: 2 | -------------------------------------------------------------------------------- /ros2_control_demos-not-released.rolling.repos: -------------------------------------------------------------------------------- 1 | repositories: 2 | -------------------------------------------------------------------------------- /example_1/doc/rrbot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_1/doc/rrbot.png -------------------------------------------------------------------------------- /example_12/doc/rrbot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_12/doc/rrbot.png -------------------------------------------------------------------------------- /example_2/doc/diffbot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_2/doc/diffbot.png -------------------------------------------------------------------------------- /example_15/doc/two_rrbot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_15/doc/two_rrbot.png -------------------------------------------------------------------------------- /example_11/doc/carlikebot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_11/doc/carlikebot.png -------------------------------------------------------------------------------- /example_5/doc/rrbot_wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_5/doc/rrbot_wrench.png -------------------------------------------------------------------------------- /example_9/doc/rrbot_gazebo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_9/doc/rrbot_gazebo.png -------------------------------------------------------------------------------- /example_7/doc/resources/robot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_7/doc/resources/robot.png -------------------------------------------------------------------------------- /example_7/doc/resources/link_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_7/doc/resources/link_1.png -------------------------------------------------------------------------------- /example_7/doc/resources/link_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_7/doc/resources/link_2.png -------------------------------------------------------------------------------- /Dockerfile/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . /opt/ros/"${ROS_DISTRO}"/setup.sh 4 | cd /home/ros2_ws 5 | . install/setup.sh 6 | exec "$@" 7 | -------------------------------------------------------------------------------- /example_16/doc/diffbot_velocities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_16/doc/diffbot_velocities.png -------------------------------------------------------------------------------- /example_7/doc/resources/trajectory.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_7/doc/resources/trajectory.gif -------------------------------------------------------------------------------- /example_7/doc/resources/link_2_roll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_7/doc/resources/link_2_roll.png -------------------------------------------------------------------------------- /example_7/doc/resources/link_2_aligned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_7/doc/resources/link_2_aligned.png -------------------------------------------------------------------------------- /example_7/doc/resources/link_2_roll_yaw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_7/doc/resources/link_2_roll_yaw.png -------------------------------------------------------------------------------- /example_7/doc/resources/link_2_roll_yaw_trans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/example_7/doc/resources/link_2_roll_yaw_trans.png -------------------------------------------------------------------------------- /ros2_control_demos/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | project(ros2_control_demos) 3 | 4 | find_package(ament_cmake REQUIRED) 5 | ament_package() 6 | -------------------------------------------------------------------------------- /example_5/bringup/config/wrench_transformer_params.yaml: -------------------------------------------------------------------------------- 1 | fts_wrench_transformer: 2 | ros__parameters: 3 | target_frames: 4 | - "base_link" 5 | - "link1" 6 | tf_timeout: 0.1 7 | -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/meshes/collision/link_0.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/ros2_control_demo_description/r6bot/meshes/collision/link_0.stl -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/meshes/collision/link_1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/ros2_control_demo_description/r6bot/meshes/collision/link_1.stl -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/meshes/collision/link_2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/ros2_control_demo_description/r6bot/meshes/collision/link_2.stl -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/meshes/collision/link_3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/ros2_control_demo_description/r6bot/meshes/collision/link_3.stl -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/meshes/collision/link_4.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/ros2_control_demo_description/r6bot/meshes/collision/link_4.stl -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/meshes/collision/link_5.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/ros2_control_demo_description/r6bot/meshes/collision/link_5.stl -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/meshes/collision/link_6.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-controls/ros2_control_demos/HEAD/ros2_control_demo_description/r6bot/meshes/collision/link_6.stl -------------------------------------------------------------------------------- /example_3/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_3 2 | 3 | *RRBot* with multiple interfaces. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_3/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_4/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_4 2 | 3 | *RRBot* with an integrated sensor. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_4/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_5/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_5 2 | 3 | *RRBot* with an externally connected sensor. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_5/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_8/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_8 2 | 3 | *RRBot* with an exposed transmission interface. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_8/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /doc/run_from_docker.rst: -------------------------------------------------------------------------------- 1 | .. note:: 2 | 3 | The commands below are given for a local installation of this repository and its dependencies as well as for running them from a docker container. For more information on the docker usage see :ref:`doc/ros2_control_demos/doc/index:using docker`. 4 | -------------------------------------------------------------------------------- /example_10/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_10 2 | 3 | *RRBot* - or ''Revolute-Revolute Manipulator Robot'' - with GPIO interfaces. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_10/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_13/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_13 2 | 3 | This example shows how to handle multiple robots in a single controller manager instance. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_13/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_6/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_6 2 | 3 | The example shows how to implement robot hardware with separate communication to each actuator. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_6/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_15/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_15 2 | 3 | This example shows how to integrate multiple robots under different controller manager instances. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_15/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_12/controllers/src/passthrough_controller_parameters.yaml: -------------------------------------------------------------------------------- 1 | passthrough_controller: 2 | interfaces: { 3 | type: string_array, 4 | default_value: [], 5 | description: "Names of the interfaces to be forwarded", 6 | validation: { 7 | not_empty<>: null, 8 | unique<>: null, 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /example_14/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_14 2 | 3 | The example shows how to implement robot hardware with actuators not providing states and with additional sensors. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_14/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_17/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_17 2 | 3 | This example shows how to publish diagnostics from a hardware component using the Executor passed from Controller Manager. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_17/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_12/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_12 2 | 3 | This example shows how to write a simple chainable controller, and how to integrate it properly to have a functional controller chaining. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_12/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /.github/workflows/jazzy-pre-commit.yml: -------------------------------------------------------------------------------- 1 | name: Pre-Commit - Jazzy 2 | 3 | on: 4 | workflow_dispatch: 5 | pull_request: 6 | branches: 7 | - jazzy 8 | push: 9 | branches: 10 | - jazzy 11 | 12 | jobs: 13 | pre-commit: 14 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-pre-commit.yml@master 15 | with: 16 | ros_distro: jazzy 17 | -------------------------------------------------------------------------------- /example_9/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_9 2 | 3 | This example demonstrates the switching between simulation and real hardware by means of the *RRBot* - or ''Revolute-Revolute Manipulator Robot''. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_9/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /.github/workflows/humble-pre-commit.yml: -------------------------------------------------------------------------------- 1 | name: Pre-Commit - Humble 2 | 3 | on: 4 | workflow_dispatch: 5 | pull_request: 6 | branches: 7 | - humble 8 | push: 9 | branches: 10 | - humble 11 | 12 | jobs: 13 | pre-commit: 14 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-pre-commit.yml@master 15 | with: 16 | ros_distro: humble 17 | -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | Language: Cpp 3 | BasedOnStyle: Google 4 | 5 | ColumnLimit: 100 6 | AccessModifierOffset: -2 7 | AlignAfterOpenBracket: AlwaysBreak 8 | BreakBeforeBraces: Allman 9 | ConstructorInitializerIndentWidth: 0 10 | ContinuationIndentWidth: 2 11 | DerivePointerAlignment: false 12 | PointerAlignment: Middle 13 | ReflowComments: true 14 | IncludeBlocks: Preserve 15 | ... 16 | -------------------------------------------------------------------------------- /example_15/bringup/config/rrbot_namespace_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | 6 | publish_topic: /position_commands 7 | 8 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 9 | pos1: [0.785, 0.785] 10 | pos2: [0.0, 0.0] 11 | pos3: [-0.785, -0.785] 12 | pos4: [0.0, 0.0] 13 | -------------------------------------------------------------------------------- /example_1/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: "/forward_position_controller/commands" 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_10/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: "/forward_position_controller/commands" 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_17/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: "/forward_position_controller/commands" 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_3/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: "/forward_position_controller/commands" 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_4/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: /forward_position_controller/commands 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_5/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: /forward_position_controller/commands 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_6/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: "/forward_position_controller/commands" 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_8/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: "/forward_position_controller/commands" 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_9/bringup/config/rrbot_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | wait_sec_between_publish: 5 5 | publish_topic: "/forward_position_controller/commands" 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | -------------------------------------------------------------------------------- /example_2/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_2 2 | 3 | *DiffBot*, or ''Differential Mobile Robot'', is a simple mobile base with differential drive. 4 | The robot is basically a box moving according to differential drive kinematics. 5 | 6 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_2/doc/userdoc.html). 7 | -------------------------------------------------------------------------------- /.github/workflows/reviewer_lottery.yml: -------------------------------------------------------------------------------- 1 | name: Reviewer lottery 2 | # pull_request_target takes the same events as pull_request, 3 | # but it runs on the base branch instead of the head branch. 4 | on: 5 | pull_request_target: 6 | types: [opened, ready_for_review, reopened] 7 | 8 | jobs: 9 | assign_reviewers: 10 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-reviewer-lottery.yml@master 11 | -------------------------------------------------------------------------------- /example_1/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_1 2 | 3 | *RRBot* - or ''Revolute-Revolute Manipulator Robot'' - a simple position controlled robot with one hardware interface. This example also demonstrates the switching between different controllers. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_1/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /example_1/bringup/config/rrbot_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | forward_position_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | joints: 13 | - joint1 14 | - joint2 15 | interface_name: position 16 | -------------------------------------------------------------------------------- /example_17/bringup/config/rrbot_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | forward_position_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | joints: 13 | - joint1 14 | - joint2 15 | interface_name: position 16 | -------------------------------------------------------------------------------- /example_8/bringup/config/rrbot_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | forward_position_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | joints: 13 | - joint1 14 | - joint2 15 | interface_name: position 16 | -------------------------------------------------------------------------------- /example_9/bringup/config/rrbot_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 1000 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | forward_position_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | joints: 13 | - joint1 14 | - joint2 15 | interface_name: position 16 | -------------------------------------------------------------------------------- /example_10/ros2_control_demo_example_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRbot example with GPIO interfaces. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_4/ros2_control_demo_example_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRbot example with an integrated sensor. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_6/bringup/config/rrbot_modular_actuators.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | forward_position_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | joints: 13 | - joint1 14 | - joint2 15 | interface_name: position 16 | -------------------------------------------------------------------------------- /example_12/passthrough_controller.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | A simple demo of chainable controllers. It passes commands through without change. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_16/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_16 2 | 3 | *DiffBot*, or ''Differential Mobile Robot'', is a simple mobile base with differential drive. This example shows how to create chained controllers using diff_drive_controller and pid_controllers to control a differential drive robot. 4 | 5 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_16/doc/userdoc.html). 6 | -------------------------------------------------------------------------------- /.github/workflows/update-pre-commit.yml: -------------------------------------------------------------------------------- 1 | name: Auto Update pre-commit 2 | # Update pre-commit config and create PR if changes are detected 3 | # author: Christoph Fröhlich 4 | 5 | on: 6 | workflow_dispatch: 7 | schedule: 8 | - cron: '0 0 1 * *' # Runs at 00:00, on day 1 of the month 9 | 10 | jobs: 11 | auto_update_and_create_pr: 12 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-update-pre-commit.yml@master 13 | -------------------------------------------------------------------------------- /example_1/ros2_control_demo_example_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRbot example using a system hardware interface-type. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_6/ros2_control_demo_example_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control robot with 2 separate actuators which can be controlled by 2 different endpoints. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_9/ros2_control_demo_example_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRbot example using a system hardware interface-type. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_12/ros2_control_demo_example_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRbot example using a system hardware interface-type. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_3/ros2_control_demo_example_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRbot example using a multi-interface hardware interface-type. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_8/ros2_control_demo_example_8.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control minimal robot protocol with transmissions. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_14/bringup/config/rrbot_modular_actuators_without_feedback_sensors_for_position_feedback.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | forward_velocity_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | joints: 13 | - joint1 14 | - joint2 15 | interface_name: velocity 16 | -------------------------------------------------------------------------------- /example_17/ros2_control_demo_example_17.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRbot example using a system hardware interface-type what publishes diagnostics. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.github/workflows/rolling-pre-commit.yml: -------------------------------------------------------------------------------- 1 | name: Pre-Commit - Rolling 2 | 3 | on: 4 | workflow_dispatch: 5 | pull_request: 6 | branches: 7 | - master 8 | push: 9 | branches: 10 | - master 11 | 12 | jobs: 13 | pre-commit: 14 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-pre-commit.yml@master 15 | strategy: 16 | fail-fast: false 17 | matrix: 18 | ROS_DISTRO: [rolling, kilted] 19 | with: 20 | ros_distro: ${{ matrix.ROS_DISTRO }} 21 | -------------------------------------------------------------------------------- /example_11/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_11 2 | 3 | *CarlikeBot*, or ''Carlike Mobile Robot'', is a simple mobile base with bicycle drive. 4 | The robot has two wheels in the front that steer the robot and two wheels in the back that power the robot forward and backwards. However, since each pair of wheels (steering and traction) are controlled by one interface, a bicycle steering model is used. 5 | 6 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_11/doc/userdoc.html). 7 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## General 2 | Please consider the guidelines from [CONTRIBUTING.md](https://github.com/ros-controls/.github/blob/master/CONTRIBUTING.md) before you open a pull request. 3 | 4 | ## New Examples 5 | If you propose adding a new example, make sure that your new example has: 6 | 7 | - [ ] The correct folder structure (described in the main [README.md](README.md)) 8 | - [ ] Example has *doc/README.rst* with description 9 | - [ ] Detailed commands how to run an example 10 | - [ ] Output examples of CLI commands 11 | - [ ] Screenshots with expected visualizations (if applicable) 12 | -------------------------------------------------------------------------------- /example_2/ros2_control_demo_example_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control DiffBot example using a system hardware interface-type. It uses velocity command and position state interface. The example is the starting point to implement a hardware interface for differential-drive mobile robots. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_16/ros2_control_demo_example_16.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control DiffBot example using a system hardware interface-type. It uses velocity command and position state interface. The example is the starting point to implement a hardware interface for differential-drive mobile robots. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_7/README.md: -------------------------------------------------------------------------------- 1 | # ros2_control_demo_example_7 2 | 3 | A full tutorial for a 6 DOF robot for intermediate ROS 2 users. 4 | 5 | It consists of the following: 6 | * bringup: launch files and ros2_controller configuration 7 | * controller: a controller for the 6-DOF robot 8 | * description: the 6-DOF robot description 9 | * hardware: ros2_control hardware interface 10 | * reference_generator: A KDL-based reference generator for a fixed trajectory 11 | 12 | Find the documentation in [doc/userdoc.rst](doc/userdoc.rst) or on [control.ros.org](https://control.ros.org/master/doc/ros2_control_demos/example_7/doc/userdoc.html). 13 | -------------------------------------------------------------------------------- /example_7/bringup/config/r6bot_controller.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | r6bot_controller: 10 | ros__parameters: 11 | type: ros2_control_demo_example_7/RobotController 12 | joints: 13 | - joint_1 14 | - joint_2 15 | - joint_3 16 | - joint_4 17 | - joint_5 18 | - joint_6 19 | 20 | command_interfaces: 21 | - position 22 | - velocity 23 | 24 | state_interfaces: 25 | - position 26 | - velocity 27 | -------------------------------------------------------------------------------- /example_7/description/urdf/r6bot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /example_5/bringup/config/rrbot_with_external_sensor_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 100 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | forward_position_controller: 9 | ros__parameters: 10 | type: forward_command_controller/ForwardCommandController 11 | joints: 12 | - joint1 13 | - joint2 14 | interface_name: position 15 | 16 | fts_broadcaster: 17 | ros__parameters: 18 | type: force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster 19 | sensor_name: tcp_fts_sensor 20 | frame_id: tool_link 21 | -------------------------------------------------------------------------------- /example_1/bringup/config/rrbot_joint_trajectory_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_joint_trajectory_controller: 2 | ros__parameters: 3 | 4 | controller_name: "joint_trajectory_position_controller" 5 | wait_sec_between_publish: 6 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: 9 | positions: [0.785, 0.785] 10 | pos2: 11 | positions: [0.0, 0.0] 12 | pos3: 13 | positions: [-0.785, -0.785] 14 | pos4: 15 | positions: [0.0, 0.0] 16 | 17 | joints: 18 | - joint1 19 | - joint2 20 | 21 | check_starting_point: false 22 | starting_point_limits: 23 | joint1: [-0.1,0.1] 24 | joint2: [-0.1,0.1] 25 | -------------------------------------------------------------------------------- /example_15/bringup/config/rrbot_namespace_joint_trajectory_publisher.yaml: -------------------------------------------------------------------------------- 1 | publisher_joint_trajectory_controller: 2 | ros__parameters: 3 | 4 | controller_name: "rrbot/position_trajectory_controller" 5 | wait_sec_between_publish: 6 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: 9 | positions: [0.785, 0.785] 10 | pos2: 11 | positions: [0.0, 0.0] 12 | pos3: 13 | positions: [-0.785, -0.785] 14 | pos4: 15 | positions: [0.0, 0.0] 16 | 17 | joints: 18 | - joint1 19 | - joint2 20 | 21 | check_starting_point: false 22 | starting_point_limits: 23 | joint1: [-0.1,0.1] 24 | joint2: [-0.1,0.1] 25 | -------------------------------------------------------------------------------- /example_1/bringup/config/rrbot_jtc.yaml: -------------------------------------------------------------------------------- 1 | joint_trajectory_position_controller: 2 | ros__parameters: 3 | type: joint_trajectory_controller/JointTrajectoryController 4 | 5 | joints: 6 | - joint1 7 | - joint2 8 | 9 | command_interfaces: 10 | - position 11 | 12 | state_interfaces: 13 | - position 14 | 15 | action_monitor_rate: 20.0 # Defaults to 20 16 | 17 | allow_partial_joints_goal: false # Defaults to false 18 | interpolate_from_desired_state: true 19 | allow_integration_in_goal_trajectories: true 20 | constraints: 21 | stopped_velocity_tolerance: 0.01 # Defaults to 0.01 22 | goal_time: 0.0 # Defaults to 0.0 (start immediately) 23 | -------------------------------------------------------------------------------- /example_11/ros2_control_demo_example_11.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control CarlikeBot example using a system hardware interface-type. It uses velocity and position command and state interface for the drive motor and position command and state interface for the steering. The example is the starting point to implement a hardware interface for Ackermann and bicycle drive robots. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example_4/bringup/config/rrbot_with_sensor_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 100 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | forward_position_controller: 9 | ros__parameters: 10 | type: forward_command_controller/ForwardCommandController 11 | joints: 12 | - joint1 13 | - joint2 14 | interface_name: position 15 | 16 | fts_broadcaster: 17 | ros__parameters: 18 | type: force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster 19 | interface_names.force.x: tcp_fts_sensor/force.x 20 | interface_names.torque.z: tcp_fts_sensor/torque.z 21 | frame_id: tool_link 22 | -------------------------------------------------------------------------------- /example_7/ros2_control_demo_example_7.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | Robot hardware plugin for 6 dof robot tutorial. 7 | 8 | 9 | 12 | 13 | Robot controller plugin for 6 dof robot tutorial. 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /ros2_control_demo_description/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | project(ros2_control_demo_description) 3 | 4 | find_package(ament_cmake REQUIRED) 5 | 6 | install( 7 | DIRECTORY rrbot/urdf rrbot/rviz 8 | DESTINATION share/${PROJECT_NAME}/rrbot 9 | ) 10 | 11 | install( 12 | DIRECTORY diffbot/urdf diffbot/rviz 13 | DESTINATION share/${PROJECT_NAME}/diffbot 14 | ) 15 | 16 | install( 17 | DIRECTORY carlikebot/urdf carlikebot/rviz 18 | DESTINATION share/${PROJECT_NAME}/carlikebot 19 | ) 20 | 21 | install( 22 | DIRECTORY r3bot/urdf 23 | DESTINATION share/${PROJECT_NAME}/r3bot 24 | ) 25 | 26 | install( 27 | DIRECTORY r6bot/meshes r6bot/srdf r6bot/urdf r6bot/rviz 28 | DESTINATION share/${PROJECT_NAME}/r6bot 29 | ) 30 | 31 | ament_package() 32 | -------------------------------------------------------------------------------- /ros2_control_demo_description/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_description 5 | 0.0.0 6 | Package with URDF and description files of test robots. 7 | 8 | Denis Štogl 9 | Christoph Fröhlich 10 | 11 | Apache-2.0 12 | 13 | ament_cmake 14 | 15 | rviz2 16 | 17 | 18 | ament_cmake 19 | 20 | 21 | -------------------------------------------------------------------------------- /example_15/bringup/config/multi_controller_manager_forward_position_publisher.yaml: -------------------------------------------------------------------------------- 1 | /rrbot_1/publisher_forward_position_controller: 2 | ros__parameters: 3 | 4 | 5 | publish_topic: "forward_position_controller/commands" 6 | wait_sec_between_publish: 5 7 | 8 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 9 | pos1: [0.785, 0.785] 10 | pos2: [0.0, 0.0] 11 | pos3: [-0.785, -0.785] 12 | pos4: [0.0, 0.0] 13 | 14 | 15 | /rrbot_2/publisher_forward_position_controller: 16 | ros__parameters: 17 | 18 | publish_topic: "forward_position_controller/commands" 19 | wait_sec_between_publish: 5 20 | 21 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 22 | pos1: [-0.785, 0.0] 23 | pos2: [0.0, -0.785] 24 | pos3: [+0.785, -1.57] 25 | pos4: [+1.57, -0.785] 26 | -------------------------------------------------------------------------------- /.github/workflows/jazzy-check-docs.yml: -------------------------------------------------------------------------------- 1 | name: Jazzy Check Docs 2 | 3 | on: 4 | workflow_dispatch: 5 | pull_request: 6 | branches: 7 | - jazzy 8 | paths: 9 | - '**.rst' 10 | - '**.md' 11 | - '**.jpg' 12 | - '**.jpeg' 13 | - '**.png' 14 | - '**.svg' 15 | - '**.yml' 16 | - '**.yaml' 17 | - '!.github/**' # exclude yaml files in .github directory 18 | - '.github/workflows/jazzy-check-docs.yml' 19 | 20 | concurrency: 21 | group: ${{ github.workflow }}-${{ github.ref }} 22 | cancel-in-progress: true 23 | 24 | jobs: 25 | check-docs: 26 | name: Check Docs 27 | uses: ros-controls/control.ros.org/.github/workflows/reusable-sphinx-check-single-version.yml@jazzy 28 | with: 29 | ROS2_CONTROL_DEMOS_PR: ${{ github.ref }} 30 | -------------------------------------------------------------------------------- /.github/workflows/humble-check-docs.yml: -------------------------------------------------------------------------------- 1 | name: Humble Check Docs 2 | 3 | on: 4 | workflow_dispatch: 5 | pull_request: 6 | branches: 7 | - humble 8 | paths: 9 | - '**.rst' 10 | - '**.md' 11 | - '**.jpg' 12 | - '**.jpeg' 13 | - '**.png' 14 | - '**.svg' 15 | - '**.yml' 16 | - '**.yaml' 17 | - '!.github/**' # exclude yaml files in .github directory 18 | - '.github/workflows/humble-check-docs.yml' 19 | 20 | concurrency: 21 | group: ${{ github.workflow }}-${{ github.ref }} 22 | cancel-in-progress: true 23 | 24 | jobs: 25 | check-docs: 26 | name: Check Docs 27 | uses: ros-controls/control.ros.org/.github/workflows/reusable-sphinx-check-single-version.yml@humble 28 | with: 29 | ROS2_CONTROL_DEMOS_PR: ${{ github.ref }} 30 | -------------------------------------------------------------------------------- /example_10/bringup/config/rrbot_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | forward_position_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | joints: 13 | - joint1 14 | - joint2 15 | interface_name: position 16 | 17 | gpio_controller: 18 | ros__parameters: 19 | type: gpio_controllers/GpioCommandController 20 | gpios: 21 | - flange_analog_IOs 22 | - flange_vacuum 23 | command_interfaces: 24 | flange_analog_IOs: 25 | - interfaces: 26 | - analog_output1 27 | flange_vacuum: 28 | - interfaces: 29 | - vacuum 30 | -------------------------------------------------------------------------------- /.github/workflows/rolling-check-docs.yml: -------------------------------------------------------------------------------- 1 | name: Rolling Check Docs 2 | 3 | on: 4 | workflow_dispatch: 5 | pull_request: 6 | branches: 7 | - master 8 | paths: 9 | - '**.rst' 10 | - '**.md' 11 | - '**.jpg' 12 | - '**.jpeg' 13 | - '**.png' 14 | - '**.svg' 15 | - '**.yml' 16 | - '**.yaml' 17 | - '!.github/**' # exclude yaml files in .github directory 18 | - '.github/workflows/rolling-check-docs.yml' 19 | 20 | concurrency: 21 | group: ${{ github.workflow }}-${{ github.ref }} 22 | cancel-in-progress: true 23 | 24 | jobs: 25 | check-docs: 26 | name: Check Docs 27 | uses: ros-controls/control.ros.org/.github/workflows/reusable-sphinx-check-single-version.yml@rolling 28 | with: 29 | ROS2_CONTROL_DEMOS_PR: ${{ github.ref }} 30 | -------------------------------------------------------------------------------- /example_14/ros2_control_demo_example_14.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRBot's actuators without feedback that can be controlled by different endpoints. 7 | 8 | 9 | 12 | 13 | The ros2_control RRBot's position sensors that can be used with actuators without feedback. 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /example_5/ros2_control_demo_example_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | The ros2_control RRBot example using external Force Torque Sensor where it is separate from the RRBot. 7 | 8 | 9 | 12 | 13 | The ros2_control RRbot example using a system hardware interface-type. 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /example_11/description/urdf/carlikebot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /example_11/bringup/config/carlikebot_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | bicycle_steering_controller: 10 | ros__parameters: 11 | type: bicycle_steering_controller/BicycleSteeringController 12 | 13 | traction_joints_names: ['virtual_rear_wheel_joint'] 14 | steering_joints_names: ['virtual_front_wheel_joint'] 15 | wheelbase: 0.325 16 | traction_wheel_radius: 0.05 17 | 18 | reference_timeout: 2.0 19 | 20 | open_loop: false 21 | position_feedback: false 22 | velocity_rolling_window_size: 10 23 | base_frame_id: base_link 24 | odom_frame_id: odom 25 | enable_odom_tf: true 26 | twist_covariance_diagonal: [0.0, 7.0, 14.0, 21.0, 28.0, 35.0] 27 | pose_covariance_diagonal: [0.0, 7.0, 14.0, 21.0, 28.0, 35.0] 28 | -------------------------------------------------------------------------------- /example_16/description/urdf/diffbot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /example_2/description/urdf/diffbot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /ros2_control_demos.humble.repos: -------------------------------------------------------------------------------- 1 | repositories: 2 | control_msgs: 3 | type: git 4 | url: https://github.com/ros-controls/control_msgs.git 5 | version: humble 6 | realtime_tools: 7 | type: git 8 | url: https://github.com/ros-controls/realtime_tools.git 9 | version: humble 10 | ros2_control: 11 | type: git 12 | url: https://github.com/ros-controls/ros2_control.git 13 | version: humble 14 | ros2_controllers: 15 | type: git 16 | url: https://github.com/ros-controls/ros2_controllers.git 17 | version: humble 18 | gz_ros2_control: 19 | type: git 20 | url: https://github.com/ros-controls/gz_ros2_control.git 21 | version: humble 22 | control_toolbox: 23 | type: git 24 | url: https://github.com/ros-controls/control_toolbox.git 25 | version: humble 26 | kinematics_interface: 27 | type: git 28 | url: https://github.com/ros-controls/kinematics_interface.git 29 | version: humble 30 | -------------------------------------------------------------------------------- /.github/workflows/jazzy-docker-build.yml: -------------------------------------------------------------------------------- 1 | name: Build Jazzy Dockerfile 2 | # description: builds the dockerfile contained within the repo 3 | 4 | on: 5 | pull_request: &event 6 | branches: 7 | - jazzy 8 | paths: 9 | - '**.hpp' 10 | - '**.cpp' 11 | - Dockerfile/** 12 | - '.github/workflows/jazzy-docker-build.yml' 13 | - '**/package.xml' 14 | - '**/CMakeLists.txt' 15 | - '**.xacro' 16 | - '**.py' 17 | - '**.yaml' 18 | - 'ros2_control_demos.jazzy.repos' 19 | push: *event 20 | schedule: 21 | # Run every morning to detect broken dependencies 22 | - cron: '40 1 * * MON-FRI' 23 | 24 | 25 | jobs: 26 | build: 27 | runs-on: ubuntu-latest 28 | steps: 29 | - uses: actions/checkout@v6 30 | with: 31 | ref: jazzy 32 | - name: Build the Docker image 33 | run: docker build --file Dockerfile/Dockerfile --tag ros2_control_demos_jazzy --build-arg ROS_DISTRO=jazzy . 34 | -------------------------------------------------------------------------------- /.github/workflows/humble-docker-build.yml: -------------------------------------------------------------------------------- 1 | name: Build Humble Dockerfile 2 | # description: builds the dockerfile contained within the repo 3 | 4 | on: 5 | pull_request: &event 6 | branches: 7 | - humble 8 | paths: 9 | - '**.hpp' 10 | - '**.cpp' 11 | - Dockerfile/** 12 | - '.github/workflows/humble-docker-build.yml' 13 | - '**/package.xml' 14 | - '**/CMakeLists.txt' 15 | - '**.xacro' 16 | - '**.py' 17 | - '**.yaml' 18 | - 'ros2_control_demos.humble.repos' 19 | push: *event 20 | schedule: 21 | # Run every morning to detect broken dependencies 22 | - cron: '40 1 * * MON-FRI' 23 | 24 | 25 | jobs: 26 | build: 27 | runs-on: ubuntu-latest 28 | steps: 29 | - uses: actions/checkout@v6 30 | with: 31 | ref: humble 32 | - name: Build the Docker image 33 | run: docker build --file Dockerfile/Dockerfile --tag ros2_control_demos_humble --build-arg ROS_DISTRO=humble . 34 | -------------------------------------------------------------------------------- /.github/workflows/jazzy-semi-binary-build.yml: -------------------------------------------------------------------------------- 1 | name: Jazzy Semi-Binary Build 2 | # description: 'Build & test that compiles the main dependencies from source.' 3 | 4 | on: 5 | pull_request: &event 6 | branches: 7 | - jazzy 8 | paths: 9 | - '**.hpp' 10 | - '**.cpp' 11 | - '.github/workflows/jazzy-semi-binary-build.yml' 12 | - '**/package.xml' 13 | - '**/CMakeLists.txt' 14 | - '**.xacro' 15 | - '**.py' 16 | - '**.yaml' 17 | - 'ros2_control_demos.jazzy.repos' 18 | - '**.xml' 19 | push: *event 20 | schedule: 21 | # Run every morning to detect flakiness and broken dependencies 22 | - cron: '33 1 * * MON-FRI' 23 | 24 | jobs: 25 | semi_binary: 26 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-industrial-ci-with-cache.yml@master 27 | with: 28 | ros_distro: jazzy 29 | ros_repo: testing 30 | upstream_workspace: ros2_control_demos.jazzy.repos 31 | ref_for_scheduled_build: jazzy 32 | -------------------------------------------------------------------------------- /.github/workflows/humble-semi-binary-build.yml: -------------------------------------------------------------------------------- 1 | name: Humble Semi-Binary Build 2 | # description: 'Build & test that compiles the main dependencies from source.' 3 | 4 | on: 5 | pull_request: &event 6 | branches: 7 | - humble 8 | paths: 9 | - '**.hpp' 10 | - '**.cpp' 11 | - '.github/workflows/humble-semi-binary-build.yml' 12 | - '**/package.xml' 13 | - '**/CMakeLists.txt' 14 | - '**.xacro' 15 | - '**.py' 16 | - '**.yaml' 17 | - 'ros2_control_demos.humble.repos' 18 | - '**.xml' 19 | push: *event 20 | schedule: 21 | # Run every morning to detect flakiness and broken dependencies 22 | - cron: '33 1 * * MON-FRI' 23 | 24 | jobs: 25 | semi_binary: 26 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-industrial-ci-with-cache.yml@master 27 | with: 28 | ros_distro: humble 29 | ros_repo: testing 30 | upstream_workspace: ros2_control_demos.humble.repos 31 | ref_for_scheduled_build: humble 32 | -------------------------------------------------------------------------------- /example_11/description/ros2_control/carlikebot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ros2_control_demo_example_11/CarlikeBotSystemHardware 9 | 0 10 | 3.0 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/urdf/inc/create_link.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "github-actions" 9 | # Workflow files stored in the 10 | # default location of `.github/workflows` 11 | directory: "/" 12 | schedule: 13 | interval: "weekly" 14 | - package-ecosystem: "github-actions" 15 | # Workflow files stored in the 16 | # default location of `.github/workflows` 17 | directory: "/" 18 | schedule: 19 | interval: "weekly" 20 | target-branch: "jazzy" 21 | - package-ecosystem: "github-actions" 22 | # Workflow files stored in the 23 | # default location of `.github/workflows` 24 | directory: "/" 25 | schedule: 26 | interval: "weekly" 27 | target-branch: "humble" 28 | -------------------------------------------------------------------------------- /ros2_control_demo_description/diffbot/urdf/diffbot.materials.xacro: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /ros2_control_demos.jazzy.repos: -------------------------------------------------------------------------------- 1 | repositories: 2 | control_msgs: 3 | type: git 4 | url: https://github.com/ros-controls/control_msgs.git 5 | version: jazzy 6 | realtime_tools: 7 | type: git 8 | url: https://github.com/ros-controls/realtime_tools.git 9 | version: jazzy 10 | ros2_control: 11 | type: git 12 | url: https://github.com/ros-controls/ros2_control.git 13 | version: jazzy 14 | ros2_controllers: 15 | type: git 16 | url: https://github.com/ros-controls/ros2_controllers.git 17 | version: jazzy 18 | gz_ros2_control: 19 | type: git 20 | url: https://github.com/ros-controls/gz_ros2_control.git 21 | version: jazzy 22 | control_toolbox: 23 | type: git 24 | url: https://github.com/ros-controls/control_toolbox.git 25 | version: jazzy 26 | ros2_control_cmake: 27 | type: git 28 | url: https://github.com/ros-controls/ros2_control_cmake.git 29 | version: master 30 | kinematics_interface: 31 | type: git 32 | url: https://github.com/ros-controls/kinematics_interface.git 33 | version: jazzy 34 | -------------------------------------------------------------------------------- /ros2_control_demos.kilted.repos: -------------------------------------------------------------------------------- 1 | repositories: 2 | control_msgs: 3 | type: git 4 | url: https://github.com/ros-controls/control_msgs.git 5 | version: master 6 | realtime_tools: 7 | type: git 8 | url: https://github.com/ros-controls/realtime_tools.git 9 | version: kilted 10 | ros2_control: 11 | type: git 12 | url: https://github.com/ros-controls/ros2_control.git 13 | version: kilted 14 | ros2_controllers: 15 | type: git 16 | url: https://github.com/ros-controls/ros2_controllers.git 17 | version: kilted 18 | gz_ros2_control: 19 | type: git 20 | url: https://github.com/ros-controls/gz_ros2_control.git 21 | version: rolling 22 | control_toolbox: 23 | type: git 24 | url: https://github.com/ros-controls/control_toolbox.git 25 | version: kilted 26 | ros2_control_cmake: 27 | type: git 28 | url: https://github.com/ros-controls/ros2_control_cmake.git 29 | version: master 30 | kinematics_interface: 31 | type: git 32 | url: https://github.com/ros-controls/kinematics_interface.git 33 | version: master 34 | -------------------------------------------------------------------------------- /ros2_control_demos.rolling.repos: -------------------------------------------------------------------------------- 1 | repositories: 2 | control_msgs: 3 | type: git 4 | url: https://github.com/ros-controls/control_msgs.git 5 | version: master 6 | realtime_tools: 7 | type: git 8 | url: https://github.com/ros-controls/realtime_tools.git 9 | version: master 10 | ros2_control: 11 | type: git 12 | url: https://github.com/ros-controls/ros2_control.git 13 | version: master 14 | ros2_controllers: 15 | type: git 16 | url: https://github.com/ros-controls/ros2_controllers.git 17 | version: master 18 | gz_ros2_control: 19 | type: git 20 | url: https://github.com/ros-controls/gz_ros2_control.git 21 | version: rolling 22 | control_toolbox: 23 | type: git 24 | url: https://github.com/ros-controls/control_toolbox.git 25 | version: master 26 | ros2_control_cmake: 27 | type: git 28 | url: https://github.com/ros-controls/ros2_control_cmake.git 29 | version: master 30 | kinematics_interface: 31 | type: git 32 | url: https://github.com/ros-controls/kinematics_interface.git 33 | version: master 34 | -------------------------------------------------------------------------------- /example_13/bringup/config/three_robots_position_command_publishers.yaml: -------------------------------------------------------------------------------- 1 | rrbot_position_command_publisher: 2 | ros__parameters: 3 | 4 | publish_topic: "/rrbot_position_controller/commands" 5 | wait_sec_between_publish: 5 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: [0.785, 0.785] 9 | pos2: [0.0, 0.0] 10 | pos3: [-0.785, -0.785] 11 | pos4: [0.0, 0.0] 12 | 13 | 14 | rrbot_with_sensor_position_command_publisher: 15 | ros__parameters: 16 | 17 | publish_topic: "/rrbot_with_sensor_position_controller/commands" 18 | wait_sec_between_publish: 4 19 | 20 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 21 | pos1: [0.785, 0.785] 22 | pos2: [0.0, 0.0] 23 | pos3: [-0.785, -0.785] 24 | pos4: [0.0, 0.0] 25 | 26 | 27 | threedofbot_position_command_publisher: 28 | ros__parameters: 29 | 30 | publish_topic: "/threedofbot_position_controller/commands" 31 | wait_sec_between_publish: 3 32 | 33 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 34 | pos1: [0.785, 0.785, 0.785] 35 | pos2: [0.0, 0.0, 0.0] 36 | pos3: [-0.785, -0.785, -0.785] 37 | pos4: [0.0, 0.0, 0.0] 38 | -------------------------------------------------------------------------------- /example_12/description/urdf/rrbot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | -------------------------------------------------------------------------------- /example_1/description/urdf/rrbot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /example_17/description/urdf/rrbot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ros2_control_demo_description/rrbot/urdf/rrbot.materials.xacro: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /.github/workflows/jazzy-binary-build.yml: -------------------------------------------------------------------------------- 1 | name: Jazzy Binary Build 2 | # author: Denis Štogl 3 | # description: 'Build & test all dependencies from released (binary) packages.' 4 | 5 | on: 6 | pull_request: &event 7 | branches: 8 | - jazzy 9 | paths: 10 | - '**.hpp' 11 | - '**.cpp' 12 | - '.github/workflows/jazzy-binary-build.yml' 13 | - '**/package.xml' 14 | - '**/CMakeLists.txt' 15 | - '**.xacro' 16 | - '**.py' 17 | - '**.yaml' 18 | - 'ros2_control_demos-not-released.jazzy.repos' 19 | - '**.xml' 20 | push: *event 21 | schedule: 22 | # Run every morning to detect flakiness and broken dependencies 23 | - cron: '03 1 * * MON-FRI' 24 | 25 | jobs: 26 | binary: 27 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-industrial-ci-with-cache.yml@master 28 | strategy: 29 | fail-fast: false 30 | matrix: 31 | ROS_REPO: [main, testing] 32 | with: 33 | ros_distro: jazzy 34 | ros_repo: ${{ matrix.ROS_REPO }} 35 | upstream_workspace: ros2_control_demos-not-released.jazzy.repos 36 | ref_for_scheduled_build: jazzy 37 | -------------------------------------------------------------------------------- /ros2_control_demo_description/carlikebot/urdf/carlikebot.materials.xacro: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /.github/workflows/rolling-docker-build.yaml: -------------------------------------------------------------------------------- 1 | name: Build Rolling Dockerfile 2 | # description: builds the dockerfile contained within the repo 3 | 4 | on: 5 | pull_request: &event 6 | branches: 7 | - master 8 | paths: 9 | - '**.hpp' 10 | - '**.cpp' 11 | - Dockerfile/** 12 | - '.github/workflows/rolling-docker-build.yml' 13 | - '**/package.xml' 14 | - '**/CMakeLists.txt' 15 | - '**.xacro' 16 | - '**.py' 17 | - '**.yaml' 18 | - 'ros2_control_demos.rolling.repos' 19 | - 'ros2_control_demos.kilted.repos' 20 | - '**.xml' 21 | push: *event 22 | schedule: 23 | # Run every morning to detect broken dependencies 24 | - cron: '50 1 * * MON-FRI' 25 | 26 | 27 | jobs: 28 | build: 29 | runs-on: ubuntu-latest 30 | strategy: 31 | fail-fast: false 32 | matrix: 33 | ROS_DISTRO: [rolling, kilted] 34 | steps: 35 | - uses: actions/checkout@v6 36 | with: 37 | ref: master 38 | - name: Build the Docker image 39 | run: docker build --file Dockerfile/Dockerfile --tag ros2_control_demos_${{ matrix.ROS_DISTRO }} --build-arg ROS_DISTRO=${{ matrix.ROS_DISTRO }} . 40 | -------------------------------------------------------------------------------- /example_12/bringup/config/rrbot_chained_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | # First-level controllers 10 | joint1_position_controller: 11 | ros__parameters: 12 | type: passthrough_controller/PassthroughController 13 | interfaces: ["joint1/position"] 14 | 15 | joint2_position_controller: 16 | ros__parameters: 17 | type: passthrough_controller/PassthroughController 18 | interfaces: ["joint2/position"] 19 | 20 | # Second-level controller 21 | position_controller: 22 | ros__parameters: 23 | type: passthrough_controller/PassthroughController 24 | interfaces: 25 | - joint1_position_controller/joint1/position 26 | - joint2_position_controller/joint2/position 27 | 28 | # Third-level controllers 29 | forward_position_controller: 30 | ros__parameters: 31 | type: forward_command_controller/ForwardCommandController 32 | joints: 33 | - position_controller/joint1_position_controller/joint1 34 | - position_controller/joint2_position_controller/joint2 35 | interface_name: position 36 | -------------------------------------------------------------------------------- /example_15/bringup/config/rrbot_namespace_controllers.yaml: -------------------------------------------------------------------------------- 1 | /rrbot/controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | /rrbot/forward_position_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | joints: 13 | - joint1 14 | - joint2 15 | interface_name: position 16 | 17 | 18 | /rrbot/position_trajectory_controller: 19 | ros__parameters: 20 | type: joint_trajectory_controller/JointTrajectoryController 21 | joints: 22 | - joint1 23 | - joint2 24 | 25 | command_interfaces: 26 | - position 27 | 28 | state_interfaces: 29 | - position 30 | 31 | state_publish_rate: 200.0 # Defaults to 50 32 | action_monitor_rate: 20.0 # Defaults to 20 33 | 34 | allow_partial_joints_goal: false # Defaults to false 35 | interpolate_from_desired_state: true 36 | allow_integration_in_goal_trajectories: true 37 | constraints: 38 | stopped_velocity_tolerance: 0.01 # Defaults to 0.01 39 | goal_time: 0.0 # Defaults to 0.0 (start immediately) 40 | -------------------------------------------------------------------------------- /.github/workflows/humble-binary-build.yml: -------------------------------------------------------------------------------- 1 | name: Humble Binary Build 2 | # description: 'Build & test all dependencies from released (binary) packages.' 3 | 4 | on: 5 | pull_request: &event 6 | branches: 7 | - humble 8 | paths: 9 | - '**.hpp' 10 | - '**.cpp' 11 | - '.github/workflows/humble-binary-build.yml' 12 | - '**/package.xml' 13 | - '**/CMakeLists.txt' 14 | - '**.xacro' 15 | - '**.py' 16 | - '**.yaml' 17 | - 'ros2_control_demos-not-released.humble.repos' 18 | - '**.xml' 19 | push: *event 20 | schedule: 21 | # Run every morning to detect flakiness and broken dependencies 22 | - cron: '03 1 * * MON-FRI' 23 | 24 | jobs: 25 | binary: 26 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-industrial-ci-with-cache.yml@master 27 | strategy: 28 | fail-fast: false 29 | matrix: 30 | ROS_DISTRO: [humble] 31 | ROS_REPO: [main, testing] 32 | with: 33 | ros_distro: ${{ matrix.ROS_DISTRO }} 34 | ros_repo: ${{ matrix.ROS_REPO }} 35 | upstream_workspace: ros2_control_demos-not-released.${{ matrix.ROS_DISTRO }}.repos 36 | ref_for_scheduled_build: humble 37 | -------------------------------------------------------------------------------- /.github/workflows/rolling-semi-binary-build.yml: -------------------------------------------------------------------------------- 1 | name: Rolling Semi-Binary Build 2 | # description: 'Build & test that compiles the main dependencies from source.' 3 | 4 | on: 5 | pull_request: &event 6 | branches: 7 | - master 8 | paths: 9 | - '**.hpp' 10 | - '**.cpp' 11 | - '.github/workflows/rolling-semi-binary-build.yml' 12 | - '**/package.xml' 13 | - '**/CMakeLists.txt' 14 | - '**.xacro' 15 | - '**.py' 16 | - '**.yaml' 17 | - 'ros2_control_demos.rolling.repos' 18 | - 'ros2_control_demos.kilted.repos' 19 | - '**.xml' 20 | push: *event 21 | schedule: 22 | # Run every morning to detect flakiness and broken dependencies 23 | - cron: '33 1 * * MON-FRI' 24 | 25 | jobs: 26 | semi_binary: 27 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-industrial-ci-with-cache.yml@master 28 | strategy: 29 | fail-fast: false 30 | matrix: 31 | ROS_DISTRO: [rolling, kilted] 32 | with: 33 | ros_distro: ${{ matrix.ROS_DISTRO }} 34 | ros_repo: testing 35 | upstream_workspace: ros2_control_demos.${{ matrix.ROS_DISTRO }}.repos 36 | ref_for_scheduled_build: master 37 | -------------------------------------------------------------------------------- /example_1/description/ros2_control/rrbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ros2_control_demo_example_1/RRBotSystemPositionOnlyHardware 9 | 0 10 | 3.0 11 | 100 12 | 13 | 14 | 15 | 16 | -1 17 | 1 18 | 19 | 20 | 21 | 22 | 23 | -1 24 | 1 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /example_3/bringup/config/rrbot_multi_interface_forward_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 100 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | forward_position_controller: 9 | ros__parameters: 10 | type: position_controllers/JointGroupPositionController 11 | joints: 12 | - joint1 13 | - joint2 14 | 15 | forward_velocity_controller: 16 | ros__parameters: 17 | type: velocity_controllers/JointGroupVelocityController 18 | joints: 19 | - joint1 20 | - joint2 21 | 22 | forward_acceleration_controller: 23 | ros__parameters: 24 | type: forward_command_controller/ForwardCommandController 25 | joints: 26 | - joint1 27 | - joint2 28 | interface_name: acceleration 29 | 30 | forward_illegal1_controller: 31 | ros__parameters: 32 | type: forward_command_controller/ForwardCommandController 33 | joints: 34 | - joint1 35 | interface_name: position 36 | 37 | forward_illegal2_controller: 38 | ros__parameters: 39 | type: forward_command_controller/ForwardCommandController 40 | joints: 41 | - joint2 42 | interface_name: position 43 | -------------------------------------------------------------------------------- /example_12/description/ros2_control/rrbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ros2_control_demo_example_12/RRBotSystemPositionOnlyHardware 9 | 0 10 | 3.0 11 | 100 12 | 13 | 14 | 15 | 16 | -1 17 | 1 18 | 19 | 20 | 21 | 22 | 23 | -1 24 | 1 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /stale.yml: -------------------------------------------------------------------------------- 1 | name: 'Stale issues and PRs' 2 | on: 3 | workflow_dispatch: 4 | schedule: 5 | # UTC noon every workday 6 | - cron: '0 12 * * MON-FRI' 7 | 8 | jobs: 9 | stale: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | issues: write 13 | pull-requests: write 14 | steps: 15 | - uses: actions/stale@v9 16 | with: 17 | stale-issue-label: 'stale' 18 | stale-pr-label: 'stale' 19 | stale-issue-message: 'This issue is being labeled as stale because it has been open 45 days with no activity. It will be automatically closed after another 45 days without follow-ups.' 20 | close-issue-message: 'This issue was closed because it has been stalled for 45 days with no activity.' 21 | stale-pr-message: 'This PR is stale because it has been open for 45 days with no activity. Please tag a maintainer for help on completing this PR, or close it if you think it has become obsolete.' 22 | days-before-stale: 45 23 | days-before-close: 45 24 | days-before-pr-close: -1 25 | exempt-all-milestones: true 26 | exempt-issue-labels: good first issue,good second issue,persistent,release,roadmap,Epic 27 | operations-per-run: 100 28 | -------------------------------------------------------------------------------- /example_10/description/urdf/rrbot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: 'Stale issues and PRs' 2 | on: 3 | workflow_dispatch: 4 | schedule: 5 | # UTC noon every workday 6 | - cron: '0 12 * * MON-FRI' 7 | 8 | jobs: 9 | stale: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | issues: write 13 | pull-requests: write 14 | steps: 15 | - uses: actions/stale@v10 16 | with: 17 | stale-issue-label: 'stale' 18 | stale-pr-label: 'stale' 19 | stale-issue-message: 'This issue is being labeled as stale because it has been open 45 days with no activity. It will be automatically closed after another 45 days without follow-ups.' 20 | close-issue-message: 'This issue was closed because it has been stalled for 45 days with no activity.' 21 | stale-pr-message: 'This PR is stale because it has been open for 45 days with no activity. Please tag a maintainer for help on completing this PR, or close it if you think it has become obsolete.' 22 | days-before-stale: 45 23 | days-before-close: 45 24 | days-before-pr-close: -1 25 | exempt-all-milestones: true 26 | exempt-issue-labels: good first issue,good second issue,persistent,release,roadmap,Epic 27 | operations-per-run: 100 28 | -------------------------------------------------------------------------------- /example_17/description/ros2_control/rrbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ros2_control_demo_example_17/RRBotSystemPositionOnlyHardware 9 | 0 10 | 3.0 11 | 100 12 | 10 13 | 14 | 15 | 16 | 17 | -1 18 | 1 19 | 20 | 21 | 22 | 23 | 24 | -1 25 | 1 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /.github/workflows/rolling-binary-build.yml: -------------------------------------------------------------------------------- 1 | name: Rolling Binary Build 2 | # author: Denis Štogl 3 | # description: 'Build & test all dependencies from released (binary) packages.' 4 | 5 | on: 6 | pull_request: &event 7 | branches: 8 | - master 9 | paths: 10 | - '**.hpp' 11 | - '**.cpp' 12 | - '.github/workflows/rolling-binary-build.yml' 13 | - '**/package.xml' 14 | - '**/CMakeLists.txt' 15 | - '**.xacro' 16 | - '**.py' 17 | - '**.yaml' 18 | - 'ros2_control_demos-not-released.rolling.repos' 19 | - 'ros2_control_demos-not-released.kilted.repos' 20 | - '**.xml' 21 | push: *event 22 | schedule: 23 | # Run every morning to detect flakiness and broken dependencies 24 | - cron: '03 1 * * MON-FRI' 25 | 26 | jobs: 27 | binary: 28 | uses: ros-controls/ros2_control_ci/.github/workflows/reusable-industrial-ci-with-cache.yml@master 29 | strategy: 30 | fail-fast: false 31 | matrix: 32 | ROS_DISTRO: [rolling, kilted] 33 | ROS_REPO: [main, testing] 34 | with: 35 | ros_distro: ${{ matrix.ROS_DISTRO }} 36 | ros_repo: ${{ matrix.ROS_REPO }} 37 | upstream_workspace: ros2_control_demos-not-released.${{ matrix.ROS_DISTRO }}.repos 38 | ref_for_scheduled_build: master 39 | -------------------------------------------------------------------------------- /Dockerfile/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG ROS_DISTRO=rolling 2 | 3 | FROM ros:${ROS_DISTRO}-ros-base 4 | 5 | ENV DEBIAN_FRONTEND noninteractive 6 | 7 | RUN apt-get update \ 8 | && apt-get upgrade -y \ 9 | && \ 10 | : "remove cache" && \ 11 | apt-get autoremove -y -qq && \ 12 | rm -rf /var/lib/apt/lists/* 13 | 14 | COPY . /home/ros2_ws/src/ros2_control_demos 15 | 16 | RUN cd /home/ros2_ws/src \ 17 | && rosdep update --rosdistro ${ROS_DISTRO} \ 18 | # uncomment this line if you want to use the latest version of ros2_control 19 | # && vcs import --input https://raw.githubusercontent.com/ros-controls/ros2_control_ci/master/ros_controls.rolling-on-$ROS_DISTRO.repos \ 20 | && apt-get update \ 21 | && rosdep install --from-paths ./ -i -y --rosdistro ${ROS_DISTRO} \ 22 | --skip-keys ros-${ROS_DISTRO}-joint-state-publisher-gui --skip-keys ros-${ROS_DISTRO}-rviz2 \ 23 | && \ 24 | : "remove cache" && \ 25 | apt-get autoremove -y -qq && \ 26 | rm -rf /var/lib/apt/lists/* 27 | 28 | RUN cd /home/ros2_ws/ \ 29 | && . /opt/ros/${ROS_DISTRO}/setup.sh \ 30 | && colcon build --cmake-args -DBUILD_TESTING=OFF --symlink-install --packages-up-to ros2_control_demos 31 | 32 | COPY Dockerfile/entrypoint.sh /entrypoint.sh 33 | ENTRYPOINT ["/entrypoint.sh"] 34 | 35 | CMD ros2 launch ros2_control_demo_example_1 rrbot.launch.py gui:=false 36 | -------------------------------------------------------------------------------- /example_6/description/urdf/rrbot_modular_actuators.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /example_15/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ros2_control_demo_example_15 LANGUAGES CXX) 3 | 4 | find_package(ros2_control_cmake REQUIRED) 5 | set_compiler_options() 6 | export_windows_symbols() 7 | 8 | # find dependencies 9 | set(THIS_PACKAGE_INCLUDE_DEPENDS 10 | ) 11 | 12 | # find dependencies 13 | find_package(ament_cmake REQUIRED) 14 | foreach(Dependency IN ITEMS ${THIS_PACKAGE_INCLUDE_DEPENDS}) 15 | find_package(${Dependency} REQUIRED) 16 | endforeach() 17 | 18 | # INSTALL 19 | install( 20 | DIRECTORY description/rviz 21 | DESTINATION share/ros2_control_demo_example_15 22 | ) 23 | install( 24 | DIRECTORY bringup/launch bringup/config 25 | DESTINATION share/ros2_control_demo_example_15 26 | ) 27 | 28 | if(BUILD_TESTING) 29 | # Integration (launch) tests 30 | find_package(ament_cmake_ros REQUIRED) 31 | find_package(launch_testing_ament_cmake REQUIRED) 32 | function(add_ros_isolated_launch_test path) 33 | set(RUNNER "${ament_cmake_ros_DIR}/run_test_isolated.py") 34 | add_launch_test("${path}" RUNNER "${RUNNER}" ${ARGN}) 35 | endfunction() 36 | add_ros_isolated_launch_test(test/test_rrbot_namespace_launch.py) 37 | add_ros_isolated_launch_test(test/test_multi_controller_manager_launch.py) 38 | endif() 39 | 40 | ## EXPORTS 41 | ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS}) 42 | ament_package() 43 | -------------------------------------------------------------------------------- /example_16/description/ros2_control/diffbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ros2_control_demo_example_16/DiffBotSystemHardware 10 | 0 11 | 3.0 12 | 13 | 14 | 15 | 16 | mock_components/GenericSystem 17 | true 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /example_2/description/ros2_control/diffbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ros2_control_demo_example_2/DiffBotSystemHardware 10 | 0 11 | 3.0 12 | 13 | 14 | 15 | 16 | mock_components/GenericSystem 17 | true 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /example_15/bringup/config/multi_controller_manager_joint_trajectory_publisher.yaml: -------------------------------------------------------------------------------- 1 | /rrbot_1/publisher_joint_trajectory_controller: 2 | ros__parameters: 3 | 4 | controller_name: "rrbot_1/position_trajectory_controller" 5 | wait_sec_between_publish: 6 6 | 7 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 8 | pos1: 9 | positions: [0.785, 0.785] 10 | pos2: 11 | positions: [0.0, 0.0] 12 | pos3: 13 | positions: [-0.785, -0.785] 14 | pos4: 15 | positions: [0.0, 0.0] 16 | 17 | joints: 18 | - rrbot_1_joint1 19 | - rrbot_1_joint2 20 | 21 | check_starting_point: false 22 | starting_point_limits: 23 | joint1: [-0.1,0.1] 24 | joint2: [-0.1,0.1] 25 | 26 | 27 | /rrbot_2/publisher_joint_trajectory_controller: 28 | ros__parameters: 29 | 30 | controller_name: "rrbot_2/position_trajectory_controller" 31 | wait_sec_between_publish: 6 32 | 33 | goal_names: ["pos1", "pos2", "pos3", "pos4"] 34 | pos1: 35 | positions: [-0.785, 0.0] 36 | pos2: 37 | positions: [0.0, -0.785] 38 | pos3: 39 | positions: [+0.785, -1.57] 40 | pos4: 41 | positions: [+1.57, -0.785] 42 | 43 | joints: 44 | - rrbot_2_joint1 45 | - rrbot_2_joint2 46 | 47 | check_starting_point: false 48 | starting_point_limits: 49 | joint1: [-0.1,0.1] 50 | joint2: [-0.1,0.1] 51 | -------------------------------------------------------------------------------- /ros2_control_demo_description/r6bot/srdf/r6bot.srdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /example_8/description/urdf/rrbot_transmissions_system_position_only.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /example_9/description/ros2_control/rrbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | gz_ros2_control/GazeboSimSystem 10 | 11 | 12 | ros2_control_demo_example_9/RRBotSystemPositionOnlyHardware 13 | 0 14 | 3.0 15 | 100 16 | 17 | 18 | 19 | 20 | 21 | -1 22 | 1 23 | 24 | 25 | 26 | 27 | 28 | -1 29 | 1 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example_9/description/urdf/rrbot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /example_13/description/ros2_control/threedofbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | mock_components/GenericSystem 9 | 10 | 11 | 12 | 13 | -1 14 | 1 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -1 23 | 1 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -1 32 | 1 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /example_1/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_1"), 26 | "config", 27 | "rrbot_forward_position_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_forward_position_controller", 36 | name="publisher_forward_position_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_1/bringup/launch/test_joint_trajectory_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_1"), 26 | "config", 27 | "rrbot_joint_trajectory_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_joint_trajectory_controller", 36 | name="publisher_joint_trajectory_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_10/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_1"), 26 | "config", 27 | "rrbot_forward_position_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_forward_position_controller", 36 | name="publisher_forward_position_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_3/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_3"), 26 | "config", 27 | "rrbot_forward_position_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_forward_position_controller", 36 | name="publisher_forward_position_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_4/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_4"), 26 | "config", 27 | "rrbot_forward_position_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_forward_position_controller", 36 | name="publisher_forward_position_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_5/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_5"), 26 | "config", 27 | "rrbot_forward_position_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_forward_position_controller", 36 | name="publisher_forward_position_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_6/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_6"), 26 | "config", 27 | "rrbot_forward_position_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_forward_position_controller", 36 | name="publisher_forward_position_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_8/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_8"), 26 | "config", 27 | "rrbot_forward_position_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_forward_position_controller", 36 | name="publisher_forward_position_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_9/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | position_goals = PathJoinSubstitution( 24 | [ 25 | FindPackageShare("ros2_control_demo_example_9"), 26 | "config", 27 | "rrbot_forward_position_publisher.yaml", 28 | ] 29 | ) 30 | 31 | return LaunchDescription( 32 | [ 33 | Node( 34 | package="ros2_controllers_test_nodes", 35 | executable="publisher_forward_position_controller", 36 | name="publisher_forward_position_controller", 37 | parameters=[position_goals], 38 | output="both", 39 | ) 40 | ] 41 | ) 42 | -------------------------------------------------------------------------------- /example_3/description/urdf/rrbot_system_multi_interface.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example_14/description/urdf/rrbot_modular_actuators_without_feedback_sensors_for_position_feedback.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | true 27 | 28 | 29 | 30 | 31 | 32 | 33 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example_4/description/urdf/rrbot_system_with_sensor.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example_15/bringup/config/multi_controller_manager_rrbot_generic_controllers.yaml: -------------------------------------------------------------------------------- 1 | /**/controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | 9 | /**/forward_position_controller: 10 | ros__parameters: 11 | type: forward_command_controller/ForwardCommandController 12 | interface_name: position 13 | 14 | /rrbot_1/forward_position_controller: 15 | ros__parameters: 16 | joints: 17 | - rrbot_1_joint1 18 | - rrbot_1_joint2 19 | 20 | /rrbot_2/forward_position_controller: 21 | ros__parameters: 22 | joints: 23 | - rrbot_2_joint1 24 | - rrbot_2_joint2 25 | 26 | /rrbot_1/position_trajectory_controller: 27 | ros__parameters: 28 | joints: 29 | - rrbot_1_joint1 30 | - rrbot_1_joint2 31 | 32 | /rrbot_2/position_trajectory_controller: 33 | ros__parameters: 34 | joints: 35 | - rrbot_2_joint1 36 | - rrbot_2_joint2 37 | 38 | /**/position_trajectory_controller: 39 | ros__parameters: 40 | type: joint_trajectory_controller/JointTrajectoryController 41 | 42 | command_interfaces: 43 | - position 44 | 45 | state_interfaces: 46 | - position 47 | 48 | state_publish_rate: 200.0 # Defaults to 50 49 | action_monitor_rate: 20.0 # Defaults to 20 50 | 51 | allow_partial_joints_goal: false # Defaults to false 52 | interpolate_from_desired_state: true 53 | allow_integration_in_goal_trajectories: true 54 | constraints: 55 | stopped_velocity_tolerance: 0.01 # Defaults to 0.01 56 | goal_time: 0.0 # Defaults to 0.0 (start immediately) 57 | -------------------------------------------------------------------------------- /example_9/description/gazebo/rrbot.gazebo.xacro: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | $(find ros2_control_demo_example_9)/config/rrbot_controllers.yaml 14 | 15 | 16 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 0.2 30 | 0.2 31 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 0.2 42 | 0.2 43 | 44 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /example_6/description/ros2_control/rrbot_modular_actuators.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ros2_control_demo_example_6/RRBotModularJoint 9 | 2.0 10 | 3.0 11 | ${slowdown} 12 | 13 | 14 | 15 | -100 16 | 100 17 | 18 | 19 | 20 | 21 | 22 | 23 | ros2_control_demo_example_6/RRBotModularJoint 24 | 2.0 25 | 3.0 26 | ${slowdown} 27 | 28 | 29 | 30 | -100 31 | 100 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /.github/mergify.yml: -------------------------------------------------------------------------------- 1 | pull_request_rules: 2 | - name: Backport to humble at reviewers discretion 3 | conditions: 4 | - base=master 5 | - "label=backport-humble" 6 | actions: 7 | backport: 8 | branches: 9 | - humble 10 | 11 | - name: Backport to jazzy at reviewers discretion 12 | conditions: 13 | - base=master 14 | - "label=backport-jazzy" 15 | actions: 16 | backport: 17 | branches: 18 | - jazzy 19 | 20 | - name: Ask to resolve conflict 21 | conditions: 22 | - conflict 23 | - author!=mergify[bot] 24 | - author!=dependabot[bot] 25 | actions: 26 | comment: 27 | message: This pull request is in conflict. Could you fix it @{{author}}? 28 | 29 | - name: Ask to resolve conflict for backports 30 | conditions: 31 | - conflict 32 | - author=mergify[bot] 33 | actions: 34 | comment: 35 | message: This pull request is in conflict. Could you fix it @bmagyar @destogl @christophfroehlich @saikishor? 36 | 37 | - name: development targets master branch 38 | conditions: 39 | - base!=master 40 | - author!=bmagyar 41 | - author!=destogl 42 | - author!=christophfroehlich 43 | - author!=saikishor 44 | - author!=mergify[bot] 45 | - author!=dependabot[bot] 46 | actions: 47 | comment: 48 | message: | 49 | @{{author}}, all pull requests must be targeted towards the `master` development branch. 50 | Once merged into `master`, it is possible to backport to `{{base}}`, but it must be in `master` 51 | to have these changes reflected into new distributions. 52 | -------------------------------------------------------------------------------- /example_5/description/ros2_control/rrbot_system_position_only.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | mock_components/GenericSystem 11 | ${mock_sensor_commands} 12 | 0.0 13 | 14 | 15 | ros2_control_demo_example_5/RRBotSystemPositionOnlyHardware 16 | 0.0 17 | 3.0 18 | ${slowdown} 19 | 20 | 21 | 22 | 23 | 24 | -1 25 | 1 26 | 27 | 28 | 29 | 30 | 31 | -1 32 | 1 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /example_17/bringup/launch/test_forward_position_controller.launch.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 23 | 25 | 26 | 30 | 34 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /ros2_control_demos/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ros2_control_demos 4 | 0.0.0 5 | Metapackage for `ros2_control` demos packages 6 | 7 | Denis Štogl 8 | 9 | Denis Štogl 10 | Bence Magyar 11 | Christoph Froehlich 12 | 13 | Apache-2.0 14 | 15 | ament_cmake 16 | 17 | ros2_control_demo_example_1 18 | ros2_control_demo_example_2 19 | ros2_control_demo_example_3 20 | ros2_control_demo_example_4 21 | ros2_control_demo_example_5 22 | ros2_control_demo_example_6 23 | ros2_control_demo_example_7 24 | ros2_control_demo_example_8 25 | ros2_control_demo_example_9 26 | ros2_control_demo_example_10 27 | ros2_control_demo_example_11 28 | ros2_control_demo_example_12 29 | ros2_control_demo_example_13 30 | ros2_control_demo_example_14 31 | ros2_control_demo_example_15 32 | ros2_control_demo_example_16 33 | ros2_control_demo_example_17 34 | 35 | 36 | ament_cmake 37 | 38 | 39 | -------------------------------------------------------------------------------- /example_13/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(ros2_control_demo_example_13 LANGUAGES CXX) 3 | 4 | find_package(ros2_control_cmake REQUIRED) 5 | set_compiler_options() 6 | export_windows_symbols() 7 | 8 | # find dependencies 9 | set(THIS_PACKAGE_INCLUDE_DEPENDS 10 | ) 11 | 12 | # Specify the required version of ros2_control 13 | find_package(controller_manager 4.0.0) 14 | # Handle the case where the required version is not found 15 | if(NOT controller_manager_FOUND) 16 | message(FATAL_ERROR "ros2_control version 4.0.0 or higher is required. " 17 | "Are you using the correct branch of the ros2_control_demos repository?") 18 | endif() 19 | 20 | # find dependencies 21 | find_package(ament_cmake REQUIRED) 22 | foreach(Dependency IN ITEMS ${THIS_PACKAGE_INCLUDE_DEPENDS}) 23 | find_package(${Dependency} REQUIRED) 24 | endforeach() 25 | 26 | # INSTALL 27 | install( 28 | DIRECTORY description/ros2_control description/urdf description/rviz 29 | DESTINATION share/ros2_control_demo_example_13 30 | ) 31 | install( 32 | DIRECTORY bringup/launch bringup/config 33 | DESTINATION share/ros2_control_demo_example_13 34 | ) 35 | 36 | if(BUILD_TESTING) 37 | find_package(ament_cmake_ros REQUIRED) 38 | find_package(launch_testing_ament_cmake REQUIRED) 39 | find_package(ament_cmake_pytest REQUIRED) 40 | 41 | ament_add_pytest_test(example_13_urdf_xacro test/test_urdf_xacro.py) 42 | 43 | function(add_ros_isolated_launch_test path) 44 | set(RUNNER "${ament_cmake_ros_DIR}/run_test_isolated.py") 45 | add_launch_test("${path}" RUNNER "${RUNNER}" ${ARGN}) 46 | endfunction() 47 | add_ros_isolated_launch_test(test/test_three_robots_launch.py) 48 | endif() 49 | 50 | ## EXPORTS 51 | ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS}) 52 | ament_package() 53 | -------------------------------------------------------------------------------- /example_7/bringup/launch/send_trajectory.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2023 ros2_control Development Team 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import Command, FindExecutable, PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | # Get URDF via xacro 23 | robot_description_content = Command( 24 | [ 25 | PathJoinSubstitution([FindExecutable(name="xacro")]), 26 | " ", 27 | PathJoinSubstitution( 28 | [ 29 | FindPackageShare("ros2_control_demo_example_7"), 30 | "urdf", 31 | "r6bot.urdf.xacro", 32 | ] 33 | ), 34 | ] 35 | ) 36 | robot_description = {"robot_description": robot_description_content} 37 | 38 | send_trajectory_node = Node( 39 | package="ros2_control_demo_example_7", 40 | executable="send_trajectory", 41 | name="send_trajectory_node", 42 | parameters=[robot_description], 43 | ) 44 | 45 | nodes_to_start = [send_trajectory_node] 46 | return LaunchDescription(nodes_to_start) 47 | -------------------------------------------------------------------------------- /example_17/bringup/launch/test_joint_trajectory_controller.launch.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 23 | 25 | 26 | 30 | 34 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /example_5/description/ros2_control/external_rrbot_force_torque_sensor.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | mock_components/GenericSystem 10 | ${mock_sensor_commands} 11 | 0.0 12 | 13 | 14 | ros2_control_demo_example_5/ExternalRRBotForceTorqueSensorHardware 15 | 0.0 16 | 3.0 17 | 5.0 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | tool_link 29 | 100 30 | 100 31 | 100 32 | 15 33 | 15 34 | 15 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /example_2/bringup/config/diffbot_controllers.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 10 # Hz 4 | 5 | joint_state_broadcaster: 6 | type: joint_state_broadcaster/JointStateBroadcaster 7 | 8 | diffbot_base_controller: 9 | ros__parameters: 10 | type: diff_drive_controller/DiffDriveController 11 | 12 | left_wheel_names: ["left_wheel_joint"] 13 | right_wheel_names: ["right_wheel_joint"] 14 | 15 | wheel_separation: 0.10 16 | #wheels_per_side: 1 # actually 2, but both are controlled by 1 signal 17 | wheel_radius: 0.015 18 | 19 | wheel_separation_multiplier: 1.0 20 | left_wheel_radius_multiplier: 1.0 21 | right_wheel_radius_multiplier: 1.0 22 | 23 | publish_rate: 50.0 24 | odom_frame_id: odom 25 | base_frame_id: base_link 26 | pose_covariance_diagonal : [0.001, 0.001, 0.001, 0.001, 0.001, 0.01] 27 | twist_covariance_diagonal: [0.001, 0.001, 0.001, 0.001, 0.001, 0.01] 28 | 29 | open_loop: true 30 | enable_odom_tf: true 31 | 32 | cmd_vel_timeout: 0.5 33 | #publish_limited_velocity: true 34 | #velocity_rolling_window_size: 10 35 | 36 | # Velocity and acceleration limits 37 | # Whenever a min_* is unspecified, default to -max_* 38 | linear.x.has_velocity_limits: true 39 | linear.x.has_acceleration_limits: true 40 | linear.x.has_jerk_limits: false 41 | linear.x.max_velocity: 1.0 42 | linear.x.min_velocity: -1.0 43 | linear.x.max_acceleration: 1.0 44 | linear.x.max_jerk: 0.0 45 | linear.x.min_jerk: 0.0 46 | 47 | angular.z.has_velocity_limits: true 48 | angular.z.has_acceleration_limits: true 49 | angular.z.has_jerk_limits: false 50 | angular.z.max_velocity: 1.0 51 | angular.z.min_velocity: -1.0 52 | angular.z.max_acceleration: 1.0 53 | angular.z.min_acceleration: -1.0 54 | angular.z.max_jerk: 0.0 55 | angular.z.min_jerk: 0.0 56 | -------------------------------------------------------------------------------- /example_8/description/ros2_control/rrbot_transmissions_system_position_only.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ros2_control_demo_example_8/RRBotTransmissionsSystemPositionOnlyHardware 10 | ${slowdown} 11 | 12 | 13 | 14 | 15 | -1 16 | 1 17 | 18 | 19 | 20 | 21 | 22 | 23 | -1 24 | 1 25 | 26 | 27 | 28 | 29 | 30 | transmission_interface/SimpleTransmission 31 | 32 | 33 | 2.0 34 | 0.0 35 | 36 | 37 | 38 | 39 | transmission_interface/SimpleTransmission 40 | 41 | 42 | 4.0 43 | 0.0 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /example_17/description/launch/view_robot.launch.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | 19 | 20 | 22 | 23 | 24 | 26 | 27 | 28 | 31 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | 46 | 47 | -------------------------------------------------------------------------------- /example_14/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_14 5 | 0.0.0 6 | Modular Robots with actuators not providing states and with additional sensors. 7 | 8 | Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | ament_cmake 16 | ros2_control_cmake 17 | 18 | hardware_interface 19 | pluginlib 20 | rclcpp 21 | rclcpp_lifecycle 22 | realtime_tools 23 | 24 | controller_manager 25 | forward_command_controller 26 | joint_state_broadcaster 27 | joint_state_publisher_gui 28 | robot_state_publisher 29 | ros2_control_demo_description 30 | ros2_controllers_test_nodes 31 | ros2controlcli 32 | ros2launch 33 | rviz2 34 | xacro 35 | 36 | ament_cmake_pytest 37 | ament_cmake_ros 38 | launch_testing_ament_cmake 39 | launch_testing 40 | launch 41 | liburdfdom-tools 42 | rclpy 43 | 44 | 45 | ament_cmake 46 | 47 | 48 | -------------------------------------------------------------------------------- /example_5/description/urdf/rrbot_system_with_external_sensor.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 39 | 40 | 44 | 45 | -------------------------------------------------------------------------------- /example_6/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_6 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for RRbot with separate communication to each actuator. 7 | 8 | Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | ament_cmake 16 | ros2_control_cmake 17 | 18 | backward_ros 19 | hardware_interface 20 | pluginlib 21 | rclcpp 22 | rclcpp_lifecycle 23 | 24 | controller_manager 25 | forward_command_controller 26 | joint_state_broadcaster 27 | joint_state_publisher_gui 28 | robot_state_publisher 29 | ros2_control_demo_description 30 | ros2_controllers_test_nodes 31 | ros2controlcli 32 | ros2launch 33 | rviz2 34 | xacro 35 | 36 | ament_cmake_pytest 37 | ament_cmake_ros 38 | launch_testing_ament_cmake 39 | launch_testing 40 | launch 41 | liburdfdom-tools 42 | rclpy 43 | 44 | 45 | ament_cmake 46 | 47 | 48 | -------------------------------------------------------------------------------- /example_4/description/ros2_control/rrbot_system_with_sensor.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | mock_components/GenericSystem 11 | ${mock_sensor_commands} 12 | 0.0 13 | 14 | 15 | ros2_control_demo_example_4/RRBotSystemWithSensorHardware 16 | 0.0 17 | 3.0 18 | ${slowdown} 19 | 5.0 20 | 21 | 22 | 23 | 24 | 25 | -1 26 | 1 27 | 28 | 29 | 30 | 31 | 32 | -1 33 | 1 34 | 35 | 36 | 37 | 38 | 39 | 40 | tool_link 41 | 100 42 | 15 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /example_7/hardware/include/ros2_control_demo_example_7/r6bot_hardware.hpp: -------------------------------------------------------------------------------- 1 | // Copyright 2023 ros2_control Development Team 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | #ifndef ROS2_CONTROL_DEMO_EXAMPLE_7__R6BOT_HARDWARE_HPP_ 16 | #define ROS2_CONTROL_DEMO_EXAMPLE_7__R6BOT_HARDWARE_HPP_ 17 | 18 | #include "string" 19 | #include "unordered_map" 20 | #include "vector" 21 | 22 | #include "hardware_interface/handle.hpp" 23 | #include "hardware_interface/hardware_info.hpp" 24 | #include "hardware_interface/system_interface.hpp" 25 | #include "hardware_interface/types/hardware_interface_return_values.hpp" 26 | #include "hardware_interface/types/hardware_interface_type_values.hpp" 27 | 28 | using hardware_interface::return_type; 29 | 30 | namespace ros2_control_demo_example_7 31 | { 32 | using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn; 33 | 34 | class RobotSystem : public hardware_interface::SystemInterface 35 | { 36 | public: 37 | CallbackReturn on_init( 38 | const hardware_interface::HardwareComponentInterfaceParams & params) override; 39 | 40 | CallbackReturn on_configure(const rclcpp_lifecycle::State & previous_state) override; 41 | 42 | return_type read(const rclcpp::Time & time, const rclcpp::Duration & period) override; 43 | 44 | return_type write(const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override; 45 | 46 | protected: 47 | }; 48 | 49 | } // namespace ros2_control_demo_example_7 50 | 51 | #endif // ROS2_CONTROL_DEMO_EXAMPLE_7__R6BOT_HARDWARE_HPP_ 52 | -------------------------------------------------------------------------------- /example_15/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_15 5 | 0.0.0 6 | Demo package of `ros2_control` namespaced controller managers. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Dr.-Ing. Denis Štogl 16 | Christoph Froehlich 17 | 18 | ament_cmake 19 | ros2_control_cmake 20 | 21 | controller_manager 22 | forward_command_controller 23 | joint_state_broadcaster 24 | joint_trajectory_controller 25 | robot_state_publisher 26 | ros2_control_demo_example_1 27 | ros2_control_demo_example_5 28 | ros2_controllers_test_nodes 29 | ros2controlcli 30 | ros2launch 31 | rviz2 32 | xacro 33 | 34 | ament_cmake_pytest 35 | ament_cmake_ros 36 | launch_testing_ament_cmake 37 | launch_testing 38 | launch 39 | liburdfdom-tools 40 | rclpy 41 | 42 | 43 | ament_cmake 44 | 45 | 46 | -------------------------------------------------------------------------------- /example_4/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_4 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for RRbot with integrated sensor. 7 | 8 | Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | ament_cmake 16 | ros2_control_cmake 17 | 18 | backward_ros 19 | hardware_interface 20 | pluginlib 21 | rclcpp 22 | rclcpp_lifecycle 23 | 24 | controller_manager 25 | force_torque_sensor_broadcaster 26 | forward_command_controller 27 | joint_state_broadcaster 28 | joint_state_publisher_gui 29 | robot_state_publisher 30 | ros2_control_demo_description 31 | ros2_controllers_test_nodes 32 | ros2controlcli 33 | ros2launch 34 | rviz2 35 | xacro 36 | 37 | ament_cmake_pytest 38 | ament_cmake_ros 39 | launch_testing_ament_cmake 40 | launch_testing 41 | launch 42 | liburdfdom-tools 43 | rclpy 44 | 45 | 46 | ament_cmake 47 | 48 | 49 | -------------------------------------------------------------------------------- /example_5/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_5 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for RRbot with externally connected sensor. 7 | 8 | Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | ament_cmake 16 | ros2_control_cmake 17 | 18 | backward_ros 19 | hardware_interface 20 | pluginlib 21 | rclcpp 22 | rclcpp_lifecycle 23 | 24 | controller_manager 25 | force_torque_sensor_broadcaster 26 | forward_command_controller 27 | joint_state_broadcaster 28 | joint_state_publisher_gui 29 | robot_state_publisher 30 | ros2_control_demo_description 31 | ros2_controllers_test_nodes 32 | ros2controlcli 33 | ros2launch 34 | rviz2 35 | xacro 36 | 37 | ament_cmake_pytest 38 | ament_cmake_ros 39 | launch_testing_ament_cmake 40 | launch_testing 41 | launch 42 | liburdfdom-tools 43 | rclpy 44 | 45 | 46 | ament_cmake 47 | 48 | 49 | -------------------------------------------------------------------------------- /example_2/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_2 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for DiffBot. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Dr.-Ing. Denis Štogl 16 | 17 | ament_cmake 18 | ros2_control_cmake 19 | 20 | backward_ros 21 | hardware_interface 22 | pluginlib 23 | rclcpp 24 | rclcpp_lifecycle 25 | 26 | controller_manager 27 | diff_drive_controller 28 | joint_state_broadcaster 29 | joint_state_publisher_gui 30 | robot_state_publisher 31 | ros2_control_demo_description 32 | ros2_controllers_test_nodes 33 | ros2controlcli 34 | ros2launch 35 | rviz2 36 | xacro 37 | 38 | ament_cmake_pytest 39 | ament_cmake_ros 40 | launch_testing_ament_cmake 41 | launch_testing 42 | launch 43 | liburdfdom-tools 44 | rclpy 45 | 46 | 47 | ament_cmake 48 | 49 | 50 | -------------------------------------------------------------------------------- /example_15/bringup/launch/test_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.actions import DeclareLaunchArgument 17 | from launch.substitutions import LaunchConfiguration, PathJoinSubstitution 18 | from launch_ros.actions import Node 19 | from launch_ros.substitutions import FindPackageShare 20 | 21 | 22 | def generate_launch_description(): 23 | 24 | # Declare arguments 25 | declared_arguments = [] 26 | declared_arguments.append( 27 | DeclareLaunchArgument( 28 | "publisher_config", 29 | default_value="rrbot_forward_position_publisher.yaml", 30 | description="Name of the publisher config file stored inside \ 31 | ros2_control_demo_bringup/config/", 32 | ) 33 | ) 34 | 35 | # Initialize Arguments 36 | publisher_config = LaunchConfiguration("publisher_config") 37 | 38 | position_goals = PathJoinSubstitution( 39 | [ 40 | FindPackageShare("ros2_control_demo_example_15"), 41 | "config", 42 | publisher_config, 43 | ] 44 | ) 45 | 46 | return LaunchDescription( 47 | [ 48 | Node( 49 | package="ros2_controllers_test_nodes", 50 | executable="publisher_forward_position_controller", 51 | name="publisher_forward_position_controller", 52 | parameters=[position_goals], 53 | output="both", 54 | ) 55 | ] 56 | ) 57 | -------------------------------------------------------------------------------- /example_15/bringup/launch/test_joint_trajectory_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.actions import DeclareLaunchArgument 17 | from launch.substitutions import LaunchConfiguration, PathJoinSubstitution 18 | from launch_ros.actions import Node 19 | from launch_ros.substitutions import FindPackageShare 20 | 21 | 22 | def generate_launch_description(): 23 | 24 | # Declare arguments 25 | declared_arguments = [] 26 | declared_arguments.append( 27 | DeclareLaunchArgument( 28 | "publisher_config", 29 | default_value="rrbot_joint_trajectory_publisher.yaml", 30 | description="Name of the publisher config file stored inside \ 31 | ros2_control_demo_bringup/config/", 32 | ) 33 | ) 34 | 35 | # Initialize Arguments 36 | publisher_config = LaunchConfiguration("publisher_config") 37 | 38 | position_goals = PathJoinSubstitution( 39 | [ 40 | FindPackageShare("ros2_control_demo_example_15"), 41 | "config", 42 | publisher_config, 43 | ] 44 | ) 45 | 46 | return LaunchDescription( 47 | [ 48 | Node( 49 | package="ros2_controllers_test_nodes", 50 | executable="publisher_joint_trajectory_controller", 51 | name="publisher_joint_trajectory_controller", 52 | parameters=[position_goals], 53 | output="both", 54 | ) 55 | ] 56 | ) 57 | -------------------------------------------------------------------------------- /example_3/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_3 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for RRbot with multi interface. 7 | 8 | Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | ament_cmake 16 | ros2_control_cmake 17 | 18 | backward_ros 19 | hardware_interface 20 | pluginlib 21 | rclcpp 22 | rclcpp_lifecycle 23 | 24 | controller_manager 25 | forward_command_controller 26 | joint_state_broadcaster 27 | joint_state_publisher_gui 28 | position_controllers 29 | robot_state_publisher 30 | ros2_control_demo_description 31 | ros2_controllers_test_nodes 32 | ros2controlcli 33 | ros2launch 34 | rviz2 35 | velocity_controllers 36 | xacro 37 | 38 | ament_cmake_pytest 39 | ament_cmake_ros 40 | launch_testing_ament_cmake 41 | launch_testing 42 | launch 43 | liburdfdom-tools 44 | rclpy 45 | 46 | 47 | ament_cmake 48 | 49 | 50 | -------------------------------------------------------------------------------- /example_16/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_16 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for DiffBot. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Julia Jia 16 | 17 | ament_cmake 18 | ros2_control_cmake 19 | 20 | backward_ros 21 | hardware_interface 22 | pluginlib 23 | rclcpp 24 | rclcpp_lifecycle 25 | 26 | controller_manager 27 | diff_drive_controller 28 | pid_controller 29 | joint_state_broadcaster 30 | joint_state_publisher_gui 31 | robot_state_publisher 32 | ros2_control_demo_description 33 | ros2_controllers_test_nodes 34 | ros2controlcli 35 | ros2launch 36 | rviz2 37 | xacro 38 | 39 | ament_cmake_pytest 40 | ament_cmake_ros 41 | launch_testing_ament_cmake 42 | launch_testing 43 | launch 44 | liburdfdom-tools 45 | rclpy 46 | 47 | 48 | ament_cmake 49 | 50 | 51 | -------------------------------------------------------------------------------- /example_13/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_13 5 | 0.0.0 6 | Demo package of `ros2_control` simulation with multiple robots. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Dr.-Ing. Denis Štogl 16 | Christoph Froehlich 17 | 18 | ament_cmake 19 | ros2_control_cmake 20 | 21 | controller_manager 22 | force_torque_sensor_broadcaster 23 | forward_command_controller 24 | joint_state_broadcaster 25 | robot_state_publisher 26 | ros2_control_demo_description 27 | ros2_control_demo_example_4 28 | ros2_control_demo_example_5 29 | ros2_controllers_test_nodes 30 | ros2controlcli 31 | ros2launch 32 | rviz2 33 | xacro 34 | 35 | ament_cmake_pytest 36 | ament_cmake_ros 37 | launch_testing_ament_cmake 38 | launch_testing 39 | launch 40 | liburdfdom-tools 41 | rclpy 42 | 43 | 44 | ament_cmake 45 | 46 | 47 | -------------------------------------------------------------------------------- /example_11/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_11 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for a carlike robot with two wheels in front that steer and two wheels in the back that drive. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Reza Kermani 16 | 17 | ament_cmake 18 | ros2_control_cmake 19 | 20 | backward_ros 21 | hardware_interface 22 | pluginlib 23 | rclcpp 24 | rclcpp_lifecycle 25 | 26 | bicycle_steering_controller 27 | controller_manager 28 | joint_state_broadcaster 29 | joint_state_publisher_gui 30 | robot_state_publisher 31 | ros2_control_demo_description 32 | ros2controlcli 33 | ros2launch 34 | rviz2 35 | xacro 36 | 37 | ament_cmake_pytest 38 | ament_cmake_ros 39 | launch_testing_ament_cmake 40 | launch_testing_ros 41 | launch_testing 42 | launch 43 | liburdfdom-tools 44 | rclpy 45 | 46 | 47 | ament_cmake 48 | 49 | 50 | -------------------------------------------------------------------------------- /example_10/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_10 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for RRbot with GPIO interfaces. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Christoph Froehlich 16 | 17 | ament_cmake 18 | ros2_control_cmake 19 | 20 | backward_ros 21 | hardware_interface 22 | pluginlib 23 | rclcpp 24 | rclcpp_lifecycle 25 | 26 | controller_manager 27 | forward_command_controller 28 | gpio_controllers 29 | joint_state_broadcaster 30 | joint_state_publisher_gui 31 | robot_state_publisher 32 | ros2_control_demo_description 33 | ros2_controllers_test_nodes 34 | ros2controlcli 35 | ros2launch 36 | rviz2 37 | xacro 38 | 39 | ament_cmake_pytest 40 | ament_cmake_ros 41 | launch_testing_ament_cmake 42 | launch_testing 43 | launch 44 | liburdfdom-tools 45 | rclpy 46 | 47 | 48 | ament_cmake 49 | 50 | 51 | -------------------------------------------------------------------------------- /example_8/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_8 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for RRbot with transmission interface. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Jordan Palacios 16 | 17 | ament_cmake 18 | ros2_control_cmake 19 | 20 | backward_ros 21 | hardware_interface 22 | pluginlib 23 | rclcpp 24 | rclcpp_lifecycle 25 | transmission_interface 26 | 27 | controller_manager 28 | forward_command_controller 29 | joint_state_broadcaster 30 | joint_state_publisher_gui 31 | robot_state_publisher 32 | ros2_control_demo_description 33 | ros2_controllers_test_nodes 34 | ros2controlcli 35 | ros2launch 36 | rviz2 37 | xacro 38 | 39 | ament_cmake_pytest 40 | ament_cmake_ros 41 | launch_testing_ament_cmake 42 | launch_testing 43 | launch 44 | liburdfdom-tools 45 | rclpy 46 | 47 | 48 | ament_cmake 49 | 50 | 51 | -------------------------------------------------------------------------------- /example_1/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_1 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for RRbot. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Dr.-Ing. Denis Štogl 16 | 17 | ament_cmake 18 | ros2_control_cmake 19 | 20 | backward_ros 21 | hardware_interface 22 | pluginlib 23 | rclcpp 24 | rclcpp_lifecycle 25 | 26 | controller_manager 27 | forward_command_controller 28 | joint_state_broadcaster 29 | joint_state_publisher_gui 30 | joint_trajectory_controller 31 | robot_state_publisher 32 | ros2_control_demo_description 33 | ros2_controllers_test_nodes 34 | ros2controlcli 35 | ros2launch 36 | rqt_joint_trajectory_controller 37 | rviz2 38 | xacro 39 | 40 | ament_cmake_pytest 41 | ament_cmake_ros 42 | launch_testing_ament_cmake 43 | launch_testing 44 | launch 45 | liburdfdom-tools 46 | rclpy 47 | 48 | 49 | ament_cmake 50 | 51 | 52 | -------------------------------------------------------------------------------- /example_12/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_12 5 | 0.0.0 6 | Demo package of `ros2_control` simulation with RRbot. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Dr.-Ing. Denis Štogl 16 | Sai Kishor Kothakota 17 | 18 | ament_cmake 19 | ros2_control_cmake 20 | 21 | backward_ros 22 | hardware_interface 23 | pluginlib 24 | rclcpp 25 | rclcpp_lifecycle 26 | std_msgs 27 | 28 | controller_manager 29 | forward_command_controller 30 | joint_state_broadcaster 31 | joint_state_publisher_gui 32 | joint_trajectory_controller 33 | robot_state_publisher 34 | ros2_control_demo_description 35 | ros2_controllers_test_nodes 36 | ros2controlcli 37 | rviz2 38 | xacro 39 | 40 | ament_cmake_pytest 41 | ament_cmake_ros 42 | launch_testing_ament_cmake 43 | launch_testing 44 | launch 45 | liburdfdom-tools 46 | rclpy 47 | 48 | 49 | ament_cmake 50 | 51 | 52 | -------------------------------------------------------------------------------- /example_7/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_7 5 | 0.0.0 6 | Demo for 6 DOF robot. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Paul Gesel 16 | 17 | ament_cmake 18 | ros2_control_cmake 19 | 20 | backward_ros 21 | control_msgs 22 | controller_interface 23 | hardware_interface 24 | kdl_parser 25 | pluginlib 26 | rclcpp_lifecycle 27 | rclcpp 28 | realtime_tools 29 | trajectory_msgs 30 | 31 | controller_manager 32 | joint_state_broadcaster 33 | joint_state_publisher_gui 34 | launch_ros 35 | launch 36 | robot_state_publisher 37 | ros2_control_demo_description 38 | ros2controlcli 39 | ros2launch 40 | rviz2 41 | urdf 42 | xacro 43 | 44 | ament_cmake_pytest 45 | ament_cmake_ros 46 | launch_testing_ament_cmake 47 | launch_testing 48 | launch 49 | liburdfdom-tools 50 | rclpy 51 | 52 | 53 | ament_cmake 54 | 55 | 56 | -------------------------------------------------------------------------------- /example_10/description/ros2_control/rrbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ros2_control_demo_example_10/RRBotSystemWithGPIOHardware 10 | 0 11 | 3.0 12 | 100 13 | 14 | 15 | 16 | 17 | mock_components/GenericSystem 18 | true 19 | 20 | 21 | 22 | 23 | 24 | -1 25 | 1 26 | 27 | 28 | 29 | 30 | 31 | -1 32 | 1 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 1.0 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /example_17/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_17 5 | 0.0.0 6 | Demo package of `ros2_control` hardware for RRBot with Hardware Component that publishes diagnostics 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Soham Patil 16 | 17 | ament_cmake 18 | ros2_control_cmake 19 | 20 | backward_ros 21 | diagnostic_updater 22 | hardware_interface 23 | pluginlib 24 | rclcpp 25 | rclcpp_lifecycle 26 | 27 | controller_manager 28 | forward_command_controller 29 | joint_state_broadcaster 30 | joint_state_publisher_gui 31 | joint_trajectory_controller 32 | robot_state_publisher 33 | ros2_control_demo_description 34 | ros2_controllers_test_nodes 35 | ros2controlcli 36 | ros2launch 37 | rqt_joint_trajectory_controller 38 | rviz2 39 | xacro 40 | 41 | ament_cmake_pytest 42 | ament_cmake_ros 43 | launch_testing_ament_cmake 44 | launch_testing 45 | launch 46 | liburdfdom-tools 47 | rclpy 48 | 49 | 50 | ament_cmake 51 | 52 | 53 | -------------------------------------------------------------------------------- /example_9/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ros2_control_demo_example_9 5 | 0.0.0 6 | Demo package of `ros2_control` simulation with RRbot. 7 | 8 | Dr.-Ing. Denis Štogl 9 | Bence Magyar 10 | Christoph Froehlich 11 | Sai Kishor Kothakota 12 | 13 | Apache-2.0 14 | 15 | Dr.-Ing. Denis Štogl 16 | Christoph Froehlich 17 | 18 | ament_cmake 19 | ros2_control_cmake 20 | 21 | backward_ros 22 | hardware_interface 23 | pluginlib 24 | rclcpp 25 | rclcpp_lifecycle 26 | 27 | controller_manager 28 | forward_command_controller 29 | ros_gz_bridge 30 | ros_gz_sim 31 | gz_ros2_control 32 | joint_state_broadcaster 33 | joint_state_publisher_gui 34 | joint_trajectory_controller 35 | robot_state_publisher 36 | ros2_control_demo_description 37 | ros2_controllers_test_nodes 38 | ros2controlcli 39 | rviz2 40 | xacro 41 | 42 | ament_cmake_pytest 43 | ament_cmake_ros 44 | launch_testing_ament_cmake 45 | launch_testing 46 | launch 47 | liburdfdom-tools 48 | rclpy 49 | 50 | 51 | ament_cmake 52 | 53 | 54 | -------------------------------------------------------------------------------- /example_5/hardware/include/ros2_control_demo_example_5/external_rrbot_force_torque_sensor.hpp: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | // 16 | // Authors: Subhas Das, Denis Stogl 17 | // 18 | 19 | #ifndef ROS2_CONTROL_DEMO_EXAMPLE_5__EXTERNAL_RRBOT_FORCE_TORQUE_SENSOR_HPP_ 20 | #define ROS2_CONTROL_DEMO_EXAMPLE_5__EXTERNAL_RRBOT_FORCE_TORQUE_SENSOR_HPP_ 21 | 22 | #include 23 | #include 24 | #include 25 | 26 | #include "hardware_interface/handle.hpp" 27 | #include "hardware_interface/hardware_info.hpp" 28 | #include "hardware_interface/sensor_interface.hpp" 29 | #include "hardware_interface/types/hardware_interface_return_values.hpp" 30 | #include "rclcpp/macros.hpp" 31 | 32 | namespace ros2_control_demo_example_5 33 | { 34 | class ExternalRRBotForceTorqueSensorHardware : public hardware_interface::SensorInterface 35 | { 36 | public: 37 | RCLCPP_SHARED_PTR_DEFINITIONS(ExternalRRBotForceTorqueSensorHardware) 38 | 39 | hardware_interface::CallbackReturn on_init( 40 | const hardware_interface::HardwareComponentInterfaceParams & params) override; 41 | 42 | hardware_interface::CallbackReturn on_activate( 43 | const rclcpp_lifecycle::State & previous_state) override; 44 | 45 | hardware_interface::CallbackReturn on_deactivate( 46 | const rclcpp_lifecycle::State & previous_state) override; 47 | 48 | hardware_interface::return_type read( 49 | const rclcpp::Time & time, const rclcpp::Duration & period) override; 50 | 51 | private: 52 | // Parameters for the RRBot simulation 53 | double hw_start_sec_; 54 | double hw_stop_sec_; 55 | double hw_sensor_change_; 56 | }; 57 | 58 | } // namespace ros2_control_demo_example_5 59 | 60 | #endif // ROS2_CONTROL_DEMO_EXAMPLE_5__EXTERNAL_RRBOT_FORCE_TORQUE_SENSOR_HPP_ 61 | -------------------------------------------------------------------------------- /example_12/bringup/launch/launch_chained_controllers.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | 16 | from launch import LaunchDescription 17 | from launch.actions import RegisterEventHandler 18 | from launch.event_handlers import OnProcessExit 19 | from launch.substitutions import PathJoinSubstitution 20 | from launch_ros.actions import Node 21 | from launch_ros.substitutions import FindPackageShare 22 | 23 | 24 | def generate_launch_description(): 25 | 26 | robot_controllers = PathJoinSubstitution( 27 | [ 28 | FindPackageShare("ros2_control_demo_example_12"), 29 | "config", 30 | "rrbot_chained_controllers.yaml", 31 | ] 32 | ) 33 | 34 | position_controller_spawner = Node( 35 | package="controller_manager", 36 | executable="spawner", 37 | arguments=["position_controller", "--param-file", robot_controllers], 38 | ) 39 | 40 | forward_position_controller_spawner = Node( 41 | package="controller_manager", 42 | executable="spawner", 43 | arguments=["forward_position_controller", "--param-file", robot_controllers], 44 | ) 45 | 46 | # Delay start of forward_position_controller_spawner after `position_controller_spawner` 47 | delay_forward_position_controller_spawner_after_position_controller_spawner = ( 48 | RegisterEventHandler( 49 | event_handler=OnProcessExit( 50 | target_action=position_controller_spawner, 51 | on_exit=[forward_position_controller_spawner], 52 | ) 53 | ) 54 | ) 55 | 56 | nodes = [ 57 | position_controller_spawner, 58 | delay_forward_position_controller_spawner_after_position_controller_spawner, 59 | ] 60 | 61 | return LaunchDescription(nodes) 62 | -------------------------------------------------------------------------------- /example_15/bringup/launch/test_multi_controller_manager_joint_trajectory_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | # For example: the parameters for different node may be placed into the same yaml file 24 | position_goals = PathJoinSubstitution( 25 | [ 26 | FindPackageShare("ros2_control_demo_example_15"), 27 | "config", 28 | "multi_controller_manager_joint_trajectory_publisher.yaml", 29 | ] 30 | ) 31 | 32 | rrbot_1_publisher_joint_trajectory_controller_node = Node( 33 | package="ros2_controllers_test_nodes", 34 | executable="publisher_joint_trajectory_controller", 35 | namespace="rrbot_1", 36 | name="publisher_joint_trajectory_controller", 37 | parameters=[position_goals], 38 | output={ 39 | "stdout": "screen", 40 | "stderr": "screen", 41 | }, 42 | ) 43 | 44 | rrbot_2_publisher_joint_trajectory_controller_node = Node( 45 | package="ros2_controllers_test_nodes", 46 | executable="publisher_joint_trajectory_controller", 47 | namespace="rrbot_2", 48 | name="publisher_joint_trajectory_controller", 49 | parameters=[position_goals], 50 | output={ 51 | "stdout": "screen", 52 | "stderr": "screen", 53 | }, 54 | ) 55 | 56 | return LaunchDescription( 57 | [ 58 | rrbot_1_publisher_joint_trajectory_controller_node, 59 | rrbot_2_publisher_joint_trajectory_controller_node, 60 | ] 61 | ) 62 | -------------------------------------------------------------------------------- /example_15/bringup/launch/test_multi_controller_manager_forward_position_controller.launch.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from launch import LaunchDescription 16 | from launch.substitutions import PathJoinSubstitution 17 | from launch_ros.actions import Node 18 | from launch_ros.substitutions import FindPackageShare 19 | 20 | 21 | def generate_launch_description(): 22 | 23 | # For example: the parameters for different node may be placed into the same yaml file 24 | position_goals = PathJoinSubstitution( 25 | [ 26 | FindPackageShare("ros2_control_demo_example_15"), 27 | "config", 28 | "multi_controller_manager_forward_position_publisher.yaml", 29 | ] 30 | ) 31 | 32 | rrbot_1_publisher_forward_position_controller_node = Node( 33 | package="ros2_controllers_test_nodes", 34 | executable="publisher_forward_position_controller", 35 | namespace="rrbot_1", 36 | name=["publisher_forward_position_controller"], 37 | parameters=[position_goals], 38 | output={ 39 | "stdout": "screen", 40 | "stderr": "screen", 41 | }, 42 | ) 43 | 44 | rrbot_2_publisher_forward_position_controller_node = Node( 45 | package="ros2_controllers_test_nodes", 46 | executable="publisher_forward_position_controller", 47 | namespace="rrbot_2", 48 | name=["publisher_forward_position_controller"], 49 | parameters=[position_goals], 50 | output={ 51 | "stdout": "screen", 52 | "stderr": "screen", 53 | }, 54 | ) 55 | 56 | return LaunchDescription( 57 | [ 58 | rrbot_1_publisher_forward_position_controller_node, 59 | rrbot_2_publisher_forward_position_controller_node, 60 | ] 61 | ) 62 | -------------------------------------------------------------------------------- /example_10/hardware/include/ros2_control_demo_example_10/rrbot.hpp: -------------------------------------------------------------------------------- 1 | // Copyright 2023 ros2_control Development Team 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | #ifndef ROS2_CONTROL_DEMO_EXAMPLE_10__RRBOT_HPP_ 16 | #define ROS2_CONTROL_DEMO_EXAMPLE_10__RRBOT_HPP_ 17 | 18 | #include 19 | #include 20 | #include 21 | 22 | #include "hardware_interface/handle.hpp" 23 | #include "hardware_interface/hardware_info.hpp" 24 | #include "hardware_interface/system_interface.hpp" 25 | #include "hardware_interface/types/hardware_interface_return_values.hpp" 26 | #include "rclcpp/macros.hpp" 27 | #include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp" 28 | #include "rclcpp_lifecycle/state.hpp" 29 | 30 | namespace ros2_control_demo_example_10 31 | { 32 | class RRBotSystemWithGPIOHardware : public hardware_interface::SystemInterface 33 | { 34 | public: 35 | RCLCPP_SHARED_PTR_DEFINITIONS(RRBotSystemWithGPIOHardware) 36 | 37 | hardware_interface::CallbackReturn on_init( 38 | const hardware_interface::HardwareComponentInterfaceParams & params) override; 39 | 40 | hardware_interface::CallbackReturn on_configure( 41 | const rclcpp_lifecycle::State & previous_state) override; 42 | 43 | hardware_interface::CallbackReturn on_activate( 44 | const rclcpp_lifecycle::State & previous_state) override; 45 | 46 | hardware_interface::CallbackReturn on_deactivate( 47 | const rclcpp_lifecycle::State & previous_state) override; 48 | 49 | hardware_interface::return_type read( 50 | const rclcpp::Time & time, const rclcpp::Duration & period) override; 51 | 52 | hardware_interface::return_type write( 53 | const rclcpp::Time & time, const rclcpp::Duration & period) override; 54 | 55 | private: 56 | // Parameters for the RRBot simulation 57 | double hw_slowdown_; 58 | }; 59 | 60 | } // namespace ros2_control_demo_example_10 61 | 62 | #endif // ROS2_CONTROL_DEMO_EXAMPLE_10__RRBOT_HPP_ 63 | -------------------------------------------------------------------------------- /example_1/hardware/include/ros2_control_demo_example_1/rrbot.hpp: -------------------------------------------------------------------------------- 1 | // Copyright 2020 ros2_control Development Team 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | #ifndef ROS2_CONTROL_DEMO_EXAMPLE_1__RRBOT_HPP_ 16 | #define ROS2_CONTROL_DEMO_EXAMPLE_1__RRBOT_HPP_ 17 | 18 | #include 19 | #include 20 | #include 21 | 22 | #include "hardware_interface/handle.hpp" 23 | #include "hardware_interface/hardware_info.hpp" 24 | #include "hardware_interface/system_interface.hpp" 25 | #include "hardware_interface/types/hardware_interface_return_values.hpp" 26 | #include "rclcpp/macros.hpp" 27 | #include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp" 28 | #include "rclcpp_lifecycle/state.hpp" 29 | 30 | namespace ros2_control_demo_example_1 31 | { 32 | class RRBotSystemPositionOnlyHardware : public hardware_interface::SystemInterface 33 | { 34 | public: 35 | RCLCPP_SHARED_PTR_DEFINITIONS(RRBotSystemPositionOnlyHardware) 36 | 37 | hardware_interface::CallbackReturn on_init( 38 | const hardware_interface::HardwareComponentInterfaceParams & params) override; 39 | 40 | hardware_interface::CallbackReturn on_configure( 41 | const rclcpp_lifecycle::State & previous_state) override; 42 | 43 | hardware_interface::CallbackReturn on_activate( 44 | const rclcpp_lifecycle::State & previous_state) override; 45 | 46 | hardware_interface::CallbackReturn on_deactivate( 47 | const rclcpp_lifecycle::State & previous_state) override; 48 | 49 | hardware_interface::return_type read( 50 | const rclcpp::Time & time, const rclcpp::Duration & period) override; 51 | 52 | hardware_interface::return_type write( 53 | const rclcpp::Time & time, const rclcpp::Duration & period) override; 54 | 55 | private: 56 | // Parameters for the RRBot simulation 57 | double hw_start_sec_; 58 | double hw_stop_sec_; 59 | double hw_slowdown_; 60 | }; 61 | 62 | } // namespace ros2_control_demo_example_1 63 | 64 | #endif // ROS2_CONTROL_DEMO_EXAMPLE_1__RRBOT_HPP_ 65 | --------------------------------------------------------------------------------