• 十六、ROS的launch文件标签(二)


    1、launch文件标签

    1.param

    • 主要用于参数服务器上设置参数,可以通过外部文件加载
    • 属性:
      • name=“命名空间/参数名”
        • 参数名称,可以包含命名空间
      • value=“xxx”(可选)
        • 定义参数值,如果此处省略,必须指定外部文件作为参数源
      • type=“str/int/double/bool/yaml”(可选)
        • 如果未指定参数类型,系统会尝试确定参数类型,规则如下:
          • 包含 .数字 :认为是浮点型
          • 不包含 . 的数字:认为是整型
          • 其它是字符串
    • 代码实现:有两种格式
      <launch deprecated = "弃用声明">
          <!-- 弃用声明,会在运行的过程中进行警告 -->
          <!-- 格式1:launch下,node外 -->
          <param name="param_A" type="int" value="100" />
          <node pkg="turtlesim" type="turtlesim_node" name="myturtle" output="screen"  >
              <remap from="/turtle1/cmd_vel" to="/cmd_vel" />
          <!-- 格式2:node内,会在参数前加入自定义节点名 -->
              <param name="param_B" type="double" value="1.2" />
          </node>
          <node pkg="turtlesim" type="turtle_teleop_key" name="mykey" output="screen" />
      </launch>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    • 运行结果:
      /myturtle/param_B
      /param_A
      
      • 1
      • 2

    2.rosparam

    • 作用:从yaml文件里导入,导出,删除参数
    • 属性:
      • command=“load/dump/delete”(默认为load)
      • file=“$(find xxxx)/xxxx/xxxx…”
        • 文件加载导出路径
      • param=“参数名称”(可选),用于确定那个节点下的参数
      • ns=“命名空间”(可选)
    • 实现步骤:
        1. 编写参数文件yaml
        R: 200
        G: 300
        B: 400
        
        • 1
        • 2
        • 3
        1. load:导入参数
        • 代码实现:(两种格式)
          <launch deprecated = "弃用声明">
              <!-- 弃用声明,会在运行的过程中进行警告 -->
              <!-- 加载参数 -->
              <!-- 格式1:在node外加载 -->
              <rosparam command="load" file="$(find launch_test_01)/launch/params.yaml" />
              <node pkg="turtlesim" type="turtlesim_node" name="myturtle" output="screen"  >
                  <!-- 格式2:在node内加载,会多一个自己定义的节点名 -->
                  <rosparam command="load" file="$(find launch_test_01)/launch/params.yaml" />
              </node>
              <node pkg="turtlesim" type="turtle_teleop_key" name="mykey" output="screen" />
          </launch>
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
        • 运行结果:
          PARAMETERS
          * /B: 400
          * /G: 300
          * /R: 200
          * /myturtle/B: 400
          * /myturtle/G: 300
          * /myturtle/R: 200
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
        1. dump:导出参数
        • 代码实现:
          turtle_start.launch(节点和导出命令在同一个文件里)
          <launch deprecated = "弃用声明">
              <!-- 弃用声明,会在运行的过程中进行警告 -->
              <!-- 加载参数 -->
              <!-- 格式1:在node外加载 -->
              <rosparam command="load" file="$(find launch_test_01)/launch/params.yaml" />
              <!-- 格式1:在node外导出,会导出所有的参数,但是有事会导出部分参数,最好自己单写一个launch文件,导出参数 -->
              <!-- 规定了命名空间,只会导出改名民空间下的参数 -->
              <rosparam command="dump" file="$(find launch_test_01)/launch/params_out1.yaml" ns="myturtle" />
              <rosparam command="dump" file="$(find launch_test_01)/launch/params_out2.yaml"  />
              <node pkg="turtlesim" type="turtlesim_node" name="myturtle" output="screen"  >
                  <!-- 格式2:在node内加载,会多一个自己定义的节点名 -->
                  <rosparam command="load" file="$(find launch_test_01)/launch/params.yaml" />
                  <!-- 格式2:在node内导出,只会导出当前节点下的参数 -->
                  <rosparam command="dump" file="$(find launch_test_01)/launch/params_out3.yaml" />
              </node>
              <node pkg="turtlesim" type="turtle_teleop_key" name="mykey" output="screen" />
          </launch>      ```xml
          <launch deprecated = "弃用声明">
              <!-- 弃用声明,会在运行的过程中进行警告 -->
              <!-- 加载参数 -->
              <!-- 格式1:在node外加载 -->
              <rosparam command="load" file="$(find launch_test_01)/launch/params.yaml" />
              <!-- 格式1:在node外导出,会导出所有的参数,但是有事会导出部分参数,最好自己单写一个launch文件,导出参数 -->
              <!-- 规定了命名空间,只会导出改名民空间下的参数 -->
              <rosparam command="dump" file="$(find launch_test_01)/launch/params_out1.yaml" ns="myturtle" />
              <rosparam command="dump" file="$(find launch_test_01)/launch/params_out2.yaml"  />
              <node pkg="turtlesim" type="turtlesim_node" name="myturtle" output="screen"  >
                  <!-- 格式2:在node内加载,会多一个自己定义的节点名 -->
                  <rosparam command="load" file="$(find launch_test_01)/launch/params.yaml" />
                  <!-- 格式2:在node内导出,只会导出当前节点下的参数 -->
                  <rosparam command="dump" file="$(find launch_test_01)/launch/params_out3.yaml" />
              </node>
              <node pkg="turtlesim" type="turtle_teleop_key" name="mykey" output="screen" />
          </launch>
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34
          params.launch(节点和导出命令不在同一个文件里)
          <launch>
              <!-- 单独写一个launch文件,防止参数导出不全 -->
              <rosparam command="dump" file="$(find launch_test_01)/launch/params_out4.yaml"  />
          </launch>
          
          • 1
          • 2
          • 3
          • 4
          • 运行结果:
            params_out1.yaml
            B: 400
            G: 300
            R: 200
            background_b: 255
            background_g: 86
            background_r: 69
            param_B: 1.2
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            params_out2.yaml
            B: 400
            G: 300
            R: 200
            myturtle:
              B: 400
              G: 300
              R: 200
              background_b: 255
              background_g: 86
              background_r: 69
              param_B: 1.2
            param_A: 100
            rosdistro: 'noetic
            
              '
            roslaunch:
              uris:
                host_d102_w65kj1_kk1__33231: http://d102-W65KJ1-KK1:33231/
                host_d102_w65kj1_kk1__33309: http://d102-W65KJ1-KK1:33309/
                host_d102_w65kj1_kk1__33799: http://d102-W65KJ1-KK1:33799/
                host_d102_w65kj1_kk1__43485: http://d102-W65KJ1-KK1:43485/
                host_d102_w65kj1_kk1__44799: http://d102-W65KJ1-KK1:44799/
                host_d102_w65kj1_kk1__45711: http://d102-W65KJ1-KK1:45711/
                host_d102_w65kj1_kk1__46191: http://d102-W65KJ1-KK1:46191/
            rosversion: '1.15.14
            
              '
            run_id: 0f399634-f437-11ec-a9f9-9bef9f37954f
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            • 13
            • 14
            • 15
            • 16
            • 17
            • 18
            • 19
            • 20
            • 21
            • 22
            • 23
            • 24
            • 25
            • 26
            • 27
            • 28
            params_out3.yaml
            B: 400
            G: 300
            R: 200
            background_b: 255
            background_g: 86
            background_r: 69
            param_B: 1.2
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            params_out4.yaml
            B: 400
            G: 300
            R: 200
            myturtle:
              B: 400
              G: 300
              R: 200
              background_b: 255
              background_g: 86
              background_r: 69
              param_B: 1.2
            param_A: 100
            rosdistro: 'noetic
            
              '
            roslaunch:
              uris:
                host_d102_w65kj1_kk1__33231: http://d102-W65KJ1-KK1:33231/
                host_d102_w65kj1_kk1__33309: http://d102-W65KJ1-KK1:33309/
                host_d102_w65kj1_kk1__33799: http://d102-W65KJ1-KK1:33799/
                host_d102_w65kj1_kk1__40997: http://d102-W65KJ1-KK1:40997/
                host_d102_w65kj1_kk1__43485: http://d102-W65KJ1-KK1:43485/
                host_d102_w65kj1_kk1__44799: http://d102-W65KJ1-KK1:44799/
                host_d102_w65kj1_kk1__45711: http://d102-W65KJ1-KK1:45711/
                host_d102_w65kj1_kk1__46191: http://d102-W65KJ1-KK1:46191/
            rosversion: '1.15.14
            
              '
            run_id: 0f399634-f437-11ec-a9f9-9bef9f37954f
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            • 13
            • 14
            • 15
            • 16
            • 17
            • 18
            • 19
            • 20
            • 21
            • 22
            • 23
            • 24
            • 25
            • 26
            • 27
            • 28
            • 29
        • delete:删除参数
          • 代码实现:
            <launch>
                <rosparam command="delete" param="/B" />
            </launch>
            
            • 1
            • 2
            • 3

      3.group

      • 作用:对节点进行分组,使节点具有ns属性,从而可以启动相同的节点,用命名空间加以区分
      • 属性:
        • ns=“名称空间”(可选)
        • clear_params=“true/false”(可选:慎用)
      • 代码实现:
        <launch>
            <group ns="first" clear_params="true">
                <node pkg="turtlesim" type="turtlesim_node" name="myturtle" output="screen"  />
                <node pkg="turtlesim" type="turtle_teleop_key" name="mykey" output="screen" />
            </group>
            <group ns="second" clear_params="true">
                <node pkg="turtlesim" type="turtlesim_node" name="myturtle" output="screen"  />
                <node pkg="turtlesim" type="turtle_teleop_key" name="mykey" output="screen" />
            </group>
        </launch>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
      • 运行结果:
        rosnode list
        
        /first/mykey
        /first/myturtle
        /myturtle
        /rosout
        /second/mykey
        /second/myturtle
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

      4.arg

      • 作用:用于动态传参,参数复用等
      • 属性:
        • name=“参数名”
        • default=“默认值”(可选)
        • value=“数值”(可选,default和value不能同时存在)
        • doc=“参数说明”
      • 代码实现:
        <launch>
            <!-- 注意,default和value不能同时存在 -->
            <rosparam command="delete" param="/B" />
            <arg name="car_weight" default="2.3" doc="this is a test" />
            <arg name="car_length" value="2.3" doc="this is a test" />
            <param name="weight" value="$(arg car_weight)" />
            <param name="length" value="$(arg car_length)" />
        </launch>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
      • 运行结果:
        rosparam list
        /length
        /weight
        
        • 1
        • 2
        • 3
      • 命令赋值:
        roslaunch launch_test_01 arg.launch car_weight:=0.8
        
        • 1
    • 相关阅读:
      @WebServlet注解(Servlet注解)
      Day11OSI与TCP/IP协议簇以及物理层
      【爬虫+情感判定+Top10高频词+词云图】"王心凌"热门弹幕python舆情分析
      Snagit 2024:让你的屏幕活动瞬间变得生动有力 mac/win版
      推荐算法学习笔记2.1:基于深度学习的推荐算法-基于共线矩阵的深度推荐算法-NeuralCF模型
      使用Kettle定时从数据库A刷新数据到数据库B
      C/C++操作加密与不加密的zip文件
      【感性认识】嵌入式开发有何不同
      Flutter组件--TabBar使用详情(分段控制器)
      CVE-2017-15715 apache换行解析&文件上传漏洞
    • 原文地址:https://blog.csdn.net/qq_43280851/article/details/125466184