zoukankan      html  css  js  c++  java
  • ROS环境下launch文件格式说明

    XML语法提要

    roslaunch文件的本质是xml文件,首先要简单了解一些xml相关语法:
    1、标签必须闭合

    <launch> </launch> //成对的标签闭合,中间可以写内容
    <node XXXX /> //当没有中间内容需要写时,也可使用自闭合标签,此时仍然可以为标签添加属性,XXXX内容就代表属性部分

    2、使用注释

    <!-- 这就是注释 -->

    <launch> 标签

    <launch>标签是所有roslaunch文件的根元素。它写在最外层,目的是作为其他元素的容器。其中可以包含多种元素标签:
    ——————————————常用———————————-
    <node> 启动节点
    <include> 包含其他的roslaunch文件
    <param> 对参数服务器进行参数设置
    <arg> launch文件内部使用的参数
    <remap> 声明映射名
    <group> 共享一个名称空间或重新映射组封闭元素
    <rosparam> 使用rosparam文件启动设置ROS参数
    常用元素标签
    1、<node> 启动节点,这是最常用的标签

    <node name ="base_controller" pkg="base_controller" type = "base_controller" >
    </node>

    name是给这个节点起的名字,pkg是工作空间中节点包的名称,type是包中需要运行的具体节点,其指向的文件必须有对应的可执行文件。
    2、<include>包含其它launch文件,被包含的launch文件将会被一同启动

    <include file="$(find rbx1_nav)/launch/gmapping.launch"/>

    3、<param> 对参数服务器进行参数设置,示例如下

    <node name ="laser_scan" pkg="laser_scan_publisher_tutorial" type = "laser_scan_publisher">
    <param name ="scan" value = "laser" /> 
    </node>

    laser_scan_publisher这个节点程序设置了一个可让用户更改的参数,为了传递这个参数,使用<param>标签,name是参数在程序内部的名称,value是给对应参数赋值
    4、<remap> 声明映射名,示例如下

    <node pkg="turtlebot_teleop" type="turtlebot_teleop_key" name="turtlebot_teleop_keyboard" output="screen">
    <param name="scale_linear" value="0.1" type="double"/>
    <param name="scale_angular" value="0.4" type="double"/>
    <remap from="turtlebot_teleop_keyboard/cmd_vel" to="cmd_vel" />
    </node>

    上述代码启动了一个turtlebot_teleop节点,该节点原本发布了一个消息叫做turtlebot_teleop_keyboard/cmd_vel, 其实这个话题与cmd_vel话题中的消息类型是完全一样的,因为能够发送cmd_vel话题的节点太多了,为了区分,程序设计时使用了节点名称+话题名的方式,此时为了方便订阅,需要将这种话题做一次重映射,使用<remap>标签将turtlebot_teleop_keyboard/cmd_vel话题映射为cmd_vel话题,这样,其他要订阅该话题的节点只需订阅cmd_vel话题即可
    5、<rosparam> 使用rosparam文件启动设置ROS参数,示例如下

    <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
    <rosparam file="$(find rbx1_nav)/config/fake/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find rbx1_nav)/config/fake/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find rbx1_nav)/config/fake/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find rbx1_nav)/config/fake/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find rbx1_nav)/config/fake/base_local_planner_params.yaml" command="load" />
    </node>

    当参数特别多时,全部写在launch文件里就不方便了,为此,可以通过加载文件来传递参数,上述代码从4个文件加载了参数,其中costmap_common_params.yaml文件中的参数值被传递到两个不同的命名空间中。
    6、<arg> launch文件内部参数,启动参数。

    <arg>这个标签与上述<param>标签翻译完全一致,都是“参数”,但<param>所设置的参数是可以在ros参数服务器中查看并设置的,而<arg>只是当前launch文件所使用的内部参数,外部不可见
    比如,gmapping.launch中有这样一句:

    <launch>
    <arg name="scan_topic" default="scan" />
    …………
    </launch>

    其中,scan_topic这个参数就是说,使用roslaunch启动这个launch文件时,可以传递一个参数,该参数可以让用户指定一个话题名称,如果用户传递了话题参数,则新的话题参数将取代scan,若果没传递参数,scan_topic取默认值scan,你可以这样写:

    roslaunch ~/文件路径/gmapping.launch scan_topic:=abc

    此时,<arg>标签往往与&(arg scan_topic)相配合使用,该launch文件中凡是出现&(arg scan_topic)的地方,均会被替换为abc,即完成了用户向launch文件传递,比如下面这一句:

    <remap from="scan" to="$(arg scan_topic)"/>

    上述代码是gmapping.launch中的语句,若用户传递了自定义的参数,则scan会被映射为指定的话题名称,使得gmapping接收的激光话题名称为用户指定的名称。
    7、<group>分组标签。

    启动节点多了可以分分组,不同组可以使用不同的命名空间,使得节点参数不冲突。该标签套在<node>标签外。
    <node>中常用的属性

    属性是写在标签里的,比如

    <node name ="base_controller" pkg="base_controller" type = "base_controller">
    </node>

    pkg =“mypackage” 是catkin空间中节点的名称。
    type =“nodetype” 节点下的程序名称,必须有一个具有相同名称相应的可执行文件,catkin编译后可自动产生该可执行文件。
    name =“nodename” 用户给该节点起的名称。
    respawn =“true” 如果节点退出,则自动重新启动节点。
    output=“screen”; 将对应node的输出信息打印在屏幕上,如果不写这一句,所有程序中的输出将存在home/.ros/log目录下。
    若想显示所有nodes的输出,启动launch文件时还可以添加–screen参数

    `roslaunch --screen package_name launch_file_name //此时所有输出会显示在终端

    小提示

    使用roslaunch时,是不用启动roscore,roscore自动启动(见下图)。

    原文链接:https://blog.csdn.net/lingchen2348/article/details/79661114

    作者:柒月
    Q群 :2122210(嵌入式/机器学习)
  • 相关阅读:
    JS中所有数组的方法和所有的对象方法,包含ES5和ES6
    (原创!)彻底理解JS中的事件,事件处理函数,钩子函数,回调函数。
    深拷贝和浅拷贝的区别,object.assgin方法是深拷贝还是浅拷贝
    axios,Ajax,jQuery ajax,axios和fetch的区别
    python : 文档比较
    leetcode——989.数组形式的整数加法
    leetcode——66.加一
    leetcode——283.移动0
    leetcode——27.移除元素
    leetcode刷题第一天——两数之和
  • 原文地址:https://www.cnblogs.com/Ph-one/p/14644686.html
Copyright © 2011-2022 走看看