ROS学习之参数

摘要:
除了前面介绍的消息传递之外,ROS还提供了另一种获取节点信息的参数机制。

ROS学习之参数

        除 了 前 面 介 绍 过 的 消 息 传 递 , ROS 还 提 供 另 一 种 参 数( parameters )机制用于获取节点的信息。其主要思想是使用集中参数服务器( parameter server )维护一个变量集的值,包括整数、浮点数、字符串以及其他数据类型,每一个变量用一个较短的字符串标识  。由于允许节点主动查询其感兴趣的参数的值,它们适用于配置那些不会随时间频繁变更的信息。

0.1命令行指令

0.1.1参数列表

rosparam list 显示当前所有参数

    注意:在当前版本的 ROS 中,参数服务器是节点管理器的一部分,因此,它总是通过 roscore 或者 roslaunch 自动启动。在所有情况下,参数服务器都能在后台正常工作,因此没有必要去花心思考虑它。然而,需要铭记的是,所有的参数都属于参数服务器而不是任何特定的节点。这意味着参数——即使是由节点创建的——在节点终止时仍将继续存在。

0.1.2查询参数

rosparam get parameter_name  查询某个参数值

    例如,如下命令将读取参数/rosdistro 的值:
rosparam get /rosdistro
    其输出为字符串 indigo,这并不奇怪(译者注:rosdistro 指ROS 的版本,如果读者使用其他的发行版,将产生不同的输出)。

0.1.3设置参数

rosparam set parameter_name parameter_value
    该命令可以修改已有参数的值或者创建一个新的参数。例如,以下命令可以创建一系列字符串参数,用以存储一组卡通鸭子的颜色偏好:
rosparam set /duck_colors/huey red
rosparam set /duck_colors/dewey blue
rosparam set /duck_colors/louie green
rosparam set /duck_colors/webby pink

     另外,我们可以同时设置同一命名空间中的几个参数:
rosparam set namespace values
     这里要以 YAML 字典的形式表示参数和对应值的映射关系。
     下面的例子和前面四行命令具有同样的作用:
rosparam set /duck_colors "huey: red
dewey: blue
louie: green
webby: pink"
     需要注意的是,这种语法需要在命令中使用换行符。当然,这并不会造成什么问题,因为第一个引号告诉 bash 命令尚未完成。当在引号内按下回车时,终端将插入一个换行符而不是执行命令。

0.1.4创建和加载参数文件
      为了以 YAML 文件的形式存储命名空间中的所有参数,可以使用 rosparam dump 命令:
rosparam dump filename namespace
      与 dump 相反的命令是 load,它从一个文件中读取参数,并将它们添加到参数服务器:
rosparam load filename namespace

0.2用C++获取参数

    使用ROS参数的C++接口是相当简单的:
void ros::param::set(parameter_name, input_value);
bool ros::param::get(parameter_name, output_value);
    在这两种情况下,参数名是一个字符串,它可以是全局的、相对的或者是私有的。set 函数中的输入值 input_value 可以是std::string、bool、int 或 double 类型;get 函数的输出值应该是上述某个类型的变量(通过引用传递)。如果参数值读取成功,则get 函数返回 true;如果出现了问题,通常表示所请求的参数还没有被指定一个值,则该函数返回 false。举例如下:

ros::param::set ("background_r" , 255) ;
ros::param::set ("background_g" , 255) ;
ros::param::set ("background_b" , 0) ;

以上为设置我们的背景颜色参数。

const std::string PARAM_NAME = "~max_vel" ;
double maxVel ;
bool ok = ros::param::get (PARAM_NAME, maxVel) ;

 以上为读取“~max_vel”参数值,并存储到本地变量maxvel中。

0.3在启动文件中设置参数

0.3.1设置参数

   可以使用param元素请求roslaunch设置参数值 :<param name="param-name" value="param-value" />这个元素,正如你所猜测的,将给定的值赋给给定名称的参数。通常,这个参数名是相对的。例如,下面的启动文件片段相当于第 129 页的 rosparam 命令集:
<group ns="duck_colors">
<param name="huey" value="red" />

0.3.2私有参数

设置私有参数 另一个可选方法是在节点元素中包含 param 元素。
<node . . . >
<param name="param-name" value="param-value" />
. . .
</node>
在该结构下,参数名将被当做该节点的私有名称。


0.3.3在文件中读取参数

    最后,启动文件也支持 与rosparam load等价的命令,可以一次性从文件中加载多个参数 7 :
<rosparam command="load" file="path-to-param-file" />
    这里列出的参数文件通常是通过 rosparam dump 命令创建的。与其他特定文件的引用相同(例如 6.5.1 节的 include 元素),使用查找替换来指定功能包的相对路径是常见做法:
<rosparam
file="$(find package-name)/param-file"
/>
与 rosparam load 一样,这个功能有助于测试,因为它允许用
户重现在过去的某个时间有效的参数。

免责声明:文章转载自《ROS学习之参数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇缓存子系统如何设计Firebird数据库自动备份脚本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MikroTik RouterOS安装方法收集(转)

注意:ROS无法使用U盘安装,如果要使用ISO文件进行安装就必须使用光驱以及刻录成光盘,并且只能使用IDE的光驱。 一、首先了解常见的ROS硬件架构: X86架构(也是最常用的) mipsbe(欧米tik、部分RB系列、SXT、Groove等) mipsle(RBC系列、RB100、RB500系列等) pocketPC(PPC、RB1000就是这个架构的...

SQL代码检查

1.使用 insert、select必须给出字段列表 因为使用*代替所有的字段后,如果表结构发生变化,应用程序可能出现无法识别的情况。比如java的Struts2+spring+ibatis框架,sql语句在XML档配置,内容:<select parameterClass="java.util.HashMap" resultClass="TableC...

layui从子iframe打开父iframe的tab选项卡

数据表格字段: {field: 'novelId', title: '小说ID',100,templet: '<div><a href="javascript:;" _href="/contentManage/content-chapters.html" novelName="{{d.name}}" onclick="showChapte...

ROS(Robot Operating System)常用环境变量介绍

本文简单介绍ROS系统中常用的环境变量用途及设置方式。ROS系统环境中除了必须配置的环境变量以外,其他的也是十分有用,通过修改变量路径,可以设置ROS系统中log文件存放路径,单元测试结果存放路径等。 http://wiki.ros.org/ROS/EnvironmentVariables 一 、必选设置的环境变量 1、 ROS_ROOT 这个是ROS核心...

[OpenCV开发]OpenCV图像编码和解码 imencode和imdecode使用,用于网络传输图片

在很多应用中,经常会直接把图片的二进制数据进行交换,比如说利用 socket 通信传送图片二进制数据,或者直接用内存数据库(例如 Redis)来传递图片二进制数据。 这个时候,当你的应用程序读到内存里的二进制图片数据时,怎么样直接转为 OpenCV 可以使用的图片格式呢,答案是用 cv::imdecode 这个函数: std::vector<ch...

ROS惯导数据发布(Python)

一、背景   基本配置:ubuntu 16.04,ROS Kinetic   惯导型号:维特智能 WT61C(六轴惯导)   维特智能官方提供的参考程序是通过手动比较各个字节来确定数据包/数据帧的,个人认为比较繁琐,因此采用Python的re(正则表达式)和struct(字节处理)模块简化其数据匹配和提取,并实现惯导数据在ROS中的发布。 二、程序   惯...