系列文章目录

【ROS基础】Linux 命令行
【ROS基础】.launch 文件语法记录
【ROS基础】CMakeLists.txt 文件语法记录
【ROS基础】Package.xml 文件语法记录
【ROS基础】ROS_c++ 语法记录


文章目录

  • 系列文章目录
  • 前言
  • 1、.launch 文件是什么?
  • 2、<launch> 标签   根标签
  • 3、<node> 标签   启动节点
  • 4、<param> 标签   设置参数1/3
  • 5、<rosparam> 标签   设置参数2/3
  • 6、<arg> 标签   设置参数3/3
  • 7、<remap> 标签   重映射
  • 8、<include> 标签   嵌套
  • 9、案例 一   turtlesim_parameter_config.launch
    • 9.1 学习这个 .launch 文件
  • 10、案例 二   turtlesim_remap.launch
  • Markdown语法总结

前言

最全面的教程还是得看这个:http://wiki.ros.org/roslaunch/XML


1、.launch 文件是什么?

通过 xml 标签语言实现 ROS 多节点的配置和启动,可自动启动 ROS Master 节点。最简单的文件举例 :simple.launch

<launch><node  pkg="learning_communication"  type="person_subscriber_node"  name="talker" /><node  pkg="learning_communication"  type="person_publisher_node"  name="listener" />
</launch>

2、<launch> 标签   根标签

.launch 文件的根元素标签,其他所有的标签都必须包含在根标签的范围内。</launch > 表示标签作用域的结尾。

3、<node> 标签   启动节点

用于启动节点。标签内各参数的含义:

  • pkg 节点所在功能包名。
  • type 节点的可执行文件名。
  • name 节点运行时的名称,可与cpp文件中节点初始化时的节点名不同。 (rosnode list 打印出的就是这个名字,不过加了前缀斜杠 / )
  • output (optional) ="screen" or ="log",默认不输出。
  • respawn (optional) ="true",Restart the node automatically if it quits.   默认 ="false"
  • required (optional) ="true",If node dies, kill entire roslaunch.
  • ns (optional) ="foo",Start the node in the ‘foo’ namespace.
  • args (optional) ="arg1 arg2",Pass arguments to node.

4、<param> 标签   设置参数1/3

设置ROS系统运行中的参数,存储在参数服务器中,相当于全局变量。(可嵌入 <node> 标签中成为其作用域下的变量)。标签内各参数的含义:

<param  name="output_frame"  value="odom" />
  • name 参数名。
  • value (optional) 参数值。
  • type (optional) ="str | int | double | bool | yaml"

5、<rosparam> 标签   设置参数2/3

加载 .yaml 文件中的多个参数,存储在参数服务器中,相当于全局变量。(可嵌入到 <node> 标签中成为 <node> 标签作用域中的变量)。标签内各参数的含义:

<rosparam  file="params.yaml"  command="load"  ns="params" />
  • file () 。
  • command () 。
  • ns () 。

6、<arg> 标签   设置参数3/3

.launch 文件内部的局部变量,仅限于 .launch 文件使用。标签内各参数的含义:

<arg  name="arg-name"  default="arg-value" />
  • name 参数名。
  • default (optional) 参数值。 可在之后 override。(变量)
  • value (optional) 参数值。不可覆盖。 (常量)

调用 <arg> 标签定义的参数:

<param  name="foo"  value="$(arg arg-name)" />
<node  name="node"  pkg="package"  type="type"  args="$(arg arg-name)" />

7、<remap> 标签   重映射

重映射 ROS 计算图资源的命名,这是一种覆盖操作,一旦重映射之后,原来的名字就没有了。标签内各参数的含义:

<remap  from="/turtlebot/cmd_vel"  to="/cmd_vel" />
  • from ( ) 原名。
  • to ( ) 映射之后的命名。

8、<include> 标签   嵌套

包含其他 .launch 文件,类似 C 语言的头文件包含。标签内各参数的含义:

<include  file="$(dirname)/other.launch"  />
  • file ( ) 包含的其他launch文件的路径。

9、案例 一   turtlesim_parameter_config.launch

此 .launch 文件定义如下:

<launch><param name="/turtle_number" value="2" /><arg name="TurtleName1" defualt="Tom"/><arg name="TurtleName2" defualt="Danney"/><node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node" ><param name="turtle_name1" value="$(arg TurtleName1)"/><param name="turtle_name2" value="$(arg TurtleName2)"/><rosparam file="(find learning_launch)/config/param.ymal" commond="load" /></node><node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen" /></launch>
  • 文件建立过程: 在已经存在的且没出过问题的工作空间下的 src 目录下新建了一个 learning_launch 的功能包。功能包创建时无脑包含了 roscpp rospy std_msgs std_srvs 四个依赖。
    在 learning_launch 功能包路径下创建了 launch 路径来存放上述 turtlesim_parameter_config.launch 文件。
    在 learning_launch 功能包路径下创建了 config  路径来存放 param.yaml 文件。 param.yaml 文件如下:
A : 123
B : "hello"group :C : 456D : "world"
  • 编译工作空间: 编译 100% 通过。
  • 运行 .launch 文件:
roslaunch   learning_launch   turtlesim_parameter_config.launch