ROS2入门教程—创建一个launch文件


  到现在为止,每次启动一个ROS2中的节点,我们都需要开启一个新的终端运行 ros2 run指令,如果机器人系统中的节点很多,这样就会非常麻烦,而且还需要对每个节点进行配置。ROS2针对这个问题,专门设计了launch启动文件,可以通过一个类似脚本的文件,一起启动多个节点并允许在文件中对节点进行配置。使用 ros2 launch命令运行单个launch文件将立即启动整个系统—所有节点及其配置。接下来我们就看看如何才能创建并使用一个launch文件。

1 配置

  首先创建一个launch文件夹,作为后续放置launch文件的目录:

mkdir launch

  接着,进入到上述文件夹,然后输入以下命令创建一个launch文件:

touch launch/turtlesim_mimic_launch.py

  可以看出,ROS2中的launch文件其实是一个python的脚本。

2 创建launch文件内容

  接下来我们尝试使用launch文件来启动小海龟仿真器中的几个节点,可以将以下内容拷贝到上面创建的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',
            name='sim'
        ),
        Node(
            package='turtlesim',
            node_namespace='turtlesim2',
            node_executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            node_executable='mimic',
            name='mimic',
            remappings=[
                ('/input/pose', '/turtlesim1/turtle1/pose'),
                ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
            ]
        )
    ])

  类似python程序一样,首先应该引用需要的模块。

from launch import LaunchDescription
from launch_ros.actions import Node

  接下来是launch文件起始的描述:

def generate_launch_description():
   return LaunchDescription([

   ])

  在LaunchDescription中有一个由三个节点组成的系统,都来自turtlesim功能包。该系统的目标是启动两个turtlesim窗口,让一只海龟模仿另一只海龟的动作。
  LaunchDescription中的前两个操作启动两个turtlesim窗口:

Node(
    package='turtlesim',
    node_namespace='turtlesim1',
    node_executable='turtlesim_node',
    name='sim'
),
Node(
    package='turtlesim',
    node_namespace='turtlesim2',
    node_executable='turtlesim_node',
    name='sim'
),

  请注意,这两个节点之间的唯一区别是它们的namespace(命名空间)。唯一的命名空间允许系统启动两个模拟器,而不存在节点名或话题名冲突。这个系统中的两只海龟都在同一话题上接收命令,并在同一话题上发布它们的姿态。如果没有唯一的命名空间,就无法区分两只海龟之间的消息。package表示节点所在的功能包,executable表示要运行的可执行文件名,name表示启动后的节点名。
  最后一个节点启动的是turtlesim功能包中的mimic节点:

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

  其中主要是在配置mimicremapping重映射参数。mimic的输入话题从/input/pose重映射为/turtlesim1/turtle1/pose,输出话题从/output/cmd_vel重映射为/turtlesim2/turtle1/cmd_vel。我们基本可以猜到,mimic节点通过订阅turtle1的位置,转换成对turtle2的速度指令发布出去,最后应该可以达到让turtle2模仿turtle1完成同样的运动。

3 启动launch文件

  要启动turtlesim_mimic_launch.py,请进入到先前创建的目录并运行以下命令:

cd launch
ros2 launch turtlesim_mimic_launch.py

  注意:这里我们可以直接启动launch文件,如果launch文件在功能包中的话,也可以用如下语法启动:

ros2 launch <package_name> <launch_file_name>

  执行上述命令之后,将打开两个小海龟仿真窗口,并且在终端中您将看到以下[INFO]消息,告诉您launch文件已启动的节点:

[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [sim-1]: process started with pid [11429]
[INFO] [sim-2]: process started with pid [11430]
[INFO] [mimic-3]: process started with pid [11431]

  使用ros2 topic list命令查看当前系统中存在的话题:

/parameter_events
/rosout
/turtlesim1/parameter_events
/turtlesim1/rosout
/turtlesim1/turtle1/cmd_vel
/turtlesim1/turtle1/color_sensor
/turtlesim1/turtle1/pose
/turtlesim2/parameter_events
/turtlesim2/rosout
/turtlesim2/turtle1/cmd_vel
/turtlesim2/turtle1/color_sensor
/turtlesim2/turtle1/pose

  为了验证turtle2是否会模仿turtle1运动,可以开启一个新终端,并在/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}}"

  你会看到两只乌龟按相同的路径运动。
在这里插入图片描述

4 使用rqt_graph观测系统

  为了看到更明确的节点关系,我们可以使用rqt_graph工具来观测下当前系统,运行下列命令:

rqt_graph

  弹出一个新窗口,显示如下信息:

在这里插入图片描述

  根据上述关系图,可以看出一个隐藏节点(您运行的ros2 topic pub命令)正在将数据发布到左侧的/turtlesim1/turtle1/cmd_vel话题,该话题是/turtlesim1/turtlesim节点订阅的。图的其余部分显示了前面所描述的内容:/turtle_mimic节点订阅/turtlesim1/turtlesim发布的位姿话题/turtlesim1/turtle1/pose,然后转化为速度指令/turtlesim2/turtle1/cmd_vel并发布到/turtlesim2/turtlesim

  launch文件简化了具有许多节点和特定配置详细信息的复杂系统的运行。您可以使用Python创建launch文件,并使用ros2 launch命令运行它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roar冷颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值