ROS:launch规范及用法

roslaunch文件通过XML文件实现多节点的配置和启动。

1. 创建launch文件

在功能包的src路径下创建launch文件夹,然后在此文件夹下创建.launch文件。XML文件必须包含一个根元素,采用标签定义,文件中的其他元素都必须包含在这个标签当中。
mkdir launch
cd launch

如,在这个launch文件夹下新建一个launch文件,命名为turtlemimic.launch:

gedit turtlemimic.launch
<launch>

  <group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>

</launch>

2. launch配置规范

launch文件一般包括以下几部分:

  1. <node>
    <node>是要启动的ROS节点,它包括以下几个参数:
  pkg=“mypackage” :节点的功能包
  type="nodetype" : 节点的类型
  name="nodename" :节点的名字,它将覆盖任何通过调用ros::init来赋予节点的名称
  args="arg1 arg2 arg3" (可选):传递给节点的参数
  respawn="true" (可选) :如果节点停止,自动重启节点
  ns="foo" (可选):"foo"命名空间启动节点
  output="log | screen"  (可选) :如果选择screen,节点的stdout(标准输出)和
  								 stderr(标准错误)信息将显示在终端窗口上;
  								 如果选择log,stdoutstderr将发送一个log文件,
  								 stderr也会显示在终端窗口上

如:

<node name="gazebo" pkg="gazebo"  type="gazebo"   args="$(find r2_
gazebo)/gazebo /r2_grap.world"    output="screen" respawn="false"/>

启动gazebo功能包中的gazebo节点,该节点的参数是 r2_grap.world 文件中的内容,节点的stdout和stderr将显示在终端窗口上。如果gazebo节点停止,则不能自动重新启动。
2) <rosparam>
<rosparam>使用 .yaml文件load/dump/delete参数。delete和dump命令运行在load命令之前,load命令可以覆盖以前设置的参数。<rosparam>也可以添加到<node>中使用。<rosparam>包括以下几个参数:

  command="load|dump|delete"(默认时load)
  file="$(find pkg-name)/path/foo.yaml"(load或者dump命令):yaml文件的名字
  param="param-name":参数的名字

如:

<rosparam file=$(find r2_gazebo)/config/controllers/r2_impedance_
controller.yaml"  command="load"/>该命令的作用是:将r2_impedance_
controller.yaml文件加载到Parameter Server(参数服务器)中,设置控制参数。

3)<param>
<param>用来定义一个设置在Parameter Server(参数服务器)的参数,它可以添加到<node>中。<param>包括以下几个参数:

  name="namespace/name":参数的名字
  value="value"(可选):定义参数的值,如果省略这个参数,则应该指定一个文件(binfile/texfile)或命令
  type="str|int|double|boot"(可选):指定参数的类型
  texfile="$(find pkg-name)/path/file" (可选)
  binfile="$(find pkg-name)/path/file" (可选)
  commadn="(find pkg-name)/exe '$(find pkg-name)/arg.txt'" (可选):exe是可执行文件( .py或 .cpp),arg.txt是参数文件

如:

<param name="robot_description" command="$(find xacro)/xacro.py
'$(find r2_gazebo) /robots/r2.sim.urdf.xacro'"/>
<param name="/use_sim_time" value="true"/>
<param name="/gravity/x" value="0"/>

4)<include>
<include>可以在当前launch文件中调用另一个launch文件,这样有利于代码的复用。如:

<include file ="$(find pr2_controller_manager)/controller_manager.launch"/>

  1. <env>
    <env>可以用来设置节点的环境变量,可以在<launch>、<include>和<node>等。<env>的参数如下:
  name="enviroment-variable-name" :设置的环境变量的名字
  value="environment-variable-value" :环境变量的值

  1. <remap>
    <remap>可以将一个参数名映射为另一个名字,它的参数如下:
  from="original-name"
  to="new-name"

如:有一个节点需要接收主题"chatter",但是此时仅有一个发布"hello"主题的节点。而且,"chatter"和"hello"主题的数据类型是一样的,因此可以采用<remap>将主题重新映射。

<remap from="chatter" to="hello"/>

  1. <arg>
    <arg>用来定义一个局部参数,该参数只能在一个launch文件中使用。<arg>有三种使用方法:
<arg name="foo"/> :声明一个参数foo,后面需要给它赋值
<arg name="foo" default="1"/> :声明一个参数foo,它有一个默认值,该值可以被修改。
<arg name="foo" value="bar"/> :声明一个常量foo,它的值不能被修改。

3. 载入launch 文件

roslaunch命令从launch文件启动节点,使用方法如下:

roslaunch [package] [filename.launch]

如:

roslaunch beginner_tutorials turtlemimic.launch

第一章launch文件中,标签用来识别这是一个launch文件。

<group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

上面代码启动了两个乌龟节点,名字都是sim,但是在不同的命名空间中,所以不会有相同名字的冲突。

<node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>

上面代码中启动了mimic节点,同时把这个节点的input和output话题重命名为turtle1和turtle2。这样就实现了两个乌龟节点跟踪,使turtlesim2模仿turtlesim1运动。

文献:
[1] ROS:launch文件的语法规范.
[2] ROS理解roslaunch命令

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值