目录
背景
先决条件
运行演示
发现可用组件
运行时使用 ROS 服务的发布者和订阅者组合
运行时使用 ROS 服务的服务器和客户端组合
编译时与硬编码节点组合
运行时使用 dlopen 进行组合
使用启动动作的组合
高级主题
卸载组件
重映射容器名称和命名空间
重映射组件名称和命名空间
传递参数值到组件中
向组件传递额外的参数
可组合节点作为共享库
组成非节点派生组件
目标:将多个节点组合成单一进程。
教程级别:中级
时间:20 分钟
背景
查看概念性文章 https://docs.ros.org/en/jazzy/Concepts/Intermediate/About-Composition.html 。
有关如何编写可组合节点的信息,请查看本教程 https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Writing-a-Composable-Node.html 。
先决条件
本教程使用来自 rclcpp_components、ros2component、composition 和 image_tools 包的可执行文件。如果您已经按照平台的安装说明进行了操作,这些应该已经安装好了。
运行演示
发现可用组件
要查看工作区中注册和可用的组件,请在 shell 中执行以下操作:
ros2 component types
终端将返回所有可用组件的列表:
cxy@ubuntu2404-cxy:~/ros2_ws$ ros2 component types
rosbag2_transport
rosbag2_transport::Player
rosbag2_transport::Recorder
robot_state_publisher
robot_state_publisher::RobotStatePublisher
tf2_ros
tf2_ros::StaticTransformBroadcasterNode
quality_of_service_demo_cpp
quality_of_service_demo::MessageLostListener
quality_of_service_demo::MessageLostTalker
quality_of_service_demo::QosOverridesListener
quality_of_service_demo::QosOverridesTalker
point_cloud_transport
point_cloud_transport::Republisher
point_cloud_transport::Republisher
image_transport
image_transport::Republisher
image_tools
image_tools::Cam2Image
image_tools::ShowImage
logging_demo
logging_demo::LoggerConfig
logging_demo::LoggerUsage
examples_rclcpp_wait_set
Talker
Listener
examples_rclcpp_minimal_subscriber
WaitSetSubscriber
StaticWaitSetSubscriber
TimeTriggeredWaitSetSubscriber
demo_nodes_cpp_native
demo_nodes_cpp_native::Talker
composition
composition::Talker
composition::Listener
composition::NodeLikeListener
composition::Server
composition::Client
action_tutorials_cpp
action_tutorials_cpp::FibonacciActionClient
action_tutorials_cpp::FibonacciActionServer
使用 ROS 服务进行运行时组合,包括一个发布者和一个订阅者
在第一个 shell 中,启动组件容器:
ros2 run rclcpp_components component_container
打开第二个 shell 并通过 ros2
命令行工具验证容器是否在运行: