目标:创建launch文件以运行复杂的 ROS 2 系统。
教程级别:初学者
时间: 10分钟
背景
在到目前为止的教程中,您一直在为您运行的每个新节点打开新终端。随着越来越多的节点同时运行,创建更复杂的系统,打开终端和重新输入配置细节变得乏味。
launch文件允许您同时启动和配置多个包含 ROS 2 节点的可执行文件。
使用该命令运行单个launch文件将立即启动整个系统——所有节点及其配置。
ros2 launch
通过在终端中输入以下命令来创建一个名为 launch 的文件:
touch launch/turtlesim_mimic_launch.py
您还可以使用 GUI 进入系统的文件目录,并以此方式创建一个新文件。
在您喜欢的文本编辑器中打开新文件。
2 编写启动文件
turtlesim
让我们使用包及其可执行文件将 ROS 2 启动文件放在一起。
将完整代码复制并粘贴到turtlesim_mimic_launch.py
文件中:
from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='turtlesim', node_namespace='turtlesim1', node_executable='turtlesim_node', node_name='sim' ), Node( package='turtlesim', node_namespace='turtlesim2', node_executable='turtlesim_node', node_name='sim' ), Node( package='turtlesim', node_executable='mimic', node_name='mimic', remappings=[ ('/input/pose', '/turtlesim1/turtle1/pose'), ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'), ] ) ])
2.1 检查launch文件
这些 import 语句引入了一些 Python launch
模块。
from launch import LaunchDescription from launch_ros.actions import Node
接下来,启动描述本身开始:
def generate_launch_description(): return LaunchDescription([ ])
内部LaunchDescription
是一个由三个节点组成的系统,全部来自turtlesim
包。该系统的目标是启动两个 turtlesim 窗口,让一只乌龟模仿另一只乌龟的动作。
启动描述中的前两个操作启动两个 turtlesim 窗口:
Node( package='turtlesim', node_namespace='turtlesim1', node_executable='turtlesim_node', node_name='sim' ), Node( package='turtlesim', node_namespace='turtlesim2', node_executable='turtlesim_node', node_name='sim' ),
请注意,这两个节点之间的唯一区别是它们的名称空间值。独特的命名空间允许系统在没有节点名称或主题名称冲突的情况下启动两个模拟器。
该系统中的两只海龟都接收关于同一主题的命令,并在同一主题上发布它们的姿势。如果没有唯一的命名空间,就无法区分发送给一只乌龟或另一只乌龟的消息。
最后一个节点也来自turtlesim
包,但是不同的可执行文件:mimic
.
Node( package='turtlesim', node_executable='mimic', node_name='mimic', remappings=[ ('/input/pose', '/turtlesim1/turtle1/pose'), ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'), ] )
此节点以重新映射的形式添加了配置详细信息。
mimic
的/input/pose
主题被重新映射到/turtlesim1/turtle1/pose
,并且它的/output/cmd_vel
主题是/turtlesim2/turtle1/cmd_vel
。这意味着mimic
将订阅/turtlesim1/sim
pose 主题,并将其重新发布为/turtlesim2/sim
要订阅的 velocity command 主题。换句话说,turtlesim2
会模仿turtlesim1
的动作。
3 ros2发射
要启动turtlesim_mimic_launch.py
,请进入您之前创建的目录并运行以下命令:
cd launch ros2 launch turtlesim_mimic_launch.py
PS:可以直接启动一个launch文件(就像我们上面所做的那样),或者由一个包提供。当它由包提供时,语法是:
ros2 launch <package_name> <launch_file_name>
您将在后面的教程中了解有关创建包的更多信息。
将打开两个 turtlesim 窗口,您将看到以下[INFO]
消息,告诉您启动文件启动了哪些节点:
[INFO] [launch]: Default logging verbosity is set to INFO [INFO] [turtlesim_node-1]: process started with pid [11714] [INFO] [turtlesim_node-2]: process started with pid [11715] [INFO] [mimic-3]: process started with pid [11716]
要查看系统的运行情况,请打开一个新终端并运行有关主题的命令以使第一只乌龟移动:
ros2 topic pub
/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}}"
你会看到两只海龟都走同一条路。
隐藏节点(您运行的命令)正在向节点订阅的左侧主题发布数据。图表的其余部分显示了之前描述的内容:订阅了 的pose话题,并发布了速度命令话题。
ros2 topic pub
/turtlesim1/turtle1/cmd_vel
/turtlesim1/sim
mimic
/turtlesim1/sim
/turtlesim2/sim
概括
启动文件简化了运行具有许多节点和特定配置细节的复杂系统。您可以使用 Python 创建启动文件,并使用命令运行它们 :ros2 launch