Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Example 13] Multi-robot system with lifecycle management #187

Closed
wants to merge 49 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
3b205e7
Adding Example-4 skeleton. Commenting position_only compilation due t…
Jun 30, 2021
2b2f310
Addressing review comments.
Jul 8, 2021
7c65e25
Update ros2_control_demo_description/rrbot_description/urdf/rrbot_sys…
Jul 9, 2021
8fc3eb4
Update ros2_control_demo_hardware/src/external_rrbot_force_torque_sen…
Jul 9, 2021
2e9878f
Addressing review comments.
Jul 12, 2021
84f42b6
Update ros2_control_demo_hardware/src/external_rrbot_force_torque_sen…
Jul 13, 2021
e5729a3
Update ros2_control_demo_hardware/src/external_rrbot_force_torque_sen…
Jul 13, 2021
c0c9b2d
Update ros2_control_demo_description/rrbot_description/ros2_control/e…
Jul 13, 2021
edaeebb
Addressing review comments.
Jul 13, 2021
c2d9222
Merge branch 'ros-controls:master' into add-example-4
Jul 15, 2021
e87ddc4
Corrections.
Jul 15, 2021
e233e2e
Merge branch 'ros-controls:master' into add-example-4
Jul 28, 2021
8dcb652
Update ros2_control_demo_description/rrbot_description/ros2_control/e…
Jul 28, 2021
7c3312a
Update ros2_control_demo_description/rrbot_description/urdf/rrbot_sys…
Jul 28, 2021
20fddec
Update ros2_control_demo_bringup/config/rrbot_with_external_sensor_co…
Jul 28, 2021
cc76781
Update ros2_control_demo_bringup/config/rrbot_with_external_sensor_co…
destogl Aug 9, 2021
c71bb59
Correct format.
destogl Aug 26, 2021
31e0f40
Addressing review comments
Jul 31, 2021
33cf319
Adding example text
Aug 27, 2021
4c6d889
Merge branch 'ros-controls:master' into add-example-4
Aug 27, 2021
fb78bf4
Merge branch 'master' into add-example-4
destogl Aug 31, 2021
f1f4736
Bugfix: Do not ignore prefix argument for joint names.
destogl Sep 1, 2021
e2278e7
Update example hardware to support new lifecycle of hardware.
destogl Sep 1, 2021
97abb68
Add 'ThreeDofBot' and 'Three Robots' example for component lifecycle.
destogl Sep 1, 2021
3c5bfa0
Bugfix: Change view_robot to be nicer and to actually work.
destogl Sep 1, 2021
36bfcbd
Update to newest interface state.
destogl Sep 7, 2021
0d64f59
Merge branch 'master' into multi-robot-lifecycle-example
destogl Sep 29, 2021
f587d2b
Addressing review comments.
Jul 8, 2021
235d089
Update ros2_control_demo_description/rrbot_description/urdf/rrbot_sys…
Jul 9, 2021
75e288c
Update ros2_control_demo_hardware/src/external_rrbot_force_torque_sen…
Jul 9, 2021
110ceee
Addressing review comments.
Jul 12, 2021
2847445
Update ros2_control_demo_hardware/src/external_rrbot_force_torque_sen…
Jul 13, 2021
deabda3
Update ros2_control_demo_hardware/src/external_rrbot_force_torque_sen…
Jul 13, 2021
206fa3a
Update ros2_control_demo_description/rrbot_description/ros2_control/e…
Jul 13, 2021
e1d9929
Addressing review comments.
Jul 13, 2021
dac598c
resolving merge conflicts
bailaC Jun 29, 2022
5eb6858
Corrections.
Jul 15, 2021
49d860c
Update ros2_control_demo_description/rrbot_description/ros2_control/e…
Jul 28, 2021
e77687b
Update ros2_control_demo_description/rrbot_description/urdf/rrbot_sys…
Jul 28, 2021
8946a98
Correct format.
destogl Aug 26, 2021
2b763cc
Addressing review comments
Jul 31, 2021
cc3f2de
Adding example text
bailaC Jul 6, 2022
ecf35a7
Bugfix: Do not ignore prefix argument for joint names.
destogl Sep 1, 2021
1f57ad6
Update example hardware to support new lifecycle of hardware.
destogl Sep 1, 2021
1495a6b
Merge branch 'master' into 133_pr_rebase
bailaC Jul 6, 2022
5553e97
Fixing format
bailaC Jul 6, 2022
b2e0055
Revert "Auxiliary commit to revert individual files from 5553e974e75a…
bailaC Jul 6, 2022
e8ea2ce
restoring minor merge errors
bailaC Jul 6, 2022
d263c51
Updated manual and some small fixes of the demo.
destogl Jul 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
321 changes: 316 additions & 5 deletions README.md

