概要:这篇主要介绍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包和其执行文件,让我们一起创建一个ros2版launch文件:
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.下一步
注意:
你也可以使用XML和YAML来创建launch文件.你可以(https://docs.ros.org/en/foxy/Guides/Launch-file-different-formats.html)查看使用python创建的ros2版本与这个有啥不同.
下一节课,记录会回放数据,你会学习到另一个有用的工具,ros2bag.
其他
个人认为重点:
ros2专用版本launch文件,使用python来创建.
创建指令
touch xx.py
这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.
#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈
1069

被折叠的 条评论
为什么被折叠?



