ROS探索总结(五十六)—— launch文件
ROS 初级 - 解析 roslaunch 文件
1. launch文件简介
从 ROS 角度来看,机器人系统就是一堆 node 和 topic (再添加一些 parameter, service 等)构成的网络(rosgraph),其中每个 node 都可以完成一定的功能。通常一个机器人运行时要开启很多 node,如果一个 node 一个 node 的启动,比较麻烦。通过 launch文件以及 roslaunch 命令可以一次性启动多个 node,并且可以设置丰富的参数。
目前来看,官方 ros package 大部分都包含名为 launch 的文件夹,里面存放了 launch 文件。我们自己编写的 package 也应该尽量使用这种结构,方便“一键启动”。
2.Launch文件语法
launch文件采用xml格式。
例如:
<launch>
<node pkg="turtlrsim" name="sim1" type="turtlesim_node"/>
<node pkg="turtlrsim" name="sim2" type="turtlesim_node"/>
</launch>
<launch> : launch文件中的根元素采用<launch>标签定义
<node> :
<node pkg="package-name" name="node-name" type="executable-name" />
pkg : 节点所在的功能包名称
type:节点的可执行文件的名称
name:节点运行时的名称
其他的可选属性:output、respawn、required、ns、args
重映射: <remap>
<remap from="/turtlebot/cmd_vel" to="/cmd_vel"/>
from:原命名
to:映射之后的命名
嵌套: <include>
包含其他launch文件,类似c语言的头文件包含
<include file="$(dirname)/other.launch"/>
file:包含的其他的launch文件路径
3. 一些launch的实现
3.1 新建功能包
catkin_create_pkg learning_launch
3.2 simple launch
新建一个名为“simple.launch”的文件:
文件内部的内容:
<launch>
<node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
<node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />
</launch>
这个需要用到learning_topic功能包>>>>https://wws.lanzoui.com/i5HUZs56ibi
通过连接可以下载所有的源码文件:
编译及运行
编译:在~/catkin_make的目录下启动终端,并运行catkin_make。
运行:roslaunch 功能包名 文件名
roslaunch learning_launch simple.launch
效果:两个节点运行在一个终端中:
3.3 turtlesim_parameter_config.launch
新建文件:
同样的,新建一个文件,名为“ turtlesim_parameter_config.launch”:
用到param、rosparam:
<launch>
<param name="/turtle_number" value="2"/>
//设置海龟的数量两个,一个字典值
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
//设置节点,仿真器节点,turtlesim_node
<param name="turtle_name1" value="Tom"/>
<param name="turtle_name2" value="Jerry"/>
//设置海龟1和海龟2的名字
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
//加载参数文件param.yaml
</node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
//启动键盘控制节点
</launch>
新建文件夹config、新建param.yaml文件:
param.yaml文件的内容:
A: 123
B: "hello"
group:
C: 456
D: "hello"
查看一下参数:
rosparam list
3.4 start_tf_demo_c++.launch
海龟跟随案例,使用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>
3.5 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>