ROS 2 教程(入门级):创建一个launch文件

这篇教程介绍了如何创建和使用ROS 2 launch文件来启动和配置复杂系统,避免繁琐的多终端操作。内容包括创建launch文件夹、编写launch文件,使用rqt_graph查看节点间关系,以及通过ros2 launch命令启动系统。示例展示了如何启动两个turtlesim节点并实现一个节点模仿另一个节点的运动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标 创建一个launch文件来运行一个复杂的ROS 2系统。

背景知识

直到这个教程之前,你已经尝试过通过打开新的终端,运行新的节点。随着你创建越来越复杂的系统,系统中有越来越多需要同时运行的节点,打开多个终端并且重新输入设置就变得让人厌烦。

Launch文件让你可以同时启动并配置多个多执行的ROS 2 节点。

使用ros2 launch命令运行一个launch文件就可以一次性启动你的整个系统,包括全部的节点以及他们的配置文件。

前提条件

这个教程会用到rqt_graph以及turtlesim包

你也会使用到文本编辑器。

最好,别忘记了在每个新开启的终端上source你的ROS 2

任务

1. 设置

创建一个文件夹来存储你的launch文件:

mkdir launch

通过在终端输入下面的命令,创建一个名字叫turtlesim_mimic_launch.py的launch文件:

touch launch/turtlesim_mimic_launch.py

你也可以通过系统的文件夹使用图形界面的方式来创建一个新的文件。

使用你喜欢的文本编辑器打开这个新的文件。

2. 编写launch文件

让我们用turtlesim包以及它的可执行文件来组成一个ROS 2 launch文件。

复制下面的全部代码,并粘贴到turtlesim_mimic_launch.py文件里面:

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='turtlesim',
            namespace='turtlesim1',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            namespace='turtlesim2',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            executable='mimic',
            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

接下来开始的是launch文件的描述。

def generate_launch_description():
   return LaunchDescription([

   ])

LaunchDescription之内是由三个节点组成的系统,三个节点全部都是来自turtlesim包。这个系统的目标是启动两个turtlesim窗口,以及让一个turtle模仿另外一个的运动。

launch描述文件的前两个动作是启动两个turtlesim窗口:

Node(
    package='turtlesim',
    namespace='turtlesim1',
    executable='turtlesim_node',
    name='sim'
),
Node(
    package='turtlesim',
    namespace='turtlesim2',
    executable='turtlesim_node',
    name='sim'
),

注意到,两个节点之间的唯一差别就是它们的namespace的值不一样。不一样的namespace允许系统中启动两个模拟器,他们的节点名字和话题名字不会冲突。

两个turtle在这个系统中通过相同的话题接受命令,通过相同的话题发布他们的位姿。没有了独特的namespace的话,没有办法区分这些消息是给哪一个turtle的。

最后一个节点也是来自turtlesim包,但是它是不同的可执行文件:mimic

Node(
    package='turtlesim',
    executable='mimic',
    name='mimic',
    remappings=[
      ('/input/pose', '/turtlesim1/turtle1/pose'),
      ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
    ]
)

这个节点已经通过remapping的方式添加了配置细节。

mimic/input/pose话题被重新映射到 /turtlesim1/turtle1/pose 并且它的 /output/cmd_vel 话题被重新映射到/turtlesim2/turtle1/cmd_vel。这意味着 mimic 将会订阅 /turtlesim1/sim的位姿话题,并且重新发布它到 /turtlesim2/sim的速度命令所订阅的话题。也就是说, turtlesim2将会模仿 turtlesim1的运动。

3. ros2 launch

为了启动 turtlesim_mimic_launch.py,进入你之前创建的文件夹并运行下面的命令:

cd launch
ros2 launch turtlesim_mimic_launch.py

备注

它可以像我们上面那样直接运行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 这个话题让第一个turtle移动起来:

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}}"

你将会看到两个turtle沿着相同的路径移动。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0SjpFfN-1628648460396)(https://docs.ros.org/en/foxy/_images/mimic.png)]

4. 使用rqt_graph查看系统内部的运行情况

当系统还在运行的时候,打开一个新的终端,并且运行rqt_graph以便对你launch文件中的节点之间的关系有更好的理解。

运行下面的命令:

rqt_graph

在这里插入图片描述

一个隐藏的节点(你运行ros2 topic pub命令生成的)正在将数据发布到在左边的 /turtlesim1/turtle1/cmd_vel 这个话题,这个话题是被 /turtlesim1/sim 这个节点所订阅的。图中剩下的部分显示的是之前所描述的:mimic订阅 /turtlesim1/sim的位姿话题,然后发布到/turtlesim2/sim的速度命令话题。

总结

launch文件简化了拥有多个节点以及特定配置细节的复杂的系统的运行。你可以使用Python创建启动文件,然后通过ros2 launch命令运行它们。

学习更多关于ROS 2相关的内容,可以关注我或者订阅我的专栏:ROS 2专栏

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值