ROS 2启动-launch-

啥,开了十几个窗口,机器人还没有动起来……

是时候了解一下launch文件啦。

课程目标:使用启动文件运行复杂的ROS 2系统。

视频教程(Linux):https://www.bilibili.com/video/BV1dv411B7i9/

ROS 2启动launch

1. 什么是launch?

翻译为启动文件未必准确

到目前为止,在教程中,一直在为运行的每个新节点打开新终端。当创建越来越多的节点同时运行更复杂的系统时,打开终端并重新输入配置详细信息将变得乏味和低效。

启动文件launch可以同时启动和配置许多包含ROS 2节点的可执行文件。

使用命令ros2 launch运行一个启动文件将立即启动整个系统-包括所有节点及其配置。

这里,只讲一个最简单的案例。

2. 编写launch:

使用如下命令:
type nul > 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'),
            ]
        )
    ])

3. 解释一下吧:

代码是python规范的。

导入模块:

from launch import LaunchDescription
from launch_ros.actions import Node

启动文件:

def generate_launch_description():
   return LaunchDescription([

   ])

内部LaunchDescription是一个由三个节点组成的系统

启动描述中启动两个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'
),

注意,两个节点之间的唯一区别是它们的node_namespace值。

唯一的名称空间使系统可以启动两个模拟器,而不会出现节点名或主题名冲突的情况。

该系统中的两个海龟都接收同一主题的命令,并在同一主题上发布其姿势。如果没有唯一的名称空间,就无法区分用于一只乌龟或另一只乌龟的消息。

可以试一下重名后问题在哪里???

然后是最后一个节点mimic:

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

该节点以重新映射的形式添加了配置详细信息。

4. 运行launch启动节点

ros2 launch turtlesim_mimic_launch.py

如果需要使用标准格式:

ros2 launch <package_name> <launch_file_name>

需要编写功能包中配置文件,此处不支持。

两个小龟同时运动命令如下:

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

看到两只乌龟都走相同的路径。

如何实现标准命令格式呢?

需要在CMakeLists.txt加入:

install(DIRECTORY launch
  DESTINATION share/${PROJECT_NAME})

5. 小结

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

该部分与ROS1差异比较大,需多查阅官网和源码。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhangrelay

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

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

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

打赏作者

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

抵扣说明:

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

余额充值