ROS学习笔记(一) # ROS参数服务器
参考 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参数服务器的更多相关文章
- ROS学习笔记1-引言
该学习笔记参考ROS官方wiki的内容,见:http://wiki.ros.org/ROS/Introduction 什么是ROSROS的全称是Robot Operating System,即机器人操 ...
- ROS学习笔记七:在ROS中使用USB摄像头
下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...
- ROS学习笔记二:ROS系统架构及概念
本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...
- golang学习笔记8 beego参数配置 打包linux命令
golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...
- ROS学习笔记7-理解服务(services)和参数(parameter)
本文内容来自官方wiki:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams ROS服务(service)服务也是ROS中一种通 ...
- ROS学习笔记
创建ros工作环境: mkdir -p ~/catkin_ws/src //建立项目目录,同时生成src文件夹 cd ~/catkin_ws/ //进入项目目录 catkin_make //编译项目, ...
- ROS学习笔记2-基本概念
本笔记来源于:http://wiki.ros.org/ROS/Concepts ROS文件系统级别文件系统级别主要包含了你能在ROS的磁盘上遇到的资源,包括: 包(Packages):包是ROS中资源 ...
- ROS学习笔记(一) : 入门之基本概念
目录 基本概念 1. Package 2. Repositories 3. Computation Graph 4. Node 5. Master 6. Message 7. Topic 8. Ser ...
- ROS学习笔记三(理解ROS节点)
要求已经在Linux系统中安装一个学习用的ros软件包例子: sudo apt-get install ros-indigo-ros-tutorials ROS图形概念概述 nodes:节点,一个节点 ...
随机推荐
- Leapin' Lizards HDU - 2732 (恶心的建图。。)
这道题其实不难...就是建图恶心了点....emm... 题意: 多源多汇 + 拆边 青蛙跳柱子, 每根柱子都有一定的承载能力, 青蛙跳上去之后柱子的承载能力就会减一,跳到边界就能活 跳不到就over ...
- 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)
洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...
- 利用Python攻破12306的最后一道防线
各位同学大家好,我是强子,好久没跟大家带来最新的技术文章了,最近有好几个同学问我12306自动抢票能否实现,我就趁这两天有时间用Python做了个12306自动抢票的项目,在这里我来带着大家一起来看看 ...
- 自学Linux Shell15.2-作业控制命令(jobs/bg/nice/renice/at/atp/atrm/crontab)
点击返回 自学Linux命令行与Shell脚本之路 15.1-作业控制命令(jobs/bg/nice/renice/at/atp/atrm/crontab) 1 控制作业 1.1查看作业 (jobs ...
- 51nod1236 序列求和 V3 【数学】
题目链接 51nod1236 题解 用特征方程求得斐波那契通项: \[f(n) = \frac{(\frac{1 + \sqrt{5}}{2})^{n} - (\frac{1 - \sqrt{5}}{ ...
- linux 分区、目录及用途
主要分区: 目录 建议大小 格式 描述 / 10G-20G ext4 根目录 swap <2048M swap 交换空间 /boot 200M左右 ext4 Linux的内核及引导系统程序所需要 ...
- 在任意位置获取应用程序CONTEXT
Android程序中访问资源时需要提供Context,一般来说只有在各种component中(Activity, Provider等等)才能方便的使用api来获取Context, 而在某些工具类中要获 ...
- 2018 省选 D1T2 IIIDX
题目大意: 给出k.n个数选择一种字典序最大的排列,使得对于任意的i,di>=d[i/k](下取整 下同) 分析: 很容易想到的是建树,将i的父亲设为[i/k],之后建有向边. 60分贪心: 将 ...
- Windows 服务程序、窗口界面、桌面交互、与远程桌面
昨天用c写了一个windows服务(服务内部带一个gui窗口+系统托盘),在windows xp sp3上测试,启动服务后,系统托盘显示正常. 但在另一台windows 2003 sp2 上测试(通过 ...
- c#连接Redis Redis的安装与配置
Redis是一个不错的缓存数据库,读取数据速度效率都很不错.今天大家共同研究下redis的用法.结合网上的资料和自己的摸索,先来看下安装与配置把. 咱们主要看在WINDOWS上怎样使用REDIS数据库 ...