ROS2入门教程-在单个进程中组合多个节点
说明:
- 介绍如何在单个进程中组合多个节点
步骤:
- 查看工作区中已注册和可用的组件
$ ros2 component types
composition
composition::Talker
composition::Listener
composition::Server
composition::Client
- 启动组件容器
ros2 run rclcpp_components component_container
- 通过ros2命令行工具验证容器是否正在运行
$ ros2 component list
/ComponentManager
- 将返回加载组件的唯一ID以及节点名称
$ ros2 component load /ComponentManager composition composition::Talker
Loaded component 1 into '/ComponentManager' container node as '/talker'
- 运行另一个命令
$ ros2 component load /ComponentManager composition composition::Listener
Loaded component 2 into '/ComponentManager' container node as '/listener'
- 检查容器的状态
$ ros2 component list
/ComponentManager
1 /talker
2 /listener
- 使用ROS服务与服务器和客户端的运行时组合
ros2 run rclcpp_components component_container
- 运行另一个命令
ros2 component load /ComponentManager composition composition::Server
ros2 component load /ComponentManager composition composition::Client
- 使用ROS服务的编译时组合
ros2 run composition manual_composition
- 使用 dlopen 的运行时组合
ros2 run composition dlopen_composition `ros2 pkg prefix composition`/lib/libtalker_component.so `ros2 pkg prefix composition`/lib/liblistener_component.so
- 使用启动动作组合
ros2 launch composition composition_demo.launch.py
- 启动组件容器
ros2 run rclcpp_components component_container
- 通过ros2命令行工具验证容器是否正在运行
$ ros2 component list
/ComponentManager
- 返回加载组件的唯一 ID 以及节点名称
$ ros2 component load /ComponentManager composition composition::Talker
Loaded component 1 into '/ComponentManager' container node as '/talker'
$ ros2 component load /ComponentManager composition composition::Listener
Loaded component 2 into '/ComponentManager' container node as '/listener'
- 使用唯一 ID 从组件容器中卸载节点
$ ros2 component unload /ComponentManager 1 2
Unloaded component 1 from '/ComponentManager' container
Unloaded component 2 from '/ComponentManager' container
- 重新映射容器名称和命名空间
ros2 run rclcpp_components component_container --ros-args -r __node:=MyContainer -r __ns:=/ns
- 使用更新的容器名称加载组件
ros2 component load /ns/MyContainer composition composition::Listener
- 重新映射组件名称和命名空间,启动组件容器
ros2 run rclcpp_components component_container
- 重新映射名称和命名空间
# Remap node name
ros2 component load /ComponentManager composition composition::Talker --node-name talker2
# Remap namespace
ros2 component load /ComponentManager composition composition::Talker --node-namespace /ns
# Remap both
ros2 component load /ComponentManager composition composition::Talker --node-name talker3 --node-namespace /ns2
$ ros2 component list
/ComponentManager
1 /talker2
2 /ns/talker
3 /ns2/talker3
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号