学习参考文章:
ROS学习笔记-roslaunch文件的编写&用sh脚本控制launch文件启动顺序_launch文件怎么设置权限-CSDN博客
【ROS】从入门到急眼--launch文件详解_launch文件注释-CSDN博客
[ROS 系列学习教程] launch文件_roslaunch 教程-CSDN博客
4.2.6 launch文件标签之rosparam · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程
第三,四个比较直观理解,学习建议直接看第三,四条链接,下面只是自己学习总结加强记忆所书写,主要目的不是为了写给其他人看学习,是为了加强自己记忆;
launch文件在ROS中帮助一次性启动多个节点,节省了终端多次开启,下面是其中的一些书写格式:
先来看一个示例:
1.
在使用launch时注意写上<launch>,好像与python语言类似,通过缩进表示包含关系,初始打完这个之后下面就是调用的东西了;所有东西都调用完记得要输入</launch>表示关闭; ps:好像习惯把<>中的类型叫做标签下面也用标签来说明;
2.
在launch文件中注释的书写格式:
<!--注释内容-->
3.标签
launch中开启调用的类型文件不同也有一些细微差别,下面是launch调用的几种常用标签:
①launch标签:父级标签
launch文件的所有内容都包含在<launch> </launch>
之间。
②node标签:
格式:
<node 必选项,必选项,必须项,可选,可选 />
node标签也就是节点是ROS中最常见的,node标签里包含ROS图中的节点的名称属性name,该节点所在的包名pgk,以及节点的类型type。
必选:
1.name="NODE_NAME",用于指定节点名称,相当于给这个节点取一个名字,注册到Master的名称;
2.pkg=“package_name” 指定功能包,启动该功能包;
3.type=“file_name” 节点可执行文件的名称,执行该可执行文件;
相当于启动该节点,这个节点名字被设置为name,执行功能包pkg中的type可执行文件;
可选:
4.args=“arg1 arg2 arg3” 传递参数给节点;
5.machine=“machine_name” 在指定机器上启动节点,需要先使用 <machine> 指定机器;
6.respawn=“true|false” 如果节点退出,是否自动重启,默认 false;
7.respawn_delay=“设置时间”
8.ns=“namespace_name” 将该组节点分配到指定的命名空间启动。
9.clear_params=“true|false” 在启动前删除节点的私有命名空间中的所有参数,默认为 false
10.output=“log|screen” 日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log
11.launch-prefix=“prefix arguments” 命令/参数,用于预置到节点的启动参数。这是一项强大的功能,使您能够启用 gdb、valgrind、xterm、nice 或其他方便的工具。工具具体信息:roslaunch/教程/Valgrind或GDB中的Roslaunch节点 - ROS Wiki
12.if=“true|false” 如果为“true”,则节点将照常启动。如果为 'false',则不会启动节点。可用于评估参数/参数并根据结果运行,而无需每次都修改启动文件。
node的子级标签:
env标签:
不好解释直接上图: /*现在还没看见过也不清楚具体干哈怎么样,碰到了再来完善吧*/
remap标签:
节点的重映射,方便同一个 node 文件被应用到不同的环境中,用 remap 从外部修改一下 topic 即可,不需要改变源文件,感觉相当于节省搜索路径吧
如图:
param标签:
param标签用于在参数服务器中定义一些参数。可以是bool值、文本文件、二进制文件等。
-
name="命名空间/参数名"
参数名称,可以包含命名空间
-
value="xxx" (可选)
定义参数值,如果此处省略,必须指定外部文件作为参数源
-
type="str | int | double | bool | yaml" (可选)
指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:
-
如果包含 '.' 的数字解析未浮点型,否则为整型
-
"true" 和 "false" 是 bool 值(不区分大小写)
-
其他是字符串
-
rosparam标签:
param与rosparam两个参数调用差不多,都是把launch文件中的一些参数直接设置到rosmaster(ros中的节点管理器)里面以便于各个节点的使用,主要不同在于param只对一个参数进行操作,rosparam可以对多个参数进行操作,前提时把这些参数放到.yaml文件中。
-
command="load | dump | delete" (可选,默认 load)
加载、导出或删除参数
-
file="$(find xxxxx)/xxx/yyy...."
加载或导出到的 yaml 文件
-
param="参数名称"
-
ns="命名空间" (可选)
③include标签:
<include>
标签将另一个 roslaunch 文件导入到当前文件中。
示例:
必选:
1.file=“$(find pkg-name)/path/filename.xml” 要包含的文件的名称。
可选:
2.ns=“foo” 与上文中的ns作用大致相同,在指定命名空间导入文件。
3.clear_params=“true|false” 在启动之前删除 <include>
命名空间中的所有参数。此功能非常危险,应谨慎使用。必须指定ns
。默认值:false
。
4.pass_all_args=“true|false” 如果为 true
,则当前上下文中设置的所有参数,都将添加到为处理包含的文件而创建的子上下文中。可以执行此操作,而不是显式列出要传递的每个参数。
include子级标签:
<env>
⑤group标签:
设置命名空间,可以通过设置命名空间ns进行分组,避免调用冲突;
eg:分别将相同的话题放入不同的空间中调用;与remap中的ns感觉差不多;
⑥arg标签:
将参数传递给被包含的文件,标签是用于动态传参,类似于函数的参数,可以增强launch文件的灵活性
下图为其中格式:
其中:
name="param_name" 定义参数名字
default=“default value” 设置参数的默认值。不能与 value
属性组合(可选)
value="value" 设置参数值。不能与default属性组合使用 (可选)
doc="参数说明" 有点像注释的感觉。