param参数服务器

article/2025/11/2 10:58:43

param参数服务器

声明:本文主要内容来自: MOOC 机器人操作系统入门.仅仅是为了查阅方便,做了个小结,侵权必删!

Table of Contents

零.param介绍

0.0 param有什么用

0.1参数类型

 

 二.如何使用----三种维护方式

2.1命令行维护

2.2.launch文件

 2.2.1 yaml文件

2.3node源码

 三.命名空间对param的影响


 

零.param介绍

0.0 param有什么用

机器人工作时,我们有需要对机器人的参数(如传感器参数、算法的参数)进行设置。有些参数(如机器人的轮廓、传感器的高度)在机器人启动时就设定好就行了;有些参数则需要动态改变(特别是在调试的时候)。ROS提供了参数服务器来满足这一需求。我们可以将参数设置在参数服务器,在需要用到参数的时候再从参数服务器中获取。[1]
 

0.1参数类型

ROS参数服务器为参数值使用XMLRPC数据类型, 其中包括:strings, integers, floats,booleans, lists, dictionaries, iso8601 dates, and base64-encoded data

 

 二.如何使用----三种维护方式

2.1命令行维护

2.2.launch文件

       parameter是ROS系统中运行的参数,存储在参数服务器当中.在launch文件当中通过<param>元素加载parameter;launch文件执行后,parameter就加载到ROS的参数服务器上了.

      launch文件中有很多标签, 而与参数服务器相关的标签只有两个, 一个是 <param> , 另一个是 <rosparam>rosparam可操作多个参数,以及yaml文件参数,param一次性只能指定一个参数,且是标准类型的参数。

 

  • <param>标签可用于直接设置参数,也可以从文件中读取
  • <rosparam>标签用于从yaml文件中读取并设置参数,也可以设置多个参数
  • roslaunch发现<param>和<rosparam>标签后会调用rosparam包来实现设置
<launch><!--param参数配置--><param name="param1" value="1" /><param name="param2" value="2" /><!--param name="table_description" command="$(find xacro)/xacro.py $(find gazebo_worlds)/objects/table.urdf.xacro" /--><!--rosparam参数配置  一次设置多个参数--><rosparam>   param3: 3param4: 4param5: 5</rosparam><!--以上写法将参数转成YAML文件加载,注意param前面必须为空格,不能用Tab,否则YAML解析错误--><!--rosparam file="$(find robot_sim_demo)/config/xbot-u_control.yaml" command="load" /--><node pkg="param_demo" type="param_demo" name="param_demo" output="screen" /></launch>

 

 2.2.1 yaml文件

这个例子在自己创建的功能包param_meter下.

  • 如下图所示在功能包下创建新的文件夹param,再在这个文件夹下创建 yaml文件param.yaml.

 

  • 编写yaml文件
parammeter_test:param3: 56param4: 58param5: 96

 

  • 在launch文件中进行修改

加入

	<rosparam file="$(find param_meter)/param/param.yaml" command="load" />

 变成

<launch><!--param参数配置--><param name="param1" value="1" /><param name="param2" value="2" /><!--param name="table_description" command="$(find xacro)/xacro.py $(find gazebo_worlds)/objects/table.urdf.xacro" /--><!--rosparam参数配置--><rosparam>   param3: 3param4: 12param5: 9</rosparam><!--以上写法将参数转成YAML文件加载,注意param前面必须为空格,不能用Tab,否则YAML解析错误--><rosparam file="$(find param_meter)/param/param.yaml" command="load" /><!--rosparam file="$(find robot_sim_demo)/config/xbot-u_control.yaml" command="load" /--><node pkg="param_meter" type="param_meter" name="param_meter" output="screen" /></launch>

 

  •  运行launch文件

得到了运行结果,param的值和自己设置的相同.

 

2.3node源码

关于param的API, roscpp为我们提供了两套, 一套是放在 ros::param namespace下, 另一套是在 ros::NodeHandle 下, 这
两套API的操作完全一样, 用哪一个取决于你的习惯。

  •     ros::param namespace
  •     ros::NodeHandle

和param相关的操作如下:

  • get param
  • set param
  • check param
  • delete param
