ROS2学习笔记9--创建一个launch文件

概要:这篇主要介绍launch文件

环境:ubuntu20.04,ros2-foxy,vscode

最后没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.

2.1.9创建一个launch文件(原文:https://docs.ros.org/en/foxy/Tutorials/Launch-Files/Creating-Launch-Files.html

>>教程>>创建一个launch文件

你正阅读的是ros2较老版本(Foxy),但仍然支持的说明文档.想查看最新版本的信息,请看galactic版本链接( https://docs.ros.org/en/galactic/Tutorials.html

创建一个launch文件

目标:创建一个launch文件去运行复杂的ros2系统

课程等级:初级

时长:10min

目录

1.背景
2.预备知识
3.步骤
3.1设置
3.2编写launch文件
3.3 ros2 launch
3.4使用rqt_graph来探索系统
4.总结
5.下一步

1.背景

课程到目前为止,你每运行一个节点,就得新开一个终端.当你创建的是有越来越多节点需要同时运行的复杂系统,开新终端加载配置的操作会变得繁琐且无聊.

launch文件可以让你启动并配置一定数量的执行文件,同时包含ros2节点.

使用ros2 launch指令启动一个简单的launch文件,一次性启动整个包含所有的节点以及配置的系统.

2.预备知识

这节课使用到rqt_graph和turtlesim包.

你将需要用到你喜欢的文本编辑器

老规矩,别忘记在新打开终端source一下配置文件(环境变量)(个人,如果ros2的环境变量写到启动脚本.bashrc里面,没必要再source一次了).

3.步骤

3.1设置

创建一个新目录保存launch文件:

mkdir launch

终端输入如下指令,创建turtlesim_mimic_launch.py名字launch文件:

touch launch/turtlesim_mimic_launch.py

你也可以在图像化界面打开系统目录来创建这个文件.

3.2编写launch文件

使用turtlesim包和其执行文件,让我们一起创建一个ros2launch文件:

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'),
            ]
        )
    ])

3.2.1 launch文件的解析

导入声明使用python的launch模块

from launch import LaunchDescription
from launch_ros.actions import Node

接着,这个launch文件描述开始为:

def generate_launch_description():
   return LaunchDescription([

   ])

LaunchDescription里面放着由三个节点组成的系统,并且节点都属于turtlesim包.这个系统的目地是开启两个turtlesim窗口,并且一个小乌龟模仿其他的来运动.

首先,launch描述的两个动作会启动两个turtlesim窗口:

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

注意,两个节点只是它们的命名空间不一样.不同的工作空间,可以让系统开启两个仿真器,但不会引起节点名称以及话题名字冲突.

这个系统可以让小乌龟们通过同样的话题来获取指令和发送自身位置.缺少不同命名空间的话,这些小乌龟来是无法区分消息归属的.

最后一个节点也是来源turtlesim包,但是不同点在于可执行文件为mimic

Node(
    package='turtlesim',
    executable='mimic',
    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的位置话题,并且再发布到/turtlesim2/sim的速度指令话题以供订阅.换句话说,turtlesim2会模仿turtlesim1的运动.

3.3 ros2 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] [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]

为了观察系统动作,新开终端,对话题/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}}"

你会看见两个小乌龟有如下轨迹:
在这里插入图片描述

3.4使用rqt_graph来探索系统

系统还在运行时候,新开一个终端启动rqt_graph,可以更好理解launch文件中节点间的关系.

运行指令:

rqt_graph

在这里插入图片描述

一个(图中)左侧隐藏(没显示)节点(当你运行ros2 topic pub这个指令时)正在发布数据到话题/turtlesim1/turtle1/cmd_vel,而节点/turtlesim1/sim正在订阅该话题.剩下的图表明我们前面所说的,mimic正在订阅/turtlesim1/sim的位置话题,同时发布到/turtlesim2/sim的速度指令话题.

4.总结

launch文件可以简化带有许多节点和专用配置细节的复杂系统启动.你可以使用python来创建launch文件,通过ros2 launch指令来运行.

5.下一步

注意:
你也可以使用XMLYAML来创建launch文件.你可以(https://docs.ros.org/en/foxy/Guides/Launch-file-different-formats.html)查看使用python创建的ros2版本与这个有啥不同.

下一节课,记录会回放数据,你会学习到另一个有用的工具,ros2bag.

其他

个人认为重点:

ros2专用版本launch文件,使用python来创建.

创建指令

touch xx.py

这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.

#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建一个ROSlaunch文件,你可以按照以下步骤进行操作: 1. 首先,在你的ROS工作空间中找到你想要创建launch文件的功能包。可以使用命令`cd <workspace>/src/<package_name>`进入该功能包的目录。 2. 在功能包的目录下创建一个名为`launch`的文件夹。你可以使用命令`mkdir launch`来创建。 3. 进入`launch`文件夹,使用文本编辑器创建一个新的launch文件。你可以使用命令`touch <launch_file_name>.launch`来创建一个空的launch文件。 4. 打开这个新创建launch文件,并按照你的需求编写launch文件的内容。你可以参考ROSlaunch文件语法和示例来编写你的launch文件。在launch文件中,你可以指定要启动的节点、节点的参数配置以及节点之间的关系等。 5. 保存并关闭launch文件。 6. 现在,你可以使用`ros2 launch`命令来启动你的launch文件。使用命令`ros2 launch <package_name> <launch_file_name>`,将会启动整个系统,包括所有在launch文件中指定的节点和它们的配置。 总结起来,要创建一个ROSlaunch文件,你需要在功能包中创建一个名为`launch`的文件夹,并在其中创建一个launch文件。然后,按照你的需求编写launch文件的内容,并使用`ros2 launch`命令来启动该launch文件。 #### 引用[.reference_title] - *1* *3* [ROS2入门教程—创建一个launch文件](https://blog.csdn.net/qq_29923461/article/details/120404577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ROS学习(4)——launch文件的编写](https://blog.csdn.net/bulletstart/article/details/130794565)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值