参考:古月21讲
launch文件介绍
launch文件:通过XML文件实现多节点的配置和启动(可自启动ROS Master)。
正常一套程序运行时节点是很多的,不可能每次运行都要一个一个手动打开。所以需要launch来启动所有节点和功能。
launch文件内的语法为xml
<launch>
\ <machine>
\ <node>
\ …,这些叫做标签。
name
\ address
\ type
\ …,这些叫做属性。
每一个node都相当是一个rosrun
命令
<launch>
<arg name="config_path" default = "$(find feature_tracker)/../config/euroc/euroc_config.yaml" />
<arg name="vins_path" default = "$(find feature_tracker)/../config/../" />
<node name="feature_tracker" pkg="feature_tracker" type="feature_tracker" output="log">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="vins_folder" type="string" value="$(arg vins_path)" />
</node>
<node name="vins_estimator" pkg="vins_estimator" type="vins_estimator" output="screen">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="vins_folder" type="string" value="$(arg vins_path)" />
</node>
<node name="pose_graph" pkg="pose_graph" type="pose_graph" output="screen">
<param name="config_file" type="string" value="$(arg config_path)" />
<param name="visualization_shift_x" type="int" value="0" />
<param name="visualization_shift_y" type="int" value="0" />
<param name="skip_cnt" type="int" value="0" />
<param name="skip_dis" type="double" value="0" />
</node>
</launch>
launch 文件语法
<launch>
<node pkg="turtlesim" name="sim1" type="turtlesim_node"/>
<node pkg="turtlesim" name="sim2" type="turtlesim_node"/>
</launch>
<launch>
launch文件中的根元素采用 标签来定义。
<node>
表示 启动节点<node pkg="package-name" type="executable-name" name="node-name" />
其中:
- pkg:节点所在的功能包名称;
- type: 节点的可执行文件名称;
- name:节点运行时的名称;
- output, respawn, required, ns, args
可以结合下面的语句来理解上面的node节点语句
$ rosrun turtlesim turtlesim_node
turtlesim
是功能包名称,turtlesim_node
是可执行文件名称
name 是ros系统中节点运行后节点的名字,name后面跟的字符串 跟之前学过的ros::init(argc,argv,"node_name")
中的node_name 是同一个东西。
就像是上面的代码中,sim1 会取代turtle_node中初始化的节点名。
- 参数设置
<param>
/<rosparam>
设置ROS系统运行中的参数,存储在参数服务器中。<param name="output_frame" value="odom"/>
其中:
- name:参数名;
- value:参数值;
param 指令可以设置单个参数,而rosparam 指令可以一次性操作多个文件。
加载参数文件中的多个参数:
<rosparam file="params.yaml" command="load" ns="params"/>
参数存放在.yaml
文件中,ns 是namespace的简写。
除了param可以设置ros参数,arg指令也是可以的
但是arg只能操作launch文件内部的局部变量,仅限于launch文件使用
<arg name="arg-name" default="arg-value"/>
其中:
- name:参数名
- default: 参数值
arg可以作为launch文件内部的参数,可以作为node初始化时使用的参数
调用:
<param name="foo" value="$(arg arg-name)"/>
<node name="node" pkg="package" type" args="$(arg arg-name)"/>