您正在阅读的是开发版本的文档。有关最新发布的版本,请访问 Jazzy.
创建启动文件
目标 创建启动文件,运行复杂的 ROS 2 系统。
辅导水平: 中级
时间 10 分钟
先决条件
本教程使用 rqt_graph 和 turtlesim 打包。
您还需要使用自己喜欢的文本编辑器。
与往常一样,别忘了在 您打开的每个新终端.
背景介绍
ROS 2 中的启动系统负责帮助用户描述其系统的配置,然后按描述执行。系统配置包括运行哪些程序、在哪里运行、传递哪些参数,以及 ROS 特有的约定,通过为每个组件提供不同的配置,可以方便地在整个系统中重复使用组件。此外,它还负责监控已启动进程的状态,并对这些进程的状态变化做出报告和/或反应。
用 Python、XML 或 YAML 编写的启动文件可以启动和停止不同的节点,并触发和执行各种事件。参见 使用 Python、XML 和 YAML 编写 ROS 2 启动文件 了解不同格式的说明。提供这一框架的软件包是 发射
,它使用非 ROS 专用的 启动
下面的框架。
"(《世界人权宣言》) 设计文件 详细介绍了 ROS 2 发射系统的设计目标(目前尚未提供所有功能)。
任务
1 设置
创建一个新目录来存储启动文件:
mkdir launch
2 编写启动文件
让我们使用 海龟
包及其可执行文件。如上所述,这可以是 Python、XML 或 YAML 格式。
将完整的代码复制并粘贴到 launch/turtlesim_mimic_launch.py
锉刀
从 启动 舶来品 启动说明
从 launch_ros.actions 舶来品 节点
捍卫 生成发射描述():
返回 启动说明([
节点(
包装='turtlesim';,
命名空间='turtlesim1';,
可执行='turtlesim_node',
名字='sim';
),
节点(
包装='turtlesim';,
命名空间='turtlesim2';,
可执行='turtlesim_node',
名字='sim';
),
节点(
包装='turtlesim';,
可执行='模仿';,
名字='模仿';,
重置=[
('/input/pose';, '/turtlesim1/turtle1/pose';),
('/output/cmd_vel';, '/turtlesim2/turtle1/cmd_vel';),
]
)
])
将完整的代码复制并粘贴到 launch/turtlesim_mimic_launch.xml
锉刀
启动>;
节点 pkg="turtlesim"; exec="turtlesim_node"; 名称"sim"; namespace="turtlesim1";/>;
节点 pkg="turtlesim"; exec="turtlesim_node"; 名称"sim"; namespace="turtlesim2";/>;
节点 pkg="turtlesim"; exec=模仿; 名称模仿;>;
重新映射 从="/input/pose"; 至="/turtlesim1/turtle1/pose";/>;
重新映射 从="/output/cmd_vel"; 至="/turtlesim2/turtle1/cmd_vel";/>;
</node>;
</launch>;
将完整的代码复制并粘贴到 launch/turtlesim_mimic_launch.yaml
锉刀
启动:
- 网站:
包: "turtlesim";
执行: "turtlesim_node";
名字: "sim";
命名空间: "turtlesim1";
- 网站:
包: "turtlesim";
执行: "turtlesim_node";
名字: "sim";
命名空间: "turtlesim2";
- 网站:
包: "turtlesim";
执行: 模仿;
名字: 模仿;
重映射:
-
从: "/input/pose";
至: "/turtlesim1/turtle1/pose";
-
从: "/output/cmd_vel";
至: "/turtlesim2/turtle1/cmd_vel";
2.1 检查启动文件
上述所有启动文件都是在启动一个由三个节点组成的系统,它们都来自 海龟
软件包。该系统的目标是启动两个海龟模拟窗口,让一只海龟模仿另一只海龟的动作。
在启动两个 turtlesim 节点时,它们之间唯一的区别就是它们的命名空间值。独特的命名空间允许系统启动两个节点,而不会出现节点名称或主题名称冲突。该系统中的两只海龟通过相同的主题接收指令,并通过相同的主题发布它们的姿势。有了独特的命名空间,为不同海龟发送的信息就可以区分开来。
最后一个节点也来自 海龟
软件包,但可执行文件不同: 模仿
.该节点以重置的形式添加了配置细节。
模仿
's /input/pose
主题重新映射为 /turtlesim1/turtle1/pose
和它的 /output/cmd_vel
议题 /turtlesim2/turtle1/cmd_vel
.这意味着 模仿
将订阅 /turtlesim1/sim
的姿势主题,并将其重新发布为 /turtlesim2/sim
的速度指令主题进行订阅。换句话说 turtlesim2
将模仿 turtlesim1
的动作。
这些导入语句将一些 Python 启动
模块。
从 启动 舶来品 启动说明
从 launch_ros.actions 舶来品 节点
接下来,开始进行发射说明:
捍卫 生成发射描述():
返回 启动说明([
])
启动说明中的前两个操作将启动两个 turtlesim 窗口:
节点(
包装='turtlesim';,
命名空间='turtlesim1';,
可执行='turtlesim_node',
名字='sim';
),
节点(
包装='turtlesim';,
命名空间='turtlesim2';,
可执行='turtlesim_node',
名字='sim';
),
最后一个操作是启动带有重映射的模仿节点:
节点(
包装='turtlesim';,
可执行='模仿';,
名字='模仿';,
重置=[
('/input/pose';, '/turtlesim1/turtle1/pose';),
('/output/cmd_vel';, '/turtlesim2/turtle1/cmd_vel';),
]
)
前两个操作会启动两个海龟模拟窗口:
节点 pkg="turtlesim"; exec="turtlesim_node"; 名称"sim"; namespace="turtlesim1";/>;
节点 pkg="turtlesim"; exec="turtlesim_node"; 名称"sim"; namespace="turtlesim2";/>;
最后一个操作是启动带有重映射的模仿节点:
节点 pkg="turtlesim"; exec=模仿; 名称模仿;>;
重新映射 从="/input/pose"; 至="/turtlesim1/turtle1/pose";/>;
重新映射 从="/output/cmd_vel"; 至="/turtlesim2/turtle1/cmd_vel";/>;
</node>;
前两个操作会启动两个海龟模拟窗口:
- 网站:
包: "turtlesim";
执行: "turtlesim_node";
名字: "sim";
命名空间: "turtlesim1";
- 网站:
包: "turtlesim";
执行: "turtlesim_node";
名字: "sim";
命名空间: "turtlesim2";
最后一个操作是启动带有重映射的模仿节点:
- 网站:
包: "turtlesim";
执行: 模仿;
名字: 模仿;
重映射:
-
从: "/input/pose";
至: "/turtlesim1/turtle1/pose";
-
从: "/output/cmd_vel";
至: "/turtlesim2/turtle1/cmd_vel";
3 ros2 发射
要运行上文创建的启动文件,请进入之前创建的目录并运行以下命令:
cd 启动
ros2 launch turtlesim_mimic_launch.py
cd 启动
ros2 launch turtlesim_mimic_launch.xml
cd 启动
ros2 launch turtlesim_mimic_launch.yaml
备注
可以直接启动启动文件(如上所述),也可以由软件包提供启动文件。当启动文件由软件包提供时,语法为
ros2 启动 <package_name> <launch_file_name>;
您在 创建软件包.
备注
对于有启动文件的软件包,最好添加一个 执行依赖
依赖于 ros2launch
软件包的 package.xml
:
执行依赖关系;ros2launch</exec_depend>;
这有助于确保 玫瑰2 启动
命令在构建软件包后可用。它还能确保所有 启动文件格式 得到承认。
将打开两个图标窗口,您将看到以下内容 [信息]
消息,告诉你启动文件启动了哪些节点:
[INFO] [启动]:默认日志冗余度设置为 INFO
[INFO] [turtlesim_node-1]: 进程以 pid [11714] 启动
[INFO] [turtlesim_node-2]: 进程以 pid [11715] 启动
[INFO] [mimic-3]:进程以 pid [11716] 启动
要查看系统运行情况,请打开一个新终端并运行 玫瑰2 主题 酒吧
上的 /turtlesim1/turtle1/cmd_vel
话题,让第一只乌龟动起来:
ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y:0.0, z: 0.0}, angular:{x: 0.0, y:0.0, z: -1.8}}";
你会看到两只乌龟沿着相同的路径前进。

4 使用 rqt_graph 对系统进行自省
当系统仍在运行时,打开一个新终端并运行 rqt_graph
以更好地了解启动文件中节点之间的关系。
运行该命令:
rqt_graph

一个隐藏节点(即 玫瑰2 主题 酒吧
命令)将数据发布到 /turtlesim1/turtle1/cmd_vel
左边的主题 /turtlesim1/sim
节点被订阅。图表的其余部分显示了前面所描述的内容: 模仿
已订阅 /turtlesim1/sim
的姿势主题,并发布到 /turtlesim2/sim
的速度命令主题。
摘要
启动文件可简化运行具有许多节点和特定配置细节的复杂系统。您可以使用 Python、XML 或 YAML 创建启动文件,并使用 玫瑰2 启动
指挥。