1:启动节点 <node pkg="package-name" type="executable-name" name="node-name" output = “screen”/> • pkg:节点所在的功能包名称 • type:节点的可执行文件名称 • name:节点运行时的名称
•output = “screen”:标准输出信息显示在终端(console)上
• respawn=”true” :要求重生(request respawning)
开启所有nodes后,roslaunch会监视每个node,记录那些仍然活动的nodes。对于每个node,当其终止后,我们可以要求roslaunch重启该node,通过使用respawn属性。
•required=”true”
当一个必需的节点终止时,roslaunch会做出响应,终止其他所有的节点并退出它自己。 注意: 由于 required 属性和 respawn 属性的含义,所以如果你给单个的一个节点同时设置了这2个属性,roslaunch 命令会抱怨。所以不要这样设置。
•ns = “namespace” 在例子launch文件中,使用这个属性创建了两个无关的 turtlesim 模拟器。
turtlesim 话题名字(turtle1/cmd_vel、turtle1/color_sensor 和 turtle1/pose )被从全局命名空间移动 到 /sim1 和 /sim2 的单独命名空间里。
2:设置ROS系统运行中的参数,存储在参数服务器中。
<param name="output_frame" value="odom"/>• name:参数名 • value:参数值
3:加载参数文件中的多个参数:
<rosparam file="params.yaml" command="load" ns=“params"/>4:launch文件内部的局部变量,仅限于launch文件使用
情况一:
<arg name="arg-name" default="arg-value" />//arg_value可以被改变,如不赋值取默认值 <arg name="foo" value="bar" /> //声明为常量,不能改变• name:参数名 • value:参数值 调用:
<param name="foo" value="$(arg arg-name)" /> <node name="node" pkg="package" type="type " args="$(arg arg-name)" />情况二:
<arg name="arg-name" />在命令行中你可以这样做:给 roslaunch 提供一个 value : roslaunch package-name launch-file-name arg-name:=arg-value
arg标签用来在launch文件中定义参数,arg和param在ROS里有根本性的区别,就像局部变量和全局变量的区别一样。arg不储存在参数服务器中,不能提供给节点使用,只能在launch文件中使用。param则是储存在参数服务器中,可以被节点使用。
5:重映射ROS计算图资源的命名。
<remap from="/turtlebot/cmd_vel" to="/cmd_vel"/>• from:原命名 • to:映射之后的命名
6:包含其他launch文件,类似C语言中的头文件包含。
<include file="$(dirname)/other.launch" />•file:包含的其他launch文件路径
执行后结果:
可以看到在turtlesim中的param加了turtlesim_node前缀
添加Python产生的节点,直接添加可执行的脚本
7:group
group 标签可以方便的将一组配置应用到组内的所有节点,它也具有命名空间 ns 特点,可以将不同的节点放入不同的 namespace。
<group ns="namespace"> <node pkg="pkg_name1" .../> <node pkg="pkg_name2" .../> ... </group>配合 if 和 unless 使用:
if=value:value 为 true 则包含内部信息unless=value:value 为 false 则包含内部信息 <group if="$(arg foo1)"> <node pkg="pkg_name1" .../> </group> <group unless="$(arg foo2)"> <node pkg="pkg_name2" .../> </group> 当 foo1 == true 时包含其标签内部当 foo2 == false 时包含其标签内部 <group ns="turtlesim1"> //两个节点分组并以’命名空间(namespace)’标签来区分 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> //pkg 和 type 它们分别是:程序包名字和可执行文件的名字;ros::init()函数提供的 name 信息将会全面的覆盖命名信息(launch文件中node标签里面的name 属性) </group> <group ns="turtlesim2"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> ns = “namespace” :turtlesim 话题名字(turtle1/cmd_vel、turtle1/color_sensor 和 turtle1/pose )被从全局命名空间移动 到 /sim1 和 /sim2 的单独命名空间里。