ROS launch 启动文件的使用方法


参考:古月21讲


launch文件介绍

launch文件:通过XML文件实现多节点的配置和启动(可自启动ROS Master)。
正常一套程序运行时节点是很多的,不可能每次运行都要一个一个手动打开。所以需要launch来启动所有节点和功能。
launch文件内的语法为xml

<launch><machine><node>\ …,这些叫做标签。

nameaddresstype\ …,这些叫做属性。

每一个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)"/>

上一篇:ROS架构


下一篇:Kobuki入门