前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROS 2启动-launch-

ROS 2启动-launch-

作者头像
zhangrelay
发布2019-12-19 19:20:31
1.7K0
发布2019-12-19 19:20:31
举报

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

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

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

ROS 2启动launch

1. 什么是launch?

翻译为启动文件未必准确

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

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

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

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

2. 编写launch:

使用如下命令: type nul > turtlesim_mimic_launch.py

具体代码如下:

代码语言:javascript
复制
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规范的。

导入模块:

代码语言:javascript
复制
from launch import LaunchDescription
from launch_ros.actions import Node

启动文件:

代码语言:javascript
复制
def generate_launch_description():
   return LaunchDescription([

   ])

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

启动描述中启动两个turtlesim窗口:

代码语言:javascript
复制
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:

代码语言:javascript
复制
Node(
    package='turtlesim',
    node_executable='mimic',
    node_name='mimic',
    remappings=[
      ('/input/pose', '/turtlesim1/turtle1/pose'),
      ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
    ]
)

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

4. 运行launch启动节点

代码语言:javascript
复制
ros2 launch turtlesim_mimic_launch.py

如果需要使用标准格式:

代码语言:javascript
复制
ros2 launch <package_name> <launch_file_name>

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

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

代码语言:javascript
复制
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差异比较大,需多查阅官网和源码。


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ROS 2启动launch
    • 1. 什么是launch?
      • 2. 编写launch:
        • 3. 解释一下吧:
          • 4. 运行launch启动节点
            • 5. 小结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档