1.<launch>及</launch>
launch标签就像一个有容乃大的括号,规定了一片区域,所有的launch文件都由开头,由结尾,所有的描述标签都要写在之间。
2.<include>
<include file="$(find demo)/launch/demo.launch" ns="demo_namespace"/>
//file ="$(find package-name)/path/filename.xml" 指明我们想要包含进来的文件
//ns="NAME_SPACE" 相对NAME_SPACE命名空间导入文件
package-name为软件包的名字,不记得了可以回忆
http://wiki.ros.org/cn/ROS/Tutorials/CreatingPackage
优点: 我们可以少做几个 “打开新终端, roslaunch” 的步骤。
缺陷1: roslaunch一个launch文件会有一个持续一段时间的校准过程。如果2dnav_pr2 launch文件引用了机器人的launch文件,当我们用control-c终止这个roslaunch进程,然后又再次开启这个进程,校准过程还得再来一遍。
缺陷2: 一些导航node要求校准过程必须在它启动之前完成。roslaunch目前还没有对节点的启动时间和顺序进行控制。最完美的方案当然是让导航节点等到校准过程完成后再启动,但就目前的情况来看,把他们分别放在两个launch文件里,直到校准过程结束再启动导航节点是个可行的方案。
<node pkg="move_base" type="move_base" name="move_base" machine="c2">
<remap from="odom" to="pr2_base_odometry/odom" />
<param name="controller_frequency" value="10.0" />
<param name="footprint_padding" value="0.015" />
<param name="controller_patience" value="15.0" />
<param name="clearing_radius" value="0.59" />
<rosparam file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find 2dnav_pr2)/move_base/local_costmap_params.yaml" command="load" />
<rosparam file="$(find 2dnav_pr2)/move_base/global_costmap_params.yaml" command="load" />
<rosparam file="$(find 2dnav_pr2)/move_base/navfn_params.yaml" command="load" />
<rosparam file="$(find 2dnav_pr2)/move_base/base_local_planner_params.yaml" command="load" />
</node>
//这一段代码负责启动move_base节点
<node>
node标签是launch文件里最常见的标签,每个node标签里包括了ROS图中节点的名称属性name、该节点所在的包名pkg以及节点的类型type。
<remap>
remap标签顾名思义重映射,ROS支持topic的重映射,remap标签里包含一个original-name和一个new-name,及原名称和新名称。
比如现在你拿到一个节点,这个节点订阅了"/chatter"topic,然而你自己写的节点只能发布到"/demo/chatter"topic,由于这两个topic的消息类型是一致的,你想让这两个节点进行通讯,那么可以在launch文件中这样写。这样就可以直接把/chattertopic重映射到/demo/chatter,这样子不用修改任何代码,就可以让两个节点进行通讯。
如果这个 remap标签写在与 node 元素的同一级,而且在launch 元素内的最顶层。 那么这个重映射将会作用于launch文件中所有的节点。
<remap from="chatter" to="demo/chatter"/>
<param>
<param name="demo_param" type="int" value="666"/>
param标签的作用相当于命令行中的rosparam set
比如现在在参数服务器中添加一个名为demo_param,值为666的参数,是节点的内部参数
<rosparam>
<rosparam file="$(find 2dnav_pr2)/move_base/navfn_params.yaml" command="load" />
们将从yaml文件中读取大量参数。yaml是一种易于人类读取的文件格式,支持复杂数据的结构。
<<arg>>
arg标签用来在launch文件中定义参数,arg和param在ROS里有根本性的区别,就像局部变量和全局变量的区别一样。arg不储存在参数服务器中,不能提供给节点使用,只能在launch文件中使用。param则是储存在参数服务器中,可以被节点使用。
<arg name="demo" value="666"/>
<arg name="demo" default="666"/>
以上是两种简单的赋值方法,两者的区别是使用后者赋值的参数可以在命令行中像下面这样被修改,前者则不行。
roslaunch demo demo.launch demo:=6666
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。