ros2学习笔记9--创建一个launch文件(代码片段)

鸿_H 鸿_H     2022-12-03     575

关键词:

概要:这篇主要介绍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

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

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

ros2学习笔记22--使用launch启动/监听多个node节点(代码片段)

概要:这篇内容主要介绍如何使用launch启动/监听多个node节点环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现3.4使用launch启动/监听多个node节点ÿ... 查看详情

ros2学习笔记15--创建自定义ros2接口文件msg和srv(代码片段)

概要:这篇主要介绍如何创建定制型ros2接口文件msg和srv环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.7创建自定义ros2消息msg和srv文件(原文&#x... 查看详情

ros2学习笔记20--创建一个action(代码片段)

概要:这篇内容主要介绍如何创建一个action环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.3.1创建一个动作(原文:https://docs.ros.org/en/foxy/Tutori... 查看详情

ros2学习笔记12--创建ros2包(代码片段)

概要:这篇主要介绍如何创建ros2包环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.2创建自己第一个ros2包(原文:https://docs.ros.org/en/foxy/Tutor... 查看详情

ros2中的launch文件入门的6个疑问(代码片段)

本文记录了ROS2中launch文件学习过程中我个人觉得重要的6个基本问题,和大家分享,希望可以帮到初学者。疑问1:launch文件有什么用?通过launch文件,ROS2可以同时启动许多节点,这样简化了用命令行去多次启动... 查看详情

ros2中的launch文件入门的6个疑问(代码片段)

本文记录了ROS2中launch文件学习过程中我个人觉得重要的6个基本问题,和大家分享,希望可以帮到初学者。疑问1:launch文件有什么用?通过launch文件,ROS2可以同时启动许多节点,这样简化了用命令行去多次启动... 查看详情

ros2中的launch文件入门的6个疑问(代码片段)

本文记录了ROS2中launch文件学习过程中我个人觉得重要的6个基本问题,和大家分享,希望可以帮到初学者。疑问1:launch文件有什么用?通过launch文件,ROS2可以同时启动许多节点,这样简化了用命令行去多次启动... 查看详情

ros2学习笔记11--工作空间的创建(代码片段)

概要:这篇主要介绍工作空间的创建环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.1创建工作空间(原文:https://docs.ros.org/en/foxy/Tutorials/Wor... 查看详情

ROS2:如何将参数从一个启动文件传递到子启动文件

】ROS2:如何将参数从一个启动文件传递到子启动文件【英文标题】:ROS2:Howtopassargumentsfromonelaunchfiletoachildlaunchfile【发布时间】:2019-08-2816:22:43【问题描述】:我有一个主要的bringup.launch.py启动文件,其启动描述符包括child.launch.p... 查看详情

ros2学习笔记17--在类中使用参数(c++)(代码片段)

概要:这篇主要介绍在类中使用参数(C++)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.9在类中使用参数(C++)(... 查看详情

ros2学习笔记16--详述ros2接口(代码片段)

概要:这篇主要进一步介绍ros2接口.环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.8拓展ros2接口(原文:https://docs.ros.org/en/foxy/Tutorials... 查看详情

ros2学习笔记13--编写一个简单的发布器和侦听器(c++)(代码片段)

概要:这篇主要介绍编写发布器和侦听器的简单套路(C++)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.3编写一个简单的发布器和... 查看详情

ros2学习笔记14--编写一个简单的服务器和客户端(c++)(代码片段)

概要:这篇主要介绍c++版本服务端和客户端的编写环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.5编写一个简单的服务器和客户端(C+... 查看详情

ros2学习笔记25--ros2话题统计编写教程(c++)(代码片段)

概要:这篇内容主要介绍用c++编写能够统计话题的侦听器环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.1ros2话题统计教程(C++)(... 查看详情

ros2学习笔记19--探索ros2doctor工具(代码片段)

概要:这篇主要介绍ros2doctor工具环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.11探索ros2doctor工具(原文:https://docs.ros.org/en/foxy/Tutorials/Get... 查看详情

线代学习笔记

...科的血液,连这个都不懂的话,估计接下来的编程,机器学习,概率论全都会一脸茫然!如果强迫自己要一个时限里面学好的话,估计也是只有反效果。一天一个小时,深入的去了解她个中的美妙。首先当然是要建立一个良好的... 查看详情

ros2学习笔记10--使用ros2bag进行录制和回放数据(代码片段)

概要:这篇主要介绍使用ros2bag进行录制和回放数据环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.1.10录制和回放数据(原文:https://docs.ros.or... 查看详情

如何在 ROS2 中启动带参数的节点?

...ros2,但不知道如何使用ros2中的参数启动。对于ros1,我有一个启动文件,它引用了一个配置文件,并且从cpp代码中我使用node.getParam启动文件:<launch><argname="node_name 查看详情