(4)rosLaunch文件与参数服务器

rosLaunch文件与参数服务器

1、本次以Launch文件为基础,对参数服务器的内容进行一个简单了解
2、Launch文件是一种可以实现多节点启动和参数配置的xml文件

一、节点基础

1、Launch文件和package.xml文件一样,内容都是以标签形式书写

2、Launch文件包含的所有可用标签:
① node标签是:启动节点
② include标签是:嵌套(用这个Launch去打开别的Launch)
③ Remap标签是:对话题的重命名
④ group的作用是:节点分组,也有一个判断执行的功能
⑤ param和rosparam标签是:加载参数到参数服务器中(区别是param是加载一个参数,rosparam是加载一个参数文件)
⑥ arg标签是:局部参数(只在单独的launch文件有效,一般是做值传递的作用)
⑦ machine标签:在远程运行的时候才会用到,如果全部标签都运行在本地的话就不需要用到
⑧ env标签:用来设置接下来要启动的节点的环境变量

3、例子
① 根标签Launch:就是整个launch文件的开头和结尾,其余的标签都包含在这个根标签下

② 嵌套include:①是用include标签打开另一个launch文件
②是用include标签去加载其他xml参数文件

4、node指令基础
① ROS的程序运行单位是node,也就是节点运行单个node的指令是rosrun
② 模板: rosrun < package_name > <executable|python>
③ 参数:package_name:功能包名字
executable|python:可执行文件名字

5、每个节点还有它的属性
① pkg:节点所在包名
② type:可执行文件名
③ name:重定义节点名
④ args:传递参数
⑤ output:日志输出
⑥ respawn:“true”,如果节点失效则重启(默认时false)
⑦ required:“true”如果节点失效则关闭整个launch文件(默认不设置)

二、参数配置

1、和参数有关的标签有param、rosparam、arg
① param是将一个参数加载到参数服务器中
② rosparam是从 .yaml文件中一次性导入大量文件的参数
③ arg的作用是做一个值的传递(作用域只局限于当前的launch)

2、参数服务器(rosparam)
① 在机器人系统中的参数是非常多的(比如传感器的参数,算法的参数),同时参数的传递也是非常频繁的,因此设置和更改参数的便捷 性就显得十分重要,ROS就为我们提供了参数服务器这个功能,用户可以在命令行/launch文件/c++/python程序中去输入 、读取、修改和加载这个参数服务器中的参数,实现一个增删补改的一个内容,简单来说,参数服务器就是一本字典,你可以往里面输入参数,也可以从里面去读取参数,这个字典是全局的,在同一个"rosmaster"下运行的程序都是公用的。

② 关于参数服务器像刚刚说的会有一个命令行,还有launch文件/c++/python文件这三个方面去"增删补改"

③ 在命令行端的指令

  • rosparam list:列出参数服务器中的参数

    rosparam list 
  • rosparam get:获取参数

    rosparam get (parameter_name) 
  • rosparam set:设置参数

    rosparam set (parameter_name value) 
  • rosparam delete:删除参数

    rosparam delete (parameter_name) 
  • rosparam load:从文件加载参数到参数服务器

    rosparam load (dump.yaml) 
  • rosparam dump:将参数服务器 的参数写去文件

    rosparam dump (dump.yaml) 

④ 指令具体怎么用,可参考一个wiki文档

3、参数服务器的配置

① 参数服务器部分我们比较关心和用的比较多的是如何配套
② 这个launch和程序文件之间有一个参数参数通信
③ C++例子(参数服务器在CPP文件中的调用接口,以及在launch文件中加载这个参数到参数服务器的"param"和"rosoaram")

4、将参数加载到参数服务器中(param)
① 假如用到的是param
② 例子 < param name=“usart part name” type=“string” value=/dev/wheeltec controller>

  • "name"里面就是这个参数的名字
  • "type"是这个参数的数据类型
  • "Value"后面跟的是参数的值

5、参数服务器的使用(1)
① 参数加载到参数服务器里面之后,我们再从这个CPP文件里面去调用这个参数服务器里面的这个参数

② 看到这个C++文件里面的这个函数,可以看到它在这里将参数服务器的参数进行调用,这个参数服务器的函数首先需要一个节点句柄。
在这里插入图片描述
③ 这个private_nh参数就是C++里"ROS"初始化的一个节点句柄
④ 节点后面.paran后面跟着一个数据类型(如:string)
⑤ 括号里面首先是参数服务器上的这个参数名称(usart_port_name)
⑥ 参数名称对应的参数去赋值给这一个参数变量(usart_port_name)
⑦ 最后面的是一个初始值(假如我们再参数服务器中找不到这个名称的参数 ,那么久将这个初始值赋值给这个变量)

6、参数服务器的使用(2)(arg)
① 服务器还有一个比较常用的使用方法,就是一个arg和param配合使用的一个方法,这个方法有点像一个局部变量赋值给一个全局变量
在这里插入图片描述
② 图中第一条红线中arg指令是对一个局部变量进行赋值
③ 图中第二条红线中paran指令是就是读取name后变量的参数到value后面的变量
④ 数据类型是type后的数据类型

⑤ 这样使用的好处与优点:

  • 能将所有的arg参数整合到一块
  • 假如我要写一个很长的launch里面的参数可能不止一个地方被调用,改动的时候只用改一个地方就所有地方都被改了

7、group标签的使用
① 主要作用有两个

  • 第一个时候作为命名空间,也即是将若干个节点划分进同一个命名空间
  • 第二个作用是做一个条件判断的执行(类似if函数)

空间命名:
在这里插入图片描述
话题效果:
在这里插入图片描述
节点效果:
在这里插入图片描述

条件判断:
在这里插入图片描述
判断的是if=后面的""里的内容,内容为真就执行下面的的内容,为假就不执行

8、重命名的标签 remap
① 给话题改名字(重命名之后原话题就会消失)
② 例子:
< remap from = “/different_topic” to = “/needed_topic” />
原本话题名:/different_topic
输出目标名:/needed_topic

③ 它可以作为输入的时候用,也可以作为输出的时候用(当运行一个节点的时候,它有可能会订阅话题,或者是会发布话题,它订阅话题就是作为一个话题的输入,它发布话题就是作为一个话题的输出)

④ 输入就是这个节点在订阅话题时,将这个话题重命名 然后再订阅
⑤ 输出就是这个节点在发布话题时,将这个话题重命名 然后再发布

发布例子:
在这里插入图片描述
在这里插入图片描述
订阅例子:
在这里插入图片描述
在这里插入图片描述

原文链接:https://blog.csdn.net/m0_46278925/article/details/114702938

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/7183

(0)
上一篇 2022年10月18日
下一篇 2022年10月18日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml