ROS基础 -launch文件的学习

    技术2023-12-26  92

    <launch> <param name="/turtle_number" value="2"/> <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"> <param name="turtle_name1" value="Tom"/> <param name="turtle_name2" value="Jerry"/> <rosparam file="$(find learning_launch)/config/param.yaml" command="load"/> </node> <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/> </launch> 其中param.yaml文件中的内容为: A: 123 B: "hello" group: C: 456 D: "hello"

    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 的单独命名空间里。
    Processed: 0.016, SQL: 9