参考 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. helm详解

    helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共享和使用为Kubernetes构建的应用. 一.基本概念1.Helm的三个基本概念Chart:Helm应用(package) ...

  2. A1067. Sort with Swap(0,*)

    Given any permutation of the numbers {0, 1, 2,..., N-1}, it is easy to sort them in increasing order ...

  3. [luoguU42591][小T的绝对值]

    luoguU42592 20分思路 对给出的序列求出前缀和,然后\(n^2\)暴力枚举即可拿到第一档分 40分思路 对于数列中的数都相同的情况.只需要特判即可.只要特别注意全都是0的情况即可. 100 ...

  4. 用矩阵和待定系数法求数列的分析(复杂度log(n))

    下载地址:http://pan.baidu.com/s/1nuVew6d

  5. mock.js的使用

    安装 npm install mockjs 使用 const Mock = require("mockjs") //格式"属性名|min-max": " ...

  6. 盖得化工----requests/bs4---采集二级网址

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  7. circRNA

    一.circRNA序列提取 环状RNA (circRNA)是一类不具有 5' 末端帽子和 3' 末端 poly(A)尾巴.并以共价键形成环形结构的非编码 RNA 分子. 环状RNA (circRNA) ...

  8. Golang的防坑小技巧

    Golang的防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名小白,在之前没有接触到编程的小伙伴,难免会踩到一些坑,比如说刚刚入门的时候你需要安装环境,学习Gol ...

  9. 如何用matplotlib绘制决策边界

    import matplotlib.pyplot as plt import numpy as np import sklearn import sklearn.datasets import skl ...

  10. python 之禅 import this

    dongweiming的博客 前言 我这个博客一直都是一些技术分享,show code的地方,我从来没有写过个人生活或者情感杂谈,当然我也从来没有谈论过我对什么东西的喜恶. 很多人喜欢喷XX语言,喜欢 ...