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