turtlebot3-burger_150.png
turtlebot3-waffle-pi_150.png
turtlebot3-arm_150.png
walking-y2_150.png
turbot3-multi_150.png
turbot3-dl-ros1_150.png
turbot3-ai.png
turbot3-dl-ros2_150.png
turbot3-slam_150.png
turbot3-arm_150.png
turtlebot4-lite_150.png
turtlebot4-pro_150.png
turbot4-dl_150.png
turbot4-ai_150.png
aidriving-racebot_150.png
aidriving-autodrive_150.png
turtlebot-arm_150.png
openmanipulator-x_150.png
Home » ROS2入门教程 » ROS2入门教程-在单个进程中组合多个节点

ROS2入门教程-在单个进程中组合多个节点

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号

说明:

  • 介绍如何在单个进程中组合多个节点

步骤:

  • 查看工作区中已注册和可用的组件
$ 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


纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号


标签: ros2入门教程