一、Launch文件语法
luanch文件:通过XML文件实现多节点的配置和启动(可启动ROS Master)
launch文件中的根元素采用launch标签定义
如
<launch> #标签开头
<node pkg="turtlesim" name="sim1" type="turtlesim_node"/>
#启动节点,并将两个turtlesim_node节点分别命名成sim1和sim2
<node pkg="turtlesim" name="sim2" type="turtlesim_node"/>
</launch> #标签结束标志
一、<node>
- pkg 节点所在功能包名称
- type 节点可执行文件名称
- name 节点运行时的名称
- output 控制日志信息是否打印在屏幕上
- respawn 重启突然停止运行的节点
- required 表示必须要启动的是哪个节点
- ns 即name space,给每个节点做一个命名空间,避免节点间冲突
- args 类似于rosrun的功能
二、<param>/<rosparam>
<param>/<rosparam>
用于设置ROS系统运行中的参数,存储在参数服务器中
param
<param name="output_frame" value="odom"/>
- name:参数名
- value:参数值
rosparam
加载参数文件中的多个参数:
<rosparam file="params.yaml" command="load" ns="params"/>
三、<arg>
<arg>
是launch文件内部的局部变量,仅限于launch文件使用,和param一样都是参数的意思
<arg name="arg-name" default="arg-value">
- name:参数名
- value:参数值
调用方式
<param name="foo" value="$(arg arg-name)"/>
<node name="node" pkg="pakage" type="type" args="$(arg arg-name)"/>
四、重映射<remap>
重映射ROS计算图资源的命名(节点名)
<remap from="/turtlebot/cmd_vel" to="/cmd_vel"/>
- from:原命名
- to:映射之后的命名
五、嵌套<include>
包含其他launch文件,类似于C语言中头文件的包含
<include file="$(dirname)/other.launch"/>
- file:包含的其他launch文件路径
二、launch文件使用示例
(一)、param的launch实现
-
$ cd ~/catkin_ws/src
要进入src文件夹才能创建功能包 -
$ catkin_create_pkg learning_launch
launch功能包不需要依赖 -
$ cd learning_launch
-
$ mkdir launch
用于存放和管理功能包的其他资源,也可以叫其他名字 -
$ mkdir config
用于存放yaml文件,下面要用
在launch文件夹下创建simple.launch
输入
<launch>
<node pkg="learning_topic" type="person_subscriber" name="listener" output="screen" />
<node pkg="learning_topic" type="person_publisher" name="talker" output="screen" />
</launch>
在config文件夹下创建param.yaml
输入
A: 123
B: "hello"
group:
C: 456
D: "hello"
注意A,B冒号后面有空格,不然会报错
-
$ catkin_make
-
$ roslaunch learning_launch simple.launch
启动launch文件
在launch文件夹下创建turtlesim_parameter_config.launch
输入
<launch>
<param name="/turtle_number" value="2"/> #这种写法是写到外面,即turtle_number名称直接就是turtle_number
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<param name="turtle_name1" value="Tom"/> #这种写法是写到里面,即turtle_name1名称会包含前缀turtlesim_node(就是下面的rosparam list之后会显示的内容)
<param name="turtle_name2" value="Jerry"/>
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
</node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>
-
$ roslaunch learning_launch simple.launch
启动launch文件 -
$ roslaunch learning_launch turtlesim_parameter_config.launch
启动launch文件 -
$ rosparam list
新开终端,查看运行的节点数 -
$ rosparam get /turtle_number
回车后,终端显示2
(二)、tf坐标变换的launch实现
在launch文件夹下创建start_tf_demo_c++.launch
输入
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
</launch>
-
$ roslaunch learning_launch start_tf_demo_c++.launch
(三)、remap的launch实现
在launch文件夹下创建turtlesim_remap.launch
输入
<launch>
<include file="$(find learning_launch)/launch/simple.launch" />
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
</node>
</launch>
-
$ rostopic list
新开终端,节点名/turtle1/cmd_vel被修改为/cmd_vel