Large diffs are not rendered by default.

118 changes: 118 additions & 0 deletions ros2_control_demo_bringup/config/three_robots_controllers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
controller_manager:
ros__parameters:
update_rate: 100 # Hz

# Decide which hardware component should be started immediately
autostart_components:
- RRBotSystemPositionOnly
- ExternalRRBotFTSensor
# Decide which hardware component should start configured
autoconfigure_components:
- RRBotSystemWithSensor

# Global controllers
joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster

# RRBot controllers
rrbot_joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster

rrbot_position_controller:
type: forward_command_controller/ForwardCommandController

rrbot_external_fts_broadcaster:
type: force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster

# RRBot with sensor controllers
rrbot_with_sensor_joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster

rrbot_with_sensor_position_controller:
type: forward_command_controller/ForwardCommandController

rrbot_with_sensor_fts_broadcaster:
type: force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster

# ThreeDofBot controllers
threedofbot_joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster

threedofbot_position_controller:
type: forward_command_controller/ForwardCommandController

threedofbot_pid_gain_controller:
type: forward_command_controller/ForwardCommandController


# RRBot controllers
rrbot_joint_state_broadcaster:
ros__parameters:
joints:
- rrbot_joint1
- rrbot_joint2
interfaces:
- position

rrbot_position_controller:
ros__parameters:
joints:
- rrbot_joint1
- rrbot_joint2
interface_name: position

rrbot_external_fts_broadcaster:
ros__parameters:
sensor_name: rrbot_tcp_fts_sensor
frame_id: tool_link


# RRBot with sensor controllers
rrbot_with_sensor_joint_state_broadcaster:
ros__parameters:
joints:
- rrbot_with_sensor_joint1
- rrbot_with_sensor_joint2
interfaces:
- position

rrbot_with_sensor_position_controller:
ros__parameters:
joints:
- rrbot_with_sensor_joint1
- rrbot_with_sensor_joint2
interface_name: position

rrbot_with_sensor_fts_broadcaster:
ros__parameters:
interface_names.force.x: rrbot_with_sensor_tcp_fts_sensor/force.x
interface_names.torque.z: rrbot_with_sensor_tcp_fts_sensor/torque.z
frame_id: tool_link


# ThreeDofBot controllers
threedofbot_joint_state_broadcaster:
ros__parameters:
joints:
- threedofbot_joint1
- threedofbot_joint2
- threedofbot_joint3
interfaces:
- position
- pid_gain

threedofbot_position_controller:
ros__parameters:
joints:
- threedofbot_joint1
- threedofbot_joint2
- threedofbot_joint3
interface_name: position

threedofbot_pid_gain_controller:
ros__parameters:
joints:
- threedofbot_joint1
- threedofbot_joint2
- threedofbot_joint3
interface_name: pid_gain
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
rrbot_position_command_publisher:
ros__parameters:

controller_name: "rrbot_position_controller"
wait_sec_between_publish: 5

goal_names: ["pos1", "pos2", "pos3", "pos4"]
pos1: [0.785, 0.785]
pos2: [0, 0]
pos3: [-0.785, -0.785]
pos4: [0, 0]


rrbot_with_sensor_position_command_publisher:
ros__parameters:

controller_name: "rrbot_with_sensor_position_controller"
wait_sec_between_publish: 4

goal_names: ["pos1", "pos2", "pos3", "pos4"]
pos1: [0.785, 0.785]
pos2: [0, 0]
pos3: [-0.785, -0.785]
pos4: [0, 0]


threedofbot_position_command_publisher:
ros__parameters:

controller_name: "threedofbot_position_controller"
wait_sec_between_publish: 3

goal_names: ["pos1", "pos2", "pos3", "pos4"]
pos1: [0.785, 0.785, 0.785]
pos2: [0, 0, 0]
pos3: [-0.785, -0.785, -0.785]
pos4: [0, 0, 0]
225 changes: 225 additions & 0 deletions ros2_control_demo_bringup/launch/three_robots.launch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
# Copyright (c) 2021, Stogl Robotics Consulting UG (haftungsbeschränkt)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Copyright (c) 2021, Stogl Robotics Consulting UG (haftungsbeschränkt)
# Copyright (c) 2022, Stogl Robotics Consulting UG (haftungsbeschränkt)

#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Authors: Denis Stogl

from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import Command, FindExecutable, LaunchConfiguration, PathJoinSubstitution

from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare


def generate_launch_description():
# Declare arguments
declared_arguments = []
declared_arguments.append(
DeclareLaunchArgument(
"slowdown",
default_value="50.0",
description="Slowdown factor of the RRbot.",
)
)
Comment on lines +28 to +35
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we defining it and then doing the append?

