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:节点,一个节点 ...
随机推荐
- Sabotage UVA - 10480 (输出割边)
题意:....emm...就是一个最小割最大流,.,...用dinic跑一遍.. 然后让你输出割边,就是 u为能从起点到达的点, v为不能从起点到达的点 最后在残余路径中用dfs跑一遍 能到达的路 ...
- Spring Security和 JWT两大利器来打造一个简易的权限系统。
写在前面 关于 Spring Security Web系统的认证和权限模块也算是一个系统的基础设施了,几乎任何的互联网服务都会涉及到这方面的要求.在Java EE领域,成熟的安全框架解决方案一般有 A ...
- 08 Zabbix Item类型之Zabbix agent类型
点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 08 Zabbix Item类型之Zabbix agent类型 Zabbix agent类型的item是使用部署在服务器端的age ...
- 架构师成长之路3.1-Cobber原理及部署
点击返回架构师成长之路 架构师成长之路3.1-Cobber原理及部署 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理 ...
- [NOI2012] 骑行川藏 | 求导 二分
一个能看的题解!预备知识只有高中数学的[导数].不用什么偏导数/拉格朗日乘子法之类的我看不懂的东西( •̀∀•́ )! 如果你不知道什么是导数,可以找本高中数学选修2-2来看一下!看第一章第1.2节就 ...
- 超越LLMNR /NBNS欺骗 - 利用Active Directory集成的DNS
利用名称解析协议中的缺陷进行内网渗透是执行中间人(MITM)攻击的常用技术.有两个特别容易受到攻击的名称解析协议分别是链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBNS).攻击者可以 ...
- scala生态圈概览
相信很多朋友都对 Scala 这个结合了面向对象编程范式和函数式编程范式的编程语言新宠有所耳闻吧?!那么一旦你所在的项目选择了 Scala 的技术栈,还有哪些工具,类库可以选择呢?各种类型的框架或者类 ...
- NO.11 复制时勿忘其每个成分
1.Coping 函数应该确保复制对象内的"每一个成员变量",和调用合适的 "base class"构造函数(base class 某些成员往往是private ...
- 设置 webstorm 对 .vue 高亮
1. 首先安装vue插件,安装方法: setting --> plugin ,点击plugin,在内容部分的左侧输入框输入vue,会出现两个关于vue的插件,点击安装即可.安装完成后,就可 ...
- 使用LTP套件对Linux系统进行压力测试
使用LTP套件对Linux系统进行压力测试 https://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=6764 https ...