ROS2学习笔记9--创建一个launch文件
Posted 鸿_H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
包和其执行文件,让我们一起创建一个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
这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.
#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈
以上是关于ROS2学习笔记9--创建一个launch文件的主要内容,如果未能解决你的问题,请参考以下文章
ROS2学习笔记22--使用launch启动/监听多个node节点