Suggested change
declared_arguments = []
declared_arguments.append(
DeclareLaunchArgument(
"slowdown",
default_value="50.0",
description="Slowdown factor of the RRbot.",
)
)
declared_arguments = [
DeclareLaunchArgument(
"slowdown",
default_value="50.0",
description="Slowdown factor of the RRbot.",
)
]


# Initialize Arguments
slowdown = LaunchConfiguration("slowdown")

# Get URDF via xacro
robot_description_content = Command(
[
PathJoinSubstitution([FindExecutable(name="xacro")]),
" ",
PathJoinSubstitution(
[
FindPackageShare("rrbot_description"),
"urdf",
"three_robots.urdf.xacro",
]
),
" slowdown:=",
slowdown,
]
)
robot_description = {"robot_description": robot_description_content}

robot_controllers = PathJoinSubstitution(
[
FindPackageShare("ros2_control_demo_bringup"),
"config",
"three_robots_controllers.yaml",
]
)
rviz_config_file = PathJoinSubstitution(
[FindPackageShare("rrbot_description"), "config", "three_robots.rviz"]
)

position_goals = PathJoinSubstitution(
[
FindPackageShare("ros2_control_demo_bringup"),
"config",
"three_robots_position_command_publishers.yaml",
]
)

control_node = Node(
package="controller_manager",
executable="ros2_control_node",
parameters=[robot_description, robot_controllers],
remappings=[
("/joint_state_broadcaster/joint_states", "joint_states"),
],
output={
"stdout": "screen",
"stderr": "screen",
},
)
robot_state_pub_node = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
output="both",
parameters=[robot_description],
)
rviz_node = Node(
package="rviz2",
executable="rviz2",
name="rviz2",
output="log",
arguments=["-d", rviz_config_file],
)

# Separate robot state publishers for each robot

# Global joint state broadcaster
joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"],
)

# RRBot controllers
rrbot_joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_joint_state_broadcaster", "-c", "/controller_manager"],
)
rrbot_position_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_position_controller", "-c", "/controller_manager"],
)
# External FTS broadcaster
rrbot_external_fts_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_external_fts_broadcaster", "-c", "/controller_manager"],
)

# RRBot controllers
rrbot_with_sensor_joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_with_sensor_joint_state_broadcaster", "-c", "/controller_manager"],
)
rrbot_with_sensor_position_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=[
"rrbot_with_sensor_position_controller",
"-c",
"/controller_manager",
"--stopped",
],
)
rrbot_with_sensor_fts_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_with_sensor_fts_broadcaster", "-c", "/controller_manager"],
)

# ThreeDofBot controllers
threedofbot_joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=[
"threedofbot_joint_state_broadcaster",
"-c",
"/controller_manager",
"--stopped",
],
)
threedofbot_position_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["threedofbot_position_controller", "-c", "/controller_manager", "--stopped"],
)
threedofbot_pid_gain_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["threedofbot_pid_gain_controller", "-c", "/controller_manager", "--stopped"],
)

# Command publishers
rrbot_position_command_publisher = Node(
package="ros2_control_test_nodes",
executable="publisher_forward_position_controller",
name="rrbot_position_command_publisher",
parameters=[position_goals],
output={
"stdout": "screen",
"stderr": "screen",
},
)
rrbot_with_sensor_position_command_publisher = Node(
package="ros2_control_test_nodes",
executable="publisher_forward_position_controller",
name="rrbot_with_sensor_position_command_publisher",
parameters=[position_goals],
output={
"stdout": "screen",
"stderr": "screen",
},
)
threedofbot_position_command_publisher = Node(
package="ros2_control_test_nodes",
executable="publisher_forward_position_controller",
name="threedofbot_position_command_publisher",
parameters=[position_goals],
output={
"stdout": "screen",
"stderr": "screen",
},
)

nodes = [
control_node,
robot_state_pub_node,
rviz_node,
joint_state_broadcaster_spawner,
rrbot_joint_state_broadcaster_spawner,
rrbot_position_controller_spawner,
rrbot_external_fts_broadcaster_spawner,
rrbot_with_sensor_joint_state_broadcaster_spawner,
rrbot_with_sensor_position_controller_spawner,
rrbot_with_sensor_fts_broadcaster_spawner,
threedofbot_joint_state_broadcaster_spawner,
threedofbot_position_controller_spawner,
threedofbot_pid_gain_controller_spawner,
rrbot_position_command_publisher,
rrbot_with_sensor_position_command_publisher,
threedofbot_position_command_publisher,
]

return LaunchDescription(declared_arguments + nodes)
Loading