ROS launch启动文件的理解与编写
简述
roslaunch PACKAGE_NAME LAUNCH_FILE_NAME
属性 | 属性作用 |
name="NODE_NAME" | 为节点指派名称,这将会覆盖掉ros::init() 定义的node_name |
pkg="PACKAGE_NAME" | 节点所在的包名 |
type="FILE_NAME" | 执行文件的名称如果是用Python编写的就填写xxx.py ,如果是cpp就写编译生成的可执行文件名 |
output="screen" | 终端输出转储在当前的控制台上,而不是在日志文件中 |
respawn="true" | 当roslaunch启动完所有该启动的节点之后,会监测每一个节点,保证它们正常的运行状态。对于任意节点,当它终止时,roslaunch 会将该节点重启 |
required="true" | 当被此属性标记的节点终止时,roslaunch会将其他的节点一并终止。注意此属性不可以与respawn="true" 一起描述同一个节点 |
launch-prefix = "command-prefix" | 相当于在执行启动命令时加上一段命令前缀 |
ns = "NAME_SPACE" | 这个属性可以让你在自定义的命名空间里运行节点 |
节点属性之节点元素的形式
<node pkg=”package-name” type=”executable-name” name=”node-name”/>
在节点标签末尾的斜杠“/”是必须的,但很容易忘。你也可以这样显式地给出结束标签:
<node pkg=”…”type=”…” name=”…”></node>
如果该节点有子节点,例如 remap 或者 param 元素,那么该显式结束标签是必不缺少的。还有就是name属性给节点指派了名称,它将覆盖任何通过调用 ros::int来赋予节点的名称。在默认状态下,从启动文件启动节点的标准输出被重定向到一个日志文件中,而不是在制台显示。该日志文件的名称是:
~/.ros/log/run_id/node_name-number-stout.log
其中,run_id 是节点管理器(master)启动时生成的一个唯一标示符。
节点属性之显示属性
某个单独的节点在控制台中输出信息,只需在节点元素中配置:output=”screen” 配置了该属性的节点会将标准输出显示在屏幕上而不是记录到日志文档。
节点属性之复位属性
节点属性之命名空间
名称重映射
重映射是基于替换的思想,每个重映射包含一个原始名称和一个新名称。每当节点使用重映射中的原始名称时,ROS客户端库就会将它默默地替换成其对应的新名称。例如,运行一个 turtlesime 的实例, 如果想要把海龟的姿态数据发布到话题/tim 而不是/turtle1/pose,就可以使用如下命令
rosrun turtlesim turtlesim_node turtle1/pose:=tim
通过启动文件的方式,只需在启动文件内使用重映射(remap)元素即可
<remap from=”turtle1/pose” to ”tim”/>
包含其他文件
如果想在启动文件中包含其他启动文件的内容( 包括所有的节点和参数),可以使用包含(include)元素
<include file=”$(find package-name)/path/launch-file-name”>
由于直接输入路径信息很繁琐且容易出错,大多数包含元素都使用查找(find)命令搜索功能包的位置来替代直接输入路径。
启动参数
roslaunch还支持启动参数,有时也简称为参数甚至args。在ROS中prarmeter和argument 是不同的,虽然翻译一样。parameter是运行中的ROS系统使用的数值,存储在参数服务器(parameter server)中,每个活跃的节点都可以通过 ros::param::get 函数来获取parameter的值,用户也可以通过rosparam来获得parameter的值而argument只在启动文件内才有意义他们的值是不能被节点直接获取的。
<arg name=”arg-name” default=”arg-value”/>
<arg name=”arg-name” value=”arg-value”/>
两者的唯一区别在于命令行参数
roslaunch xx yy.launch arg-name:=t
可以覆盖默认值default,但是不能覆盖参数值 value。用 $(arg arg-name) 在每个该替换出现的地方,roslaunch 都将它替换成参数值。