ROS中launch文件使用
一、launch文件的基本构成如下:
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
</launch>
1、launch
XML文件必须要包含一个根元素,launch中的根元素采用标签定义。
2、 node
启动文件的核心是启动ros节点,采用node标签定义:
pkg表示包的名称,type表示可执行文件名称,name表示运行节点的名称。
3、其他设置
output = "screen" //将节点的输出打印到屏幕终端,默认输出为日志文档。
launch-prefix = "gnome-terminal -e" //为该节点保留一个独立的终端
respawn = "true" //复位属性,该节点停止时,会自动重启,默认为false。
required = "true" //必要节点,该节点终止时,launch文件中的其他节点也会被终止。
ns = "namespace" //命名空间,为节点内的相对名称添加命名空间前缀。
args = "arguments" //节点需要的输入参数
二、参数设置
1、param
launch文件中通过元素加载parameter;launch文件执行后,parameter就加载到了ROS的参数服务器上。每个活跃的节点都可以通过ros::param::get()接口来获取parameter的值,用户也可以在终端通过rosparam命令获得parameter的值。
<param name="my_value" value="1.0"/> #参数值为1.0 的参数my_value放入了ros参数服务器
也可以使用.yaml文件加载
<rosparam file="/param.yaml" command="load"/>
如果需要获取某些参数,可以使用以下方法:
(1)ros::param::get()接口:
bool ros::param::get(const std::string& param_name, T& param_val)
param_name是要获取的参数的名称,param_val是用于存储获取到的参数值的变量。函数返回一个bool类型的值,表示参数是否成功获取
(2) nodehandle.param:
bool ros::NodeHandle::param(const std::string& param_name, T& param_val, const T& default_val) const;
其中,param_name是要获取的参数的名称,param_val是用于存储获取到的参数值的变量,default_val是参数的默认值。该函数返回一个bool类型的值,表示参数是否成功获取。
使用nodehandle.param时,如果参数服务器中存在名为param_name的参数,那么该参数的值将被存储在param_val变量中,并返回true;否则,函数返回false,并且param_val会被赋值为default_val。
2、arg
argument是另外一个概念,类似于launch文件内部的局部变量,仅限于launch文件使用,便于launch文件的重构,和ROS内部节点实现没有关系
<arg name="my_value" default="1.0"/>
<param name="param_name" value="$(arg my_value)"/>
<node pkg="my_pkg" name="my_name" type="my_type" args="$(arg my_value)"/>
三、重映射机制
ROS提供了一种重映射机制,简单来说就是起别名,类似于C++的别名机制,我们不需要修改别人功能包的接口,只需要将接口名称重映射一下,起个别名,系统就认识了。
重映射可以通过命令行参数或launch文件进行设置。重映射的语法是在节点名称后面使用下划线加原始名称和冒号来指定重映射的新名称。
<launch>
<node pkg="my_package" type="talker_node" name="my_talker" output="screen" >
<remap from="chatter" to="my_chatter"/>
</node>
</launch>
然后通过以下命令来启动launch文件:
roslaunch my_package my_launch.launch
四、嵌套
包含其他launch文件
<include file="/other.launch"/>