launch文件就好比一个封装好的命令库,我们按照在终端中输入的代码指令,全部按照launch语言格式封装在一个launch文件中,这样以后执行的时候,就可以不用开很多终端,一条一条输入代码指令。
lauch文件的语言风格很想我之前学爬虫的时候网页代码的风格。(rosmaster也不用单开了。)
launch
<launch>根元素用<launch>标签来定义<launch>
node
<node node中封装的时是启动节点/ >
语法:
<node pkg="package-name(功能包的名字)" type="executable-name(执行器名字。其实就是代码中定义的节点名字,之前我们在CMakeList中把cpp文件做成一个可执行文件,就是那个名字,py的程序就是多个.py)" name="(这里是,该节点运行后的节点名字,其实就终端执行时,__name):=新定义的节点的名字"/>
其余可选属性
以下可选属性是和name、pkg、type同级的,均用空格间隔即可。
output:控制打印当前节点信息到当前终端中
respawn:控制当节点出错是,是否重启节点的
required:控制某个节点是否一定要启动的
ns:全称是name space,给节点加命名空间前缀的,避免节点见的冲突。
args:给节点输入参数的。C++用这个,py用的param送入value值
C++ Python
参数设置
这一段特别的是在向一个节点送入参数的视乎,node最后没有/,在param语句结束后要加一行</node>
param
用于设置ROS系统中运行中的参数,并存在参数服务器中。
<param name="output_frame" value="odom" />
封装在节点内的参数,就在名称前多出来节点名那一段的命名空间,比如说turtle_name1前面有节点命名。
rosparam
用于加载参数文件中的多个参数。
<rosparam file="param.yaml" command="load" ns="params" />
arg
用于launch文件内部的局部变量,仅限于launch文件使用。注意它和全局参数param的区别,其实就是全局变量和局部变量的区别。定义方法如下:
<arg name="arg-name" default="arg-value"/>
哪么如何调用这个arg定义的参数呢。既然说了是launch文件内部的参数,自然也智能在文件内部调用。
<param name="foo" value="$(arg arg-name)" />
<node name="node" pkg="package" type="type" args="$(arg arg-name)" / >
remap
重映射,就是改那些带有/的名字,也就是那些消息,服务的名字,这通常使用在节点输出通讯联络节点变更导致的映射关系发生变化的情况下。from:原名,同:映射之后的命名。
<remap form="turtlebot/cmd_vel" to="/cmd_vel" />
include
像c++ 语言一样引入其他launch文件。
<include file="$(dirname)/other.launch" />
更多标签可见wiki.ros.org/roslaunch/XML
编译
roslaunch learning_launch simple.launch