ROS2(Galactic) Launch系统
发射
创建启动文件
背景
ROS 2中的启动系统负责帮助用户描述其系统的配置,然后按所述执行。系统的配置包括要运行什么程序、在哪里运行它们、传递它们的参数,以及ROS特定的约定,这些约定通过为每个组件提供不同的配置,使得在整个系统中重用组件变得容易。它还负责监测启动的进程的状态,并报告和/或对这些进程的状态变化作出反应。
用Python、XML或YAML编写的启动文件可以启动和停止不同的节点,也可以触发和处理各种事件。有关不同格式的描述,请参见使用Python、XML和YAML for ROS 2启动文件。提供此框架的包是launch_ros,它使用下面的非ros特定的启动框架。
设计文件详细说明了ROS 2发射系统的设计目标(目前并非所有功能都可用)。
任务
-
设置
创建新目录以存储启动文件: -
编写启动文件
让我们使用turtlesim包及其可执行文件组合一个ROS2启动文件。
如上所述,这可以是Python、XML或YAML。
将完整的代码复制并粘贴到launch/turlsim_mimic_launch.py文件中:- 检查启动文件
上面启动文件的所有都在启动一个由三个节点组成的系统,所有这些节点都来自于turtlesim包。
该系统的目标是启动两个海龟窗口,让一只海龟模仿另一只的动作。
当启动两个turtlesim节点时,它们之间唯一的区别是命名空间。
唯一的命名空间允许系统启动两个节点,而不会出现节点名或主题名冲突。
这个系统中的两个乌龟都接收同一主题的命令,并在同一主题上发布它们的姿势。
通过唯一的命名空间,可以区分针对不同乌龟的消息。
最后一个节点也来自于turtlesim包,但有一个不同的可执行文件:mimic。
此节点以重新映射的形式添加了配置详细信息。
mimic的/input/pose主题被重新映射到/turtlesim1/turtle1/pose,它的/output/cmd_vel主题被映射到/turtlesim2/turtle1/cmd_vel。
这意味着mimic将订阅/turtlesim1/sim的姿势主题,并将其重新发布给/turtlesim2/sim的速度命令主题以供订阅。
换句话说,turtlesim2将模仿turtlesim1的动作。
这些导入语句引入了一些Python启动模块。
接下来,启动说明本身开始:
启动说明中的前两个操作将启动两个turtlesim窗口:
最后一个动作将启动带有重映射的模拟节点:
- 检查启动文件
-
ros2 launch
要运行上面创建的启动文件,请进入前面创建的目录并运行以下命令:
cd launch
ros2 launch turtlesim_mimic_launch.py
可以直接启动启动文件(如上所述),也可以由包提供。
当它由包提供时,语法为:ros2 launch <package_name> <launch_file_name>
对于带有启动文件的包,最好在包的package.xml中添加对ros2launch包的exec_depend
依赖:<exec_depend>ros2launch</exec_depend>
这有助于确保在构建包后ros2 launch
命令可用。
它还确保识别所有启动文件格式。
将打开两个turtlesim窗口,您将看到以下[INFO]消息,告诉您启动文件已启动的节点:
要查看运行中的系统,请打开一个新终端并在/turtlesim1/turtle1/cmd_vel主题上运行ros2 topic pub
命令,以使第一只乌龟移动:
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}}"
你会看到两只乌龟沿着同一条路走。
- 用
rqt_graph
自省系统
当系统仍在运行时,打开一个新终端并运行rqt_graph
以更好地了解启动文件中节点之间的关系。
运行命令:
rqt_graph
一个隐藏节点(您运行的ros2 topic pub
命令)正在将数据发布到左侧的/turtlesim1/turtle1/cmd_vel主题,/turtlesim1/sim节点订阅了该主题。
图的其余部分显示了前面所述的内容:mimic订阅了/turtlesim1/sim的姿势主题,并发布到/turtlesim2/sim的速度命令主题。
总结
启动文件简化了运行具有许多节点和特定配置细节的复杂系统。
您可以使用Python、XML或YAML创建启动文件,并使用ros2 launch
命令运行它们。
将启动文件集成到ROS2包中
背景
在上一个教程中,我们看到了如何编写独立的启动文件。
本教程将展示如何将启动文件添加到现有包中,以及通常使用的约定。
任务
-
创建包
创建包所在的工作区:
mkdir -p launch_ws/src
cd launch_ws/src
ros2 pkg create py_launch_example --build-type ament_python
-
创建用于保存启动文件的结构
按照惯例,包的所有launch文件都存储在包内部的launch目录中。
确保在上面创建的包的顶层创建一个启动目录。
对于Python包,包含包的目录应如下所示:
为了让colcon找到启动文件,我们需要使用setup的data_files参数将启动文件通知Python的安装工具。
在setup.py文件中:
-
编写启动文件
在启动目录中,创建一个名为my_script_launch.py的新启动文件。
建议使用_launch.py作为Python启动文件的文件后缀,但不是必需的。
启动文件应定义generate_launch_description()
函数,该函数返回启动。
由ros2 launch
动词使用的LaunchDescription()
。
-
构建和运行启动文件
转到工作区的顶层并构建它:
colcon build
在colcon构建成功并获得工作空间源之后,您应该能够按如下方式运行启动文件:
ros2 launch py_launch_example my_script_launch.py
文档
启动文档提供了有关launch_ros中也使用的概念的更多详细信息。
启动能力的其他文件/示例即将发布。
在这期间,查看源代码。
使用替换
背景
启动文件用于启动节点、服务和执行流程。
这组操作可能有参数,这些参数会影响它们的行为。
可以在参数中使用替换,以在描述可重用启动文件时提供更大的灵活性。
替换是仅在执行启动描述期间计算的变量,可用于获取特定信息,如启动配置、环境变量或计算任意Python表达式。
本教程显示了ROS2启动文件中替换的使用示例。
使用替换
-
创建并设置包
创建一个名为launch_tutorial, build_type为ament_python的新包:
ros2 pkg create launch_tutorial --build-type ament_python
在该包中,创建一个名为launch的目录:
mkdir launch_tutorial/launch
最后,确保添加对setup.py的更改,以便安装启动文件:
-
父启动文件
让我们创建一个启动文件,该文件将调用并向另一启动文件传递参数。
为此,请创建一个example_main.launch.py文件。
-
替换示例启动文件
现在创建一个example_substitutions.launch.py文件。
-
构建包
转到工作区的根目录,并构建包:
colcon build
启动示例
现在可以启动example_main.launch.py文件。
ros2 launch launch_tutorial example_main.launch.py
这将执行以下操作:
- 启动一个蓝色背景的turtlesim节点
- 生第二只海龟
- 将颜色更改为紫色
- 如果提供的
background_r
参数为200
且use_provided_red
参数为True
,则在两秒钟后将颜色更改为粉红色
修改启动参数
如果要更改提供的启动参数,可以在example_main.launch中的launch_arguments字典中更新它们。py或启动example_substitions.launch。py和首选参数。要查看可能提供给启动文件的参数,请运行以下命令:
ros2 launch launch_tutorial example_substitutions.launch.py --show-args
文档
发布文档提供了有关可用替代品的详细信息。
总结
在本教程中,您了解了如何在启动文件中使用替换。
您了解了它们创建可重用启动文件的可能性和能力。
现在,您可以了解有关在启动文件中使用事件处理程序的更多信息,这些文件用于定义一组复杂的规则,这些规则可用于动态修改启动文件。
使用事件处理程序
背景
ROS2中的启动是一个执行和管理用户定义的进程的系统。
它负责监测其启动的进程的状态,并报告这些进程的状态变化并作出反应。
这些更改称为事件,可以通过向启动系统注册事件处理程序来处理。
可以为特定事件注册事件处理程序,并可用于监视进程的状态。
此外,它们还可以用于定义一组复杂的规则,这些规则可以用于动态修改启动文件。
本教程显示了ROS2启动文件中事件处理程序的使用示例。
使用事件处理程序
- 事件处理程序示例启动文件
创建一个名为example_event_handlers.launch.py的新文件。
构建包
转到工作区的根目录,并构建包:
colcon build
启动示例
现在可以启动example_event_handlers.launch.py文件。
ros2 launch launch_tutorial example_event_handlers.launch.py turtlesim_ns:='turtlesim3' use_provided_red:='True' new_background_r:=200
这将执行以下操作:
- 启动一个蓝色背景的turtlesim节点
- 生第二只海龟
- 将颜色更改为紫色
- 如果提供的
background_r
参数为200
且use_provided_red
参数为True
,则在两秒钟后将颜色更改为粉红色 - 关闭turtlesim窗口时关闭启动文件
此外,在以下情况下,它会将消息记录到控制台:
- turtlesim节点启动
- 执行生成操作
- 执行change_background_r操作
- 执行change_background_r_conditioned操作
- 龟节点退出
- 启动过程被要求关闭。
总结
在本教程中,您了解了如何在启动文件中使用事件处理程序。
您了解了它们的语法和用法示例,以定义一组复杂的规则来动态修改启动文件。
管理大型项目
背景
本教程介绍了为大型项目编写启动文件的一些技巧。
重点是如何构造启动文件,以便在不同的情况下尽可能地重用它们。
此外,它还介绍了不同ROS2启动工具的使用示例,如参数、YAML文件、重映射、名称空间、默认参数和RViz配置。
介绍
机器人上的大型应用通常涉及多个互连节点,每个节点可以有许多参数。
在海龟模拟器中模拟多只海龟可以作为一个很好的例子。
乌龟模拟由多个乌龟节点、世界配置、TF广播和收听节点组成。
在所有节点之间,存在大量影响这些节点行为和外观的ROS参数。
ROS 2启动文件允许我们启动所有节点并在一个位置设置相应的参数。
教程结束时,您将构建launch_turtlesim.launch。py启动文件。
这个启动文件将启动不同的节点,负责模拟两个turesim模拟,启动TF广播和侦听器,加载参数,并启动RViz配置。
在本教程中,我们将介绍此启动文件以及使用的所有相关功能。