ROS系统基础知识梳理 (三) launch文件

ROS系统基础知识梳理(三) launch文件

高能预警!!!Ubuntu下搜狗输入法炸了,只能输出英文标点,强迫症慎入
launch文件,遵循XML语言规范,位于每个ROS功能包的launch文件夹中,用于多节点的启动/参数上传等功能.
launch文件使用roslaunch命令运行,函数原型如下:

roslaunch [packagename] [launch_file_name]

XML文件注意事项

所有元素必须有关闭标签
XML语法对大小写敏感,即对于大小写字母区分对待
嵌套格式必须正确
XML属性值必须加引号
< 和&不允许存在于元素内部,可使用实体引用,XML共有5个实体引用
XML实体引用字符
图片来源于菜鸟教程,侵删。

XML注释格式:

<!-- This is acomment-->

声明语句

<?xml version = "1.0" encoding = "UTF-8"?>

该语句为声明语句,声明了所使用的xml版本,以及编写使用的编码格式.launch文件不要求编写声明.

根元素<launch>

根元素,用来说明文件的类型及作用,文件必须包含根元素,根元素由一队标签定义:<launch>…<launch/>,文件所有元素必须包含在根元素内部.

子元素–<node>

launch文件核心功能是启动ROS节点,节点采用定义,其语法原型如下:

<node pkg = "ROS_package_name" type = "executable_file_name" name = "node_name"/>

在launch文件中启动一个节点需要三个属性: pkg, type, 和name. 其中:
pkg: 用于定义节点所在所在的ROS功能包的名字.
type: 定义节点的可执行文件名称, 等同于运行rosrun命令时输入的type.
name: 定义启动后的ROS节点名称, 参数可覆盖程序内部ros::init()函数所指定的ros节点名称.
除去至三个常用的属性标签之外,还有一些其他的属性:
output = “screen”: 控制节点的输出对象,默认输出为日志文档,设置output = "screen"可在屏幕上打印节点的标准输出
respawn = “true”:复位属性,默认设置为false,设置为true时,当节点终止运行后会自动重启.
required = “true”:设置必要节点,当该节点关闭时,关闭launch文件设置的其他节点。默认设置为false。
ns = “namespace”:为节点添加命名空间标签。

暂时只总结这些,其他的以后用到再补…

参数设置

参数设置包含<param>和<arg>两个子元素,这两个子元素分别代表parameter和argument,都是参数的意思,但表示含义却完全不同。

<param>

<param>表示在ROS系统运行时的参数,当launch文件运行时,launch文件将设置的参数上传到参数服务器parameter server上,所有在运行的节点都可以通过相应的读取函数获取parameter server上的值。param的语法原型如下:

<param name = "param_key" type = "param_type" value = "param_value"/>

param子元素下常用的有三个标签:name,type,value。分别代表要上传的参数名称、参数类型以及参数的具体值。
列举几个NodeHandle类中用于参数读取的成员函数:

  1. ros::NodeHandle::param(const std::string & param_name, T & param_value, const T & default_value) const(inline)
    param函数,接受三个参数,第一个参数作为要获取的参数名称,第二个参数用来存储获取的参数,第三个参数表示当参数获取失败时所使用的默认值参数。函数可以用于获取int型、float型,char型以及string型参数。
  2. bool ros::NodeHandle::getParam()函数
    函数接受两个参数,第一个参数作为要获取参数的名称,第二个参数作为获取的参数要存储的位置。函数经过重载后可用于获取bool型、int型、char型、float型以及arbitrary XML/RPC参数(最后一个类型不是很懂)。
  3. bool ros::NodeHandle::getParamCached()函数
    参数、返回值同上,具体区别周末搞一下,先mark
    函数类定义及解释参见链接:
    docs.ros.org/diamondback/api/roscpp/html/classros_1_1NodeHandle.html#a2d4e7d245c8cc19de60595204ae99c7d

<arg>

argument是不同于parameter的概念,类似于launch文件内部的局部变量,仅限于launch文件使用,便于launch文件的重构,与ros节点实现无太大关系。
设置argument语法如下:

<arg name = "argument_name" vlaue = "argument_value"/>

当需要使用argument时,可通过如下方式进行调用:

<param name ="param_name" value = "$(arg arg-name)" />
node name = "node_name" pkg = "package_dir" type = "node_type" argus = "$(arg arg-name)"/>

重映射

为提高代码的复用率,ros系统允许我们将社区中的功能包down下来直接用,而不需要过分关注内部代码的具体实现,为解决包之间的接口差异问题,ros系统开发了重映射机制,通过<remap>来实现。
重映射可以更改接口名称,但接口的数据类型必须相同。
例如将topic /turtle1/cmd_vel所pub的数据重映射到topic /cmd_vel:

<remap from = "/turtle1/cmd_vel" to = "/cmd_vel"/>

重映射机制种类较多,后面单独总结一下mark

launch文件嵌套

当系统较为复杂时,launch文件较多,launch文件之间的依赖关系也会较多。可以在launch文件中include其他launch文件进行调用,类似于c++中的include。

<include file = "$(dir_name) / other.launch" />

launch 文件更多标签参考wiki链接:launch文件高级标签

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值