参考 roscpp/Overview/Parameter Server

0. 概述

ROS参数服务器能够保存 string, int, float, double, bool, list, dictionaries, base64 encoded类型的数据,如果需要保存其他类型可以使用 XmlRpc::XmlRpcValue class

roscpp 有两种不同的参数API

1. bare 版本        ros::param 接口

2. handle 版本     ros::NodeHandle 接口

1. 在参数服务器获取参数

ros::NodeHandle::getParam()

获得的参数相对节点句柄(NodeHandle)名称空间解析

ros::NodeHandle nh;
std::string global_name, relative_name, default_param;
if (nh.getParam("/global_name", global_name))
{
...
} if (nh.getParam("relative_name", relative_name))
{
...
} // 默认值
nh.param<std::string>("default_param", default_param, "default_value");

1.2 ros::param::get()

获得的参数相对node名称空间进行解析

std::string global_name, relative_name, default_param;
if (ros::param::get("/global_name", global_name))
{
...
} if (ros::param::get("relative_name", relative_name))
{
...
} // 默认值
ros::param::param<std::string>("default_param", default_param, "default_value");

1.3 缓存参数

     ros::NodeHandle::getParamCached()

     ros::param::getCached()

这两个函数可以完成本地参数的缓存,命令参数服务器一旦参数变化就立即通知这个节点。可以大大提高速度(首次调用之后),但是为了防止重载,应该谨慎使用。

2. 设置参数

     ros::NodeHandle::setParam()

通过NodeHandle版本检索的参数相对于NodeHandle的名称空间来解析。

ros::NodeHandle nh;
nh.setParam("/global_param", 5);
nh.setParam("relative_param", "my_string");
nh.setParam("bool_param", false);

ros::param::set()

通过“bare”版本检索的参数将相对于节点的名称空间解析。

ros::param::set("/global_param", 5);
ros::param::set("relative_param", "my_string");
ros::param::set("bool_param", false);

3. 检查参数是否存在

     ros::NodeHandle::hasParam()

ros::NodeHandle nh;
if (nh.hasParam("my_param"))
{
...
}

ros::param::has()

if (ros::param::has("my_param"))
{
...
}

4. 删除参数

ros::NodeHandle::deleteParam()

ros::NodeHandle nh;
nh.deleteParam("my_param");

ros::param::del()

ros::param::del("my_param");

5. 访问私有参数

handle 接口必须创建一个新的 ros::NodeHandle 以一个私有名称空间作为其名称空间。

ros::NodeHandle nh("~");
std::string param;
nh.getParam("private_name", param);

ros::param 版本

 std::string param; ros::param::get("~private_name", param);

6.

有时候你需要从最近的工作空间获取参数。比如,如果你有一个名为 “robot_name” 的参数,你只想从自己的私有名称空间开始向上搜索知道找到匹配参数。

类似的,如果你有一组摄像机节点,你可能希望在一个公共的名称空间里共同设置一些参数但是在私有名称空间里重写其他参数。

注意: 为了使搜索更加高效, you should use it with relative names instead of /global and ~private names.

ros::NodeHandle::searchParam()

std::string key;
if (nh.searchParam("bar", key))
{
std::string val;
nh.getParam(key, val);
}

ros::param::search()

std::string key;
if (ros::param::search("bar", key))
{
std::string val;
ros::param::get(key, val);
}

ROS学习笔记(一) # ROS参数服务器的更多相关文章

  1. ROS学习笔记1-引言

    该学习笔记参考ROS官方wiki的内容,见:http://wiki.ros.org/ROS/Introduction 什么是ROSROS的全称是Robot Operating System,即机器人操 ...

  2. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  3. ROS学习笔记二:ROS系统架构及概念

    本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...

  4. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...

  5. ROS学习笔记7-理解服务(services)和参数(parameter)

    本文内容来自官方wiki:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams ROS服务(service)服务也是ROS中一种通 ...

  6. ROS学习笔记

    创建ros工作环境: mkdir -p ~/catkin_ws/src //建立项目目录,同时生成src文件夹 cd ~/catkin_ws/ //进入项目目录 catkin_make //编译项目, ...

  7. ROS学习笔记2-基本概念

    本笔记来源于:http://wiki.ros.org/ROS/Concepts ROS文件系统级别文件系统级别主要包含了你能在ROS的磁盘上遇到的资源,包括: 包(Packages):包是ROS中资源 ...

  8. ROS学习笔记(一) : 入门之基本概念

    目录 基本概念 1. Package 2. Repositories 3. Computation Graph 4. Node 5. Master 6. Message 7. Topic 8. Ser ...

  9. ROS学习笔记三(理解ROS节点)

    要求已经在Linux系统中安装一个学习用的ros软件包例子: sudo apt-get install ros-indigo-ros-tutorials ROS图形概念概述 nodes:节点,一个节点 ...

随机推荐

  1. android 面试准备基础题

    1.    请描述下Activity的生命周期. 必调用的三个方法:onCreate() --> onStart() --> onResume(),用AAA表示 )父Activity启动子 ...

  2. 【BZOJ5286】[HNOI2018]转盘(线段树)

    [BZOJ5286][HNOI2018]转盘(线段树) 题面 BZOJ 洛谷 题解 很妙的一道题目啊.(全世界除了我这题都有40分,就我是一个状压选手 首先来发现一些性质,我们走一圈一定不会更差. 为 ...

  3. luogu2279 消防局的设立 (贪心)

    按点的深度从大到小排序,每次取出深度最大的那个点,如果它还没被覆盖,就在它爷爷上放一个消防局,这样一定是最优的 为了判定是否被覆盖,可以记录从某点的子树中到这个点的最近消防局的距离dis[](如果没有 ...

  4. MATLAB:图像水平、垂直、水平垂直镜像、转置、旋转变换(flipdim、mirror、transp、imrotate函数)

    1.原图像经水平.垂直.水平垂直镜像设置通过mirror函数实现: close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imrea ...

  5. MATLAB:增加噪声,同时多次叠加噪声图和原图以及求平均图像(imnoise,imadd函数)

    本次涉及了对原图像增加高斯噪声.多次叠加原图和高斯噪声图以及叠加后的平均图像. close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; R ...

  6. 走进JVM之一 自己编译openjdk源码

    想要深入了解JVM,就必须了解其实现机制.了解JVM实现的最好方法便是自己动手编译JDK.好了,让我们开始吧! 1.  准备工作 获取OpenJDK源码 本次编译选择的是OpenJDK7u,官方源码包 ...

  7. 2018.9青岛网络预选赛(K)

    传送门:Problem K https://www.cnblogs.com/violet-acmer/p/9664805.html 题意: 给你n个数,找出满足条件的最多的数的个数. 题解: 满足条件 ...

  8. 使用Nginx反向代理和proxy_cache缓存搭建CDN服务器加快Web访问速度

    碰到问题:移动用户访问web服务器www.osyunwei.com很慢解决办法:1.在移动机房放置一台nginx反向代理服务器2.通过域名DNS智能解析,所有移动用户访问www.osyunwei.co ...

  9. SQL Server解析XML数据的方法详解

    --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name=&q ...

  10. Spring + Mybatis 读写分离

    项目背景:项目开发中数据库使用了读写分离,所有查询语句走从库,除此之外走主库. 实现思路是: 第一步,实现动态切换数据源:配置两个DataSource,配置两个SqlSessionFactory指向两 ...