标签
1、<node>
<node…/>
pkg=“功能包”;type=“可执行文件”;name=“节点名称”.
ns = “命名空间”;可以让你在自定义的命名空间里运行节点。
2、<include>
该标签可以导入另一个roslaunch XML文件到当前文件。
<include file ="$(find pkg-name)/path/filename.xml" ns="NAME_SPACE">
3、<remap>
<remap from="original-name" to="new-name" />
如果这个 remap标签写在与 node 元素的同一级,而且在launch 元素内的最顶层。 那么这个重映射将会作用于launch文件中所有的节点。
4、<rosparam>
rosparam标签允许从YAML文件中一次性导入大量参数。
使用起来就像这样:
<rosparam command="load" file="$(find pkg-name)/path/name.yaml"/>
5、<arg>
arg标签用来在launch文件中定义参数,arg和param在ROS里有根本性的区别,就像局部变量和全局变量的区别一样。arg不储存在参数服务器中,不能提供给节点使用,只能在launch文件中使用。param则是储存在参数服务器中,可以被节点使用。
<arg name="demo"/>
像上面这样,就简单地声明了一个参数,名叫demo,但是声明不等于定义,我们需要给他赋值,在赋值之后参数才能够发挥作用。
<arg name="demo" value="666"/> ``<arg name="demo" default="666"/>
以上是两种简单的赋值方法,两者的区别是使用后者赋值的参数可以在命令行中像下面这样被修改,前者则不行。
roslaunch demo demo.launch demo:=6666
arg还有更加高级,也更加灵活的用法:
当$(arg arg_name)出现在launch文件任意位置时,将会自动替代为所给参数的值。
6、<group>
group标签可以将若干个节点同时划分进某个工作空间。
<group ns="demo_1">
<node name="demo_1" pkg="demo_1" type="demo_pub_1" output="screen"/>
<node name="demo_1" pkg="demo_1" type="demo_sub_1" output="screen"/>
</group>
<group ns="demo_2">
<node name="demo_2" pkg="demo_2" type="demo_pub_2" output="screen"/>
<node name="demo_2" pkg="demo_2" type="demo_sub_2" output="screen"/>
</group>
group标签还可以做到对node的批量管理。比如我可以同时终止在同一个group中的节点。
<group if="1"> …… …… …… </group>
当if属性的值为0的时候将执行<group></group>
之间的标签。
6、<param>
在 launch 标签内的是全局参数,launch内所有节点都可以使用;而在node 标签内的则是局部参数,只有该node才能直接使用。
句柄两种创建方式:
ros::NodeHandle n;
ros::NodeHandle nh(“~”);//私有命名空间
加了~号相当于指定了node,可以使用node内的value。关于ros句柄的问题可以参考——ROS Nodehandle句柄。
launch
:
<launch>
<param name="num" value="5" />
<node pkg="ros_demo" name="demo" type="demo" output="screen">
<param name="num" value="10" />
</node>
</launch>
6.1 case1
c++
:
int number;
ros::init(argc, argv, "demo");
ros::NodeHandle n;//公共空间,无法用node内参数,可用launch内参数
n.getParam("num", number);
结果:
5
6.2 case2
c++
:
int number;
ros::init(argc, argv, "demo");
ros::NodeHandle n("~");//私有空间,可以用node内参数
n.getParam("num", number);
结果:
10