#include<ros/ros.h>int main(int argc, char **argv){ros::init(argc, argv, "param_demo");ros::NodeHandle nh;int parameter1, parameter2, parameter3, parameter4, parameter5;//Get Param的三种方法//① ros::param::get()获取参数“param1”的value,写入到parameter1上bool ifget1 = ros::param::get("param1", parameter1);//② ros::NodeHandle::getParam()获取参数,与①作用相同bool ifget2 = nh.getParam("param2",parameter2);//③ ros::NodeHandle::param()类似于①和②//但如果get不到指定的param,它可以给param指定一个默认值(如33333)nh.param("param3", parameter3, 33333);if(ifget1)ROS_INFO("Get param1 = %d", parameter1);elseROS_WARN("Didn't retrieve param1");if(ifget2)ROS_INFO("Get param2 = %d", parameter2);elseROS_WARN("Didn't retrieve param2");if(nh.hasParam("param3"))ROS_INFO("Get param3 = %d", parameter3);elseROS_WARN("Didn't retrieve param3");//Set Param的两种方法//① ros::param::set()设置参数parameter4 = 4;ros::param::set("param4", parameter4);//② ros::NodeHandle::setParam()设置参数parameter5 = 5;nh.setParam("param5",parameter5);ROS_INFO("Param4 is set to be %d", parameter4);ROS_INFO("Param5 is set to be %d", parameter5);//Check Param的两种方法//① ros::NodeHandle::hasParam()bool ifparam5 = nh.hasParam("param5");//② ros::param::has()bool ifparam6 = ros::param::has("param6");if(ifparam5) ROS_INFO("Param5 exists");elseROS_INFO("Param5 doesn't exist");if(ifparam6) ROS_INFO("Param6 exists");elseROS_INFO("Param6 doesn't exist");//Delete Param的两种方法//① ros::NodeHandle::deleteParam()bool ifdeleted5 = nh.deleteParam("param5");//② ros::param::del()bool ifdeleted6 = ros::param::del("param6");}

 

 三.命名空间对param的影响

