ROS中launch使用

Camill

许多ROS软件包都带有“启动文件”,即launch文件,launch文件是通过

roslaunch功能包运行的,命令行格式如下:

1
$ roslaunch package_name file.launch

这些启动文件通常会为软件包提供一组节点,这些节点聚合了一些功能,通过roslaunch命令同时启动这些节点。

文件格式

launch文件采用XML格式书写。

浏览顺序

roslaunch浏览XML文件是一行一行运行的。按深度优先遍历进行处理:标签将按顺序进行浏览,标签值取最后的设定。因此,如果一个参数有多个设置,则将使用为该参数指定为最后一个值。

标签(Tag)

launch文件标签常用的有以下几种:

标签 描述
launch 根元素
node 最常见的标签,用于启动和关闭节点
remap 节点重映射
group launch组
arg 允许在命令行、多个文件中传递参数
param 参数服务器上设置的参数
rosparam YAML文件从ROS参数服务器加载和转储参数
include 导入launch文件

属性

属性是标签中带有的键值对,用于指定标签的参数。

如:

1
<arg name="debug" default="false" />

其中标签是 arg,属性是 namedefault

node

最常见的标签,用于启动和关闭节点。roslaunch不保证节点开始的顺序。所以无法从外部知道何时完全初始化节点,所有启动的代码都必须能够按任意顺序启动。

例如:

1
<node name="listener1" pkg="rospy_tutorials" type="listener.py" args="--test" respawn="true" />

属性

  • name 节点类型
  • pkg 功能包名
  • type 功能包中可执行文件

以上是必须参数

  • args 将参数传递给节点
  • respawn 如果退出,则自动重新启动该节点。默认为false
  • output log | screen 如果为 screen ,则来自该节点的 stdout / stderr 将被发送到屏幕。如果为 log ,则 stdout / stderr 输出将发送到$ ROS_HOME / log中的日志文件,并且stderr将继续发送到屏幕。默认值为 log

include

该标签可以将另一个roslaunch XML文件导入当前文件。 它将被导入到文档的当前范围内,包括 groupremap 标记。 除 master 标记外,将导入引用文件中的所有内容: master 标签仅在顶级文件中服从。

例如:

1
2
3
4
5
6
7
8
9
<include file="$(find eros_moveit_config)/launch/move_group.launch">
<arg name="allow_trajectory_execution" value="true"/>
<arg name="fake_execution" value="false"/>
<arg name="fake_execution_type" value="$(arg fake_execution_type)" />
<arg name="info" value="true"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="pipeline" value="$(arg pipeline)"/>
<arg name="load_robot_description" value="$(arg load_robot_description)"/>
</include>

属性

  • file=”$(find pkg-name)/path/filename.launch”。需要嵌套的文件的路径。

param和rosparam

常用方式:

1
2
3
4
5
<arg name="ip" default="10.5.5.100"/>
<param name="ip" value="$(arg ip)" type="str"/>
<rosparam command="load" file="$(find eros_rviz_plugin)/config/calibration_cfg.yaml" />
<rosparam command="load" file="$(find eros_rviz_plugin)/config/hsv_cfg.yaml" />
<rosparam command="load" file="$(find eros_rviz_plugin)/config/cameraPos_cfg.yaml" />

group、if、unless、arg、include

常用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<arg name="camera" default="false" />
<arg name="sim" default="false" />
<arg name="vr" default="false" />
<arg name="use_camera_sucker" default="false" />

<group if="$(arg sim)">
<node pkg="eros_interface" type="sim_ctrl_srv" name="sim_ctrl_srv" />
<group if="$(arg vr)">
<include file="$(find eros_moveit_config)/launch/rvizMove_exec.launch" >
<arg name="use_camera_sucker" value="$(arg use_camera_sucker)" />
</include>
</group>
<group unless="$(arg vr)">
<include file="$(find eros_moveit_config)/launch/simMove_exec.launch" >
<arg name="use_camera_sucker" value="$(arg use_camera_sucker)" />
</include>
</group>
</group>

<group unless="$(arg sim)">
<node pkg="eros_driver" type="eros_driver" name="eros_driver" output="screen" />
<include file="$(find eros_moveit_config)/launch/realMove_exec.launch" >
<arg name="use_camera_sucker" value="$(arg use_camera_sucker)" />
</include>
</group>

这段分别定义了四个arg,均为bool类型

然后再定义了两个group,属性为ifunless

就像 ifelse 一样,if 表示条件为真时执行下面的内容,unless 表示条件为假时执行下面的内容。

可以参考以上写法进行条件判断和传参

  • 标题: ROS中launch使用
  • 作者: Camill
  • 创建于 : 2024-01-23 15:06:02
  • 更新于 : 2024-07-25 02:50:26
  • 链接: https://camill.love/note/launch/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论