• Ros学习——launch文件解析


    1. launch文件的重点是:节点(node)元素的集合。
    2. roslaunch 则是让所有的节点共享同一个终端。

    1.标签(元素)说明

    • 1. group标签

    • 2. node标签

    <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>

    补充:

    ros::init(argc,argv,"my_node_name");
    
    或者
    
    ros::init(argc,argv,"my_node_name",ros::init_options::AnonymousName);

    node标签的拓展属性:

    output = “screen” :将标准输出信息显示在终端(console)上
    respawn=”true” :监测每一个启动完成的节点,当它终止时,我们可以要求 roslaunch 重新启动它.
    required=”true” :当一个必需的节点终止时,roslaunch会做出响应,终止其他所有的节点并退出它自己。 (不要同时设置required 属性和 respawn 属性)
    launch-prefix = “command-prefix” :依赖终端输入的节点,比如 turtle_teleop_key 节点,它可能要优先的保留在独立的终端上:launch-prefix=”xterm -e”(xterm 命令会开一个新的终端窗口。 -e 参数告诉 xterm :执行其命令行剩余部分(rosrun turtlesim turtle_teleop_key))
    ns = “namespace” :turtlesim 话题名字(turtle1/cmd_vel、turtle1/color_sensor 和 turtle1/pose )被从全局命名空间移动 到 /sim1 和 /sim2 的单独命名空间里。
    args:传递参数到节点. 个人理解,arg参数只在launch文件中合法(相当于局部变量),不直接传给节点,所以需 要通过node中的args属性进行传递. 
    • 3. remap标签

    <remap from="original-name" to="new-name" />  //在launch文件中重新命名

    如果这个 remap 是 launch 元素的一个child(子类),与 node 元素同一层级, 并在 launch 元素内的最顶层。那么这个 remapping 将会作用于后续所有的节点。

    • include标签

    1. file属性:添加想要包含的文件的完整路径
    <include file="$(find package-name)/launch-file-name" /> //常用,如下:
    
    <include file = "find learning_tutrols"/launch/start_demo.launch" / >   //也可以自己制定路径
    <include file = "find learning_tutrols"/start_demo.launch" />      //这样是不对的,必须把路径给到文件所在最终目录
    
    
    2. ns属性:让这个文件里的内容推送到一个命名空间里面: 
    <include file=". . . " ns="namespace" />
    
     一般我们都会给 include 元素设置一个 ns 属性。
    • arg标签:声明一个参数的存在(每一个argument必须给它分配一个 value(赋值))

    1. 给arg赋值:

    <arg name="arg-name" default="arg-value" /> 
    <arg name="arg-name" value="arg-value" /> 
    
    命令行可以覆盖default的值,但是不能覆盖 value 。

    在例子launch文件 中,use_sim3 节点的 default 值为 0,所以它可以通过命令行改变值,就像下面这样: 
    $ roslaunch agitr triplesim.launch use_sim3:=1

    2.获取argument的数值 

    $(arg arg-name) //$() 这个符号出现的任何地方,roslaunch命令都将会把它替换成给定argument 的值(value)。

    3.argument的继承 :

      argument不能传递给 include 元素里包含的子launch文件 使用。 argument 就像是一个局部变量,它不能被包含的launch文件 所 “继承” 。解决这个问题的方法:在 include 元素中插入 arg 元素作为 include 元素的子类(children)。

      在 inchude 标签内的arguments是给包含 (included) 的launch文件提供的arguments,不是为本launch文件提供的。 

      <include file="$(find freenect_launch)/launch/freenect.launch">
        <!-- Don't publish the camera frames when using with the Turtlebot -->
        <arg name="publish_tf"                      value="false" /> 
        
        <!-- use device registration -->
        <arg name="depth_registration"              value="true" /> 
    
        <arg name="rgb_processing"                  value="true" />
        <arg name="ir_processing"                   value="false" />
        <arg name="depth_processing"                value="false" />
        <arg name="depth_registered_processing"     value="true" />
        <arg name="disparity_processing"            value="false" />
        <arg name="disparity_registered_processing" value="false" />
        <arg name="sw_registered_processing"        value="false" />
        <arg name="hw_registered_processing"        value="true" />

    Parameters(参数)在一个运行的ROS系统中是变量(values),它被存储在parameter服务器中。活动(或者叫:运行)的节点通过ros::param::get()函数访问它,并且用户可以通过 rosparam 命令行工具使用它。

    相比之下,arguments只有在launch文件里合法,它们的值不是直接提供给节点。

    2.parameter说明

    1.group标签中的param标签的作用等同于rosparam set命令. 

    2.node标签中的param标签设置为该节点的子元素.

    3.在launch文件中也支持等同与rosparam load 功能的rosparam标签,用于一次性加载大量的参数

    4.在launch文件中设置parameter,使用param标签:

    <param name="param-name" value="param-value" />

    5.在C++文件中,set或者get处理parameter参数 

    ros::param::set(” background_r ” , 255 ) ; 
    boolok = ros::param::get (PARAM_NAME, maxVel ) ;  



    参考:https://blog.csdn.net/qq_33444963/article/details/77893881

  • 相关阅读:
    主机连接不上虚拟机或虚拟机桥接没有网络
    asp web 报表
    heart or house?
    CPointer
    Raid
    Dos for by 随风
    不支持uri格式
    FabEdge V0.4 新特性:支持多集群通讯
    运维监控
    /etc缩写
  • 原文地址:https://www.cnblogs.com/yrm1160029237/p/10108161.html
Copyright © 2020-2023  润新知