在实际的项目中, 实例化句柄时, 经常会看到两种不同的写法 ros::NodeHandle n;  ros::NodeHandle nh("~");` 这两种写法有什么不同呢? launch文件夹的demo.launch定义两个参数, 一个全局serial 他的数值是5,一个是局部的serial, 他的数值是10.在launch 标签内的是全局参数值, node 标签内的是局部参数其有效域是当前节点。[2]

<launch><!--全局参数serial--><param name="serial" value="5" /><node name="name_demo" pkg="name_demo" type="name_demo"output="screen"><!--局部参数serial--><param name="serial" value="10" /></node>
</launch>

 


在name_demo.cpp中, 我们分别尝试了, 利用全局命名空间句柄提取全局的param和局部的param以及在局部命名空间下的句柄提取全局的param和局部的param, 详细的代码如下 :

#include <ros/ros.h>int main(int argc, char* argv[])
{int serial_number = -1;//serial_number初始化ros::init(argc, argv, "name_demo");//node初始化/*创建命名空间*///n 是全局命名空间ros::NodeHandle n;//nh 是局部命名空间ros::NodeHandle nh("~");/*全局命名空间下的Param*/ROS_INFO("global namespace");//提取全局命名空间下的参数serialn.getParam("serial", serial_number);ROS_INFO("global_Serial was %d", serial_number);//提取局部命名空间下的参数serialn.getParam("name_demo/serial", serial_number);//在全局命名空间下,要提取局部命名空间下的参数,需要添加node nameROS_INFO("global_to_local_Serial was %d", serial_number);/*局部命名空间下的Param*/ROS_INFO("local namespace");//提取局部命名空间下的参数serialnh.getParam("serial", serial_number);ROS_INFO("local_Serial was %d", serial_number);//提取全局命名空间下的参数serialnh.getParam("/serial", serial_number);//在局部命名空间下,要提取全局命名空间下的参数,需要添加“/”ROS_INFO("local_to_global_Serial was %d", serial_number);ros::spin();return 0;
}

 

 

 


http://chatgpt.dhexx.cn/article/syIawOwr.shtml

相关文章

C#——param关键字的使用

C#的param 关键字常用于对数据库进行操作的方法&#xff0c;通过param关键字可以防止SQL注入问题。 代码举例&#xff1a; static void Main(string[] args) {Console.WriteLine(Sum(1));Console.WriteLine(Sum(1, 2, 3));Console.WriteLine(Sum(1, 2, 3, 4, 5)); }private st…

深度学习中有关网络中的参数量(param)计算。附录有浮点计算量(FLOPs)的链接。

文章目录 网络中的参数量(param)和浮点计算量(FLOPs)的计算一、网络中的参数量(param)是什么&#xff1f;浮点计算量(FLOPs)是什么&#xff1f;二、如何计算网络中的参数量(param)网络中的参数量(param)的计算卷积层&#xff1a;计算公式&#xff1a; 池化层:全连接层:CONV->…

【详解】@Param注解的用法

1、概述 首先明确这个注解是为SQL语句中参数赋值而服务的。 Param的作用就是给参数命名&#xff0c;比如在mapper里面某方法A&#xff08;int id&#xff09;&#xff0c;当添加注解后A&#xff08;Param("userId") int id&#xff09;&#xff0c;也就是说外部想要取…

关于STM32例程中U8,U16,U32的问题

在看STM32例程的时候&#xff0c;发现对u8, u16&#xff0c;u32存在疑问。 使用go to definition时发现无法找到 然后项目管理栏上&#xff0c;发现stdio.h,stdint.h出现了感叹号警示 解决方式&#xff0c;打开微库 使用go to definition&#xff0c;还是没有&#xff0c;于是…

C语言用printf()打印u8,u16,u32等参数类型

想必大家都知道printf打印int 型是用%d,但是u8,u16,u32,u64还有s8,s16,s32,s64是如何打印呢&#xff0c;知道的大佬绕行哈&#xff0c;不知道往下看看。 what is u8? 常见的u8其实是自定义的&#xff0c;定义如下&#xff1a; typedef signed char s8; typedef unsigned …

LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)

阴码逐列 式顺向C51 格式 void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode) { u8 temp,t1,t;u16 y0y;u8 csize(size/8((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数 numnum- ;//得到偏移后的值&#xff08;ASCII字库是从空格开始取…

【☠️️社死现场の老板来了☠️️】小伙,搞C语言嵌入式开发这么久了,还不知道u8、u16、u32、s8、s16、s32是什么意思啊?

老板来了&#xff1a; 糖糖小伙&#xff0c;你搞C语言嵌入式开发这么久了&#xff0c;我来考考你u8、u16、u32、s8、s16、s32是什么意思啊&#xff1f;你要是回答的让我满意了&#xff0c;给你升职加薪&#xff0c;从此走上人生巅峰呦~ 报告老板&#xff1a; 作为C语言后入式…

C语言中vu16什么意思,15.stm32 数据类型的定义(常用的U8,U16,U32到底代表什么)

满意答案 月冰p莹月 2020.09.14 采纳率&#xff1a;48% 等级&#xff1a;12 已帮助&#xff1a;9104人 去百度文库&#xff0c;查看完整内容> 内容来自用户:尘客i 在KeilMDK开发环境里&#xff0c;比如一个无符号32位整形数据会有很多种表示方法&#xff1a; 1&#xff0…

C语言中u8 u16 u32含义,有关stm32的问题,程序里面的u8、u16这些是什么意思啊

u8是unsigned char&#xff0c;u16是unsigned short&#xff0c;u32是unsigned long。 u8&#xff0c;u16&#xff0c;u32都是C语言数据类型&#xff0c;分别代表8位&#xff0c;16位&#xff0c;32位长度的数据类型&#xff0c;一个字节是8位&#xff0c;所以u8是1个字节&…

C语言中u8 u16 u32含义,有关stm32的问题,程序里面的u8、u16的含义

u8是unsigned char&#xff0c;u16是unsigned short&#xff0c;u32是unsigned long。 ; u8&#xff0c;u16&#xff0c;u32都是C语言数据类型&#xff0c;分别代表8位&#xff0c;16位&#xff0c;32位长度的数据类型&#xff0c;一个字节是8位&#xff0c;所以u8是1个字节&…

u32在c语言中的作用,c语言中u8,u16,u32(示例代码)

u8是unsigned char&#xff0c;u16是unsigned short&#xff0c;u32是unsigned long。 u8&#xff0c;u16&#xff0c;u32都是C语言数据类型&#xff0c;分别代表8位&#xff0c;16位&#xff0c;32位长度的数据类型&#xff0c;一个字节是8位&#xff0c;所以u8是1个字节&…

《C语言程序设计》实训报告

任务一顺序结构程序设计 1.编写已知半径r为15求圆面积的程序 文字&#xff1a; 1.定义一个变量r15&#xff1b; 2.让3.14与r*r相乘得的积为s&#xff1b; 3.输出s的值&#xff1b; 流程图&#xff1a; 代码&#xff1a; #include <stdio.h> int main() { double…

单片机c语言程序设计实训100例基于pic pdf,单片机C语言程序设计实训100例 基于AVR+Proteus仿真.pdf...

作 者 &#xff1a;彭伟编著 出版发行 : 北京&#xff1a;北京航空航天大学出版社 , 2010.05 ISBN号 &#xff1a;978-7-5124-0068-9 页 数 &#xff1a; 568 原书定价 : 65.00 主题词 : 单片微型计算机-C语言-程序设计 中图法分类号 : TP3 ( 工业技术->自动化技术、计算机技…

8051单片机的C语言程序设计

一、数据类型 &#xff08;一&#xff09;基本类型&#xff1a; 1. 位类型&#xff08;bit&#xff09;:1&#xff09;是C51的扩充数据类型&#xff0c;用于访问8051中可寻址的位单元。 2&#xff09;8051支持两种位类型&#xff1a;bit型和sbit类型&#xff0c;它们在内存中都…

c语言程序设计实训

任务一、顺序结构程序设计 1.编写已知半径r为15的圆面积 #include <stdio.h> int main() {double r, s, pi 3.14159;printf("请输入圆的半径为&#xff1a;");scanf_s("%lf", &r);s pi * r * r;printf("面积为&#xff1a;%f", s)…

51单片机基础实验例程

代码来源见代码注释。 Table of Contents 实验1&#xff1a;点亮第一个LED 实验2&#xff1a;LED闪烁 实验3&#xff1a;LED流水灯 实验4&#xff1a;蜂鸣器 实验5&#xff1a;静态数码管显示 实验6&#xff1a;动态数码管显示 实验7&#xff1a;独立按键 实验8&#x…

单片机c语言应用100例第3版课后答案,单片机C语言应用100例(第3版)

读者对象&#xff1a; 本书在编写时力求通俗、易懂&#xff0c;硬件原理以"有用、够用”为原则&#xff0c;内容讲解以"紧密结合实践”为特色。因此&#xff0c;本书特别适合单片机零起点的初学者使用&#xff0c;可作为高等院校控制类专业学生、电子爱好者及各类工程…

51单片机C语言程序100例分析(1)IO+C语言+头文件

51单片机C语言程序100例分析&#xff08;1&#xff09;IOC语言头文件 \\\插播一条&#xff1a;文章末尾有惊喜哟~/// P10xfe;//P111111110B&#xff0c;即P1.0输出低电平} 分析&#xff1a;通过这短短的几行代码就能够让51单片机的P1.0引脚输出低电平&#xff0c;首先#includ…

单片机c语言赚钱,单片机C语言程序设计实训100例(从初级入手).pdf

您所在位置&#xff1a;网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp嵌入式开发 单片机C语言程序设计实训100例(从初级入手).pdf59页 本文档一共被下载&#xff1a;次,您可全文免费在线阅读后下载本文档。 下载提示 1.本站不保证该用户上传的…

51单片机C语言编程100例pdf,51单片机C语言编程100例.doc

51单片机C语言编程100例.doc .目 录实例3用单片机控制第一个灯亮3实例4用单片机控制一个灯闪烁认识单片机的工作频率3实例5将 P1口状态分别送入P0、P2、P3口认识I/O口的引脚功能3实例6使用P3口流水点亮8位LED3实例7通过对P3口地址的操作流水点亮8位LED3实例8用不同数据类型控制…