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

Use launch_utils instead of a spawner per controller #666

Merged
merged 3 commits into from
Dec 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 8 additions & 1 deletion example_13/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,18 @@ install(
)

if(BUILD_TESTING)
find_package(ament_cmake_ros REQUIRED)
find_package(launch_testing_ament_cmake REQUIRED)
find_package(ament_cmake_pytest REQUIRED)

ament_add_pytest_test(example_13_urdf_xacro test/test_urdf_xacro.py)
ament_add_pytest_test(view_example_13_launch test/test_view_robot_launch.py)
ament_add_pytest_test(run_example_13_launch test/test_three_robots_launch.py)

function(add_ros_isolated_launch_test path)
set(RUNNER "${ament_cmake_ros_DIR}/run_test_isolated.py")
add_launch_test("${path}" RUNNER "${RUNNER}" ${ARGN})
endfunction()
add_ros_isolated_launch_test(test/test_three_robots_launch.py)
endif()

## EXPORTS
Expand Down
108 changes: 31 additions & 77 deletions example_13/bringup/launch/three_robots.launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
from controller_manager.launch_utils import generate_controllers_spawner_launch_description


def generate_launch_description():
Expand Down Expand Up @@ -104,85 +105,44 @@ def generate_launch_description():
condition=IfCondition(gui),
)

# 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"],
# global broadcaster and initially active controllers from RRBot
general_ctrl_spawner = generate_controllers_spawner_launch_description(
[
# Global joint state broadcaster
"joint_state_broadcaster",
# RRBot controllers
"rrbot_joint_state_broadcaster",
"rrbot_position_controller",
# External FTS broadcaster
"rrbot_external_fts_broadcaster",
],
controller_params_files=[robot_controllers],
)

# RRBot controllers
rrbot_joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_joint_state_broadcaster", "--param-file", robot_controllers],
)
rrbot_position_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_position_controller", "--param-file", robot_controllers],
)
# External FTS broadcaster
rrbot_external_fts_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_external_fts_broadcaster", "--param-file", robot_controllers],
# RRBot with sensors controllers, initially active
rrbot_sensor_ctrl_spawner_active = generate_controllers_spawner_launch_description(
["rrbot_with_sensor_joint_state_broadcaster", "rrbot_with_sensor_fts_broadcaster"],
controller_params_files=[robot_controllers],
)

# RRBot controllers
rrbot_with_sensor_joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_with_sensor_joint_state_broadcaster", "--param-file", robot_controllers],
)
rrbot_with_sensor_position_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=[
# RRBot with sensors controllers, initially inactive
rrbot_sensor_ctrl_spawner_inactive = generate_controllers_spawner_launch_description(
[
"rrbot_with_sensor_position_controller",
"--inactive",
"--param-file",
robot_controllers,
],
)
rrbot_with_sensor_fts_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["rrbot_with_sensor_fts_broadcaster", "--param-file", robot_controllers],
controller_params_files=[robot_controllers],
extra_spawner_args=["--inactive"],
)

# ThreeDofBot controllers
threedofbot_joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=[
# ThreeDofBot controllers, initially inactive
threedofbot_ctrl_spawner = generate_controllers_spawner_launch_description(
[
"threedofbot_joint_state_broadcaster",
"--inactive",
"--param-file",
robot_controllers,
],
)
threedofbot_position_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=[
"threedofbot_position_controller",
"--inactive",
"--param-file",
robot_controllers,
],
)
threedofbot_pid_gain_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=[
"threedofbot_pid_gain_controller",
"--inactive",
"--param-file",
robot_controllers,
],
controller_params_files=[robot_controllers],
extra_spawner_args=["--inactive"],
)

# Command publishers
Expand All @@ -209,16 +169,10 @@ def generate_launch_description():
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,
general_ctrl_spawner,
rrbot_sensor_ctrl_spawner_active,
rrbot_sensor_ctrl_spawner_inactive,
threedofbot_ctrl_spawner,
rrbot_position_command_publisher,
rrbot_with_sensor_position_command_publisher,
threedofbot_position_command_publisher,
Expand Down
7 changes: 6 additions & 1 deletion example_13/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,13 @@
<exec_depend>xacro</exec_depend>

<test_depend>ament_cmake_pytest</test_depend>
<test_depend>launch_testing_ros</test_depend>
<test_depend>ament_cmake_ros</test_depend>
<test_depend>launch_ros</test_depend>
<test_depend>launch_testing_ament_cmake</test_depend>
<test_depend>launch_testing</test_depend>
<test_depend>launch</test_depend>
<test_depend>liburdfdom-tools</test_depend>
<test_depend>rclpy</test_depend>
<test_depend>ros2_control_demo_testing</test_depend>
<test_depend>xacro</test_depend>

Expand Down
4 changes: 1 addition & 3 deletions example_13/test/test_three_robots_launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
# Author: Christoph Froehlich

import os
import pytest
import unittest
import subprocess

Expand All @@ -48,8 +47,7 @@
)


# Executes the given launch file and checks if all nodes can be started
@pytest.mark.rostest
# Executes the given launch file
def generate_test_description():
launch_include = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
Expand Down
Loading