您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.
使用 ROS 2 启动来启动可组合节点
在 构图教程您已经了解了可组合节点以及如何通过命令行使用它们。在 启动教程您已经了解了启动文件以及如何使用它们来管理多个节点。
本指南将结合上述两个主题,教你如何为可组合节点编写启动文件。
设置
参见 安装说明 了解安装 ROS 2 的详情。
如果您从软件包中安装了 ROS 2,请确保有 熨烫图像工具
已安装。如果您下载了压缩包或从源代码构建了 ROS 2,那么它已经是安装的一部分了。
启动文件示例
下面是一个启动文件,可以用 Python、XML 和 YAML 启动可组合节点。启动文件都会执行以下操作:
使用重映射、自定义参数和额外参数实例化一个 cam2image 可组合节点
使用重映射、自定义参数和额外参数实例化 showimage 可组合节点
舶来品 启动
从 launch_ros.actions 舶来品 可组合节点容器
从 launch_ros.descriptions 舶来品 可组合节点
捍卫 生成发射描述():
"""生成包含多个组件的启动说明;
集装箱 = 可组合节点容器(
名字='image_container';,
命名空间='',
包装='rclcpp_components';,
可执行='component_container';,
可组合节点描述=[
可组合节点(
包装='image_tools',
插头='image_tools::Cam2Image';,
名字='cam2image';,
重置=[('/image';, '/burgerimage';)],
参数=[{'宽度';: 320, '高度';: 240, 'burger_mode': 正确, '历史';: 'keep_last';}],
额外参数=[{'use_intra_process_comms';: 正确}]),
可组合节点(
包装='image_tools',
插头='image_tools::ShowImage';,
名字='showimage';,
重置=[('/image';, '/burgerimage';)],
参数=[{'历史';: 'keep_last';}],
额外参数=[{'use_intra_process_comms';: 正确}])
],
产量='两者';,
)
返回 启动.启动说明([集装箱])
启动>;
node_container pkg="rclcpp_components"; exec="component_container"; 名称"image_container"; namespace="";>;
可组合节点 pkg="image_tools"; 插件="image_tools::Cam2Image"; 名称cam2image"; namespace="";>;
重新映射 从="/image"; 至="/burgerimage"; />;
参数 名称宽度"; value="320"; />;
参数 名称高度"; value="240"; />;
参数 名称"burger_mode"; value="true"; />;
参数 名称历史 value="keep_last"; />;
<extra_arg 名称"use_intra_process_comms"; value="true"; />;
</composable_node>;
可组合节点 pkg="image_tools"; 插件="image_tools::ShowImage"; 名称"showimage"; namespace="";>;
重新映射 从="/image"; 至="/burgerimage"; />;
参数 名称历史 value="keep_last"; />;
<extra_arg 名称"use_intra_process_comms"; value="true"; />;
</composable_node>;
</node_container>;
</launch>;
启动:
- 节点容器:
包: rclcpp_components
执行: 组件容器
名字: 图像容器
命名空间: ''
可组合节点:
- 包: 图像工具
插头: image_tools::Cam2Image
名字: cam2image
命名空间: ''
重映射:
- 从: /图片
至: /burgerimage
停止:
- 名字: 宽度
价值: 320
- 名字: 高度
价值: 240
- 名字: 汉堡模式
价值: 真
- 名字: 历史
价值: keep_last
extra_arg:
- 名字: 使用内部流程通信
价值: 'true';
- 包: 图像工具
插头: image_tools::ShowImage
名字: 显示图像
命名空间: ''
重映射:
- 从: /图片
至: /burgerimage
停止:
- 名字: 历史
价值: keep_last
extra_arg:
- 名字: 使用内部流程通信
价值: 'true';
将可组合节点加载到现有容器中
容器有时可以通过其他启动文件或命令行启动。在这种情况下,您需要将组件添加到现有容器中。为此,您可以使用 加载可组合节点
将组件加载到给定的容器中。下面的示例启动了与上述相同的节点。
从 启动 舶来品 启动说明
从 launch_ros.actions 舶来品 加载可组合节点, 节点
从 launch_ros.descriptions 舶来品 可组合节点
捍卫 生成发射描述():
集装箱 = 节点(
名字='image_container';,
包装='rclcpp_components';,
可执行='component_container';,
产量='两者';,
)
加载可组合节点 = 加载可组合节点(
目标容器='image_container';,
可组合节点描述=[
可组合节点(
包装='image_tools',
插头='image_tools::Cam2Image';,
名字='cam2image';,
重置=[('/image';, '/burgerimage';)],
参数=[{'宽度';: 320, '高度';: 240, 'burger_mode': 正确, '历史';: 'keep_last';}],
额外参数=[{'use_intra_process_comms';: 正确}],
),
可组合节点(
包装='image_tools',
插头='image_tools::ShowImage';,
名字='showimage';,
重置=[('/image';, '/burgerimage';)],
参数=[{'历史';: 'keep_last';}],
额外参数=[{'use_intra_process_comms';: 正确}]
),
],
)
返回 启动说明([集装箱, 加载可组合节点])
启动>;
节点 pkg="rclcpp_components"; exec="component_container"; 名称"image_container";>;
</node>;
<load_composable_node target="image_container";>;
可组合节点 pkg="image_tools"; 插件="image_tools::Cam2Image"; 名称cam2image";>;
重新映射 从="/image"; 至="/burgerimage"; />;
参数 名称宽度"; value="320"; />;
参数 名称高度"; value="240"; />;
参数 名称"burger_mode"; value="true"; />;
参数 名称历史 value="keep_last"; />;
<extra_arg 名称"use_intra_process_comms"; value="true"; />;
</composable_node>;
可组合节点 pkg="image_tools"; 插件="image_tools::ShowImage"; 名称"showimage"; namespace="";>;
重新映射 从="/image"; 至="/burgerimage"; />;
参数 名称历史 value="keep_last"; />;
<extra_arg 名称"use_intra_process_comms"; value="true"; />;
</composable_node>;
</load_compposable_node>;
</launch>;
启动:
- 节点容器:
包: rclcpp_components
执行: 组件容器
名字: 图像容器
命名空间: ''
可组合节点:
- 包: 图像工具
插头: image_tools::Cam2Image
名字: cam2image
命名空间: ''
重映射:
- 从: /图片
至: /burgerimage
停止:
- 名字: 宽度
价值: 320
- 名字: 高度
价值: 240
- 名字: 汉堡模式
价值: 真
- 名字: 历史
价值: keep_last
extra_arg:
- 名字: 使用内部流程通信
价值: 'true';
- 包: 图像工具
插头: image_tools::ShowImage
名字: 显示图像
命名空间: ''
重映射:
- 从: /图片
至: /burgerimage
停止:
- 名字: 历史
价值: keep_last
extra_arg:
- 名字: 使用内部流程通信
价值: 'true';
通过命令行使用启动文件
运行上述任何启动文件时,都可以使用 玫瑰2 启动
.将数据复制到本地文件中,然后运行:
ros2 launch <path_to_launch_file>;
进程内通信
上述所有示例都使用了一个额外参数来设置节点间的进程内通信。有关进程内通信的更多信息,请参阅 进程内通信教程.
Python、XML 或 YAML:我应该使用哪种语言?
参见 使用 Python、XML 和 YAML 编写 ROS 2 启动文件 了解更多信息。