理解ROS的参数

记住每次操作之前都要在一个单独的终端中运行ros的核心.

roscore

rosparam命令允许你在ROS的参数服务器上操作和存储数据,参数服务器可以存储整数,浮点数,布尔类型,字典,列表。ROS使用YAML标记语言作为语法,在简单的情况下,YAML看起来是非常自然的:1是整数,1.0是浮点数,one是字符串,true是布尔类型,[1,2,3]是一个列表,{a:b,c:d}是一个字典。我们使用rosparam list 命令可以查看参数服务器上的内容:

rosparam list

返回的结果如下:

/rosdistro
/roslaunch/uris/host_ununtu__49327
/rosversion
/run_id

上面的这些是运行roscore后参数服务器上的内容。然后运行小乌龟的节点,再次查看参数服务器上的内容:

/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_ununtu__49327
/rosversion
/run_id

我们可以看到turtlesim_node节点在参数服务器上存储了三个表示背景颜色的参数。

使用rosparam set可以改变参数服务器上的参数,而rosparam get可以获取参数服务器上参数的值,它的使用方法如下:

rosparam set [param_name]
rosparam get [param_name]

我们改变背景颜色如下:

rosparam set background_r 150

这条命令执行完成后,我们会发现背景颜色并没有发生变化,对了我们得刷新一下,怎么刷新呢,这条命令我们已经学过了哦:

rosservice call /clear

执行完这条命令之后就能看到小乌龟的背景颜色变化了(小乌龟本身没有任何变化)。

使用下面的命令:

rosparam get /background_r

可以获得修改过的/background_r的值,我们也可以使用

rosparam get /

一次性获取所有参数的值.



你可能希望存储参数服务器上的这些值,然后在某个时候直接reload这些数据就可以直接使用了.

使用命令rosparam dump可以将参数服务器的内容写到一个文件中,它的使用方法如下:

rosparam dump [file_name]

例如:

rosparam dump params.yaml

我们将参数服务器的内容写到params.yaml的文件中。

在reload这些数据的时候,你甚至可以load到另外的命名空间去:

rosparam load params.yaml copy

然后查看:

rosparam get copy/background_b


总结:ROS的节点node可以把自己的数据已YAML的形式存放到ROS的参数服务器上去,然后利用一些命令行工具操作这些数据.如rosparam list, rosparam get, rosparam set, rosparam dump,rosparam load等命令行工具.

时间: 2024-08-06 16:05:06

理解ROS的参数的相关文章

ROS知识(2)-理解ROS系统结构

ROS系统的架构主要被设计和划分成三部分,没一部分都代表一个层级的概念: 文件系统级(FileSystem Level) 计算图级(Computaion Graph Levell) 开源社区级(Community Level) 第一级是文件系统级.你将会使用这一组概念来理解ROS的内部构成,文件夹结构,以及工作所需要的核心文件. 第二级是计算图级,体现的是进程和系统之间的通信.你将会看到ROS各个概念和功能,包括建立系统,处理各类进程,与多台计算机通信等. 第三级是开源社区级.这个层级是非常重要

由浅到深理解ROS(1)

ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能实现.进程间消息传递和程序包管理等.此外,它还提供相关工具和库,用于获取.编译.编辑代码以及在多个计算机之间运行程序完成分布式计算.结合笔者对ROS的理解,想与大家一起讨论,共同把ROS理解的更准确,一起进步. 对ROS的误解: 1.ROS不是一种编程语言.实际上,ROS的主要代码由C++语言编写,

理解JavaScript函数参数

前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数. arguments javascript中的函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检查.实际上,javascript函数调用甚至不检查传入形参的个数 ? 1 2 3 4 5 6 7 function add(x){ return x+1; } console.log(add(1));//2 console

(转)由浅到深理解ROS(5)- launch启动文件的理解与编写

ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file).事实上,在ROS功能包中,启动文件的使用是非常普遍的.任何包含两个或两个以上节点的系统都可以利用启动文件来指定和配置需要使用的节点.通常的命名方案是以.launch作为启动文件的后缀,启动文件是XML文件.一般把启动文件存储在取名为launch的目录中. 每个XML文件都必须要包含一个根元素.根元素由一对launch标签定义:<launch> - <launch>元素都应该

由浅到深理解ROS(3)-命名空间

全局命名空间:/rosout前面的反斜杠“/”表明该节点名称属于全局命名空间.之所以叫做全局名称因为它们在任何地方(包括代码.命令行工具.图形界面工具等的任何地方)都可以使用.无论这些名称用作众多命令行工具的参数还是用在节点内部,它们都有明确的含义.这些名称从来不会产生二义性,也无需额外的上下文信息来决定名称指的哪个资源.如/turtle1/cmd_vel 由斜杠分开的一系列命名空间(namespace),每个斜杠代表一级命名空间.命名空间用于将相关的计算图源(节点.话题.服务和参数统称为计算图

如何理解函数的参数都是按值传递的

这个问题的起源源于我的怀疑精神.. 一开始我怀疑尼古拉在js高级教程中的关于“函数的参数都是按值传递的“说法是错误的. 为此我根据他的证明代码做过如下变换:var person = new Object();var obj = person;obj.name = "Nicholas";obj = new Object();obj.name = "Greg";alert(person.name); // "Nicholas" 因为我开始坚定不移的认

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

要求已经在Linux系统中安装一个学习用的ros软件包例子: sudo apt-get install ros-indigo-ros-tutorials ROS图形概念概述 nodes:节点,一个节点即为一个可执行文件,可以通过ROS和其他节点进行通信: messages:消息,当订阅或者发布一个topic时使用的数据类型: topics:话题,节点可以发布信息到topics或者从topics那里订阅信息: master:节点管理器,ROS的name service,提供服务,例如让不同的节点可

由浅到深理解ROS(2)

ROS文件系统 用户可以直接参看官网:http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem ROS文件系统中的两个最基本的概念:Package和Manifest,即包和清单文件. (1)Package是组织ROS代码的最基本单位,每一个Package都可以包括库文件,可执行文件,脚本及其它的一些文件. (2)Manifest文件是对Package的相关信息的一个描述.他提供了Package之间的依赖性,以及一个包的元信息,比如版本.维

理解ROS导航软件包集

ROS导航软件包的主要目的是将机器人从初始位置移动到目标位置,在移动的过程中不会与周围环境发生任何碰撞. ROS导航软件包附带了几种导航相关的算法实现,它们可以帮助我们轻松实现移动机器人的自主导航. 用户只需要提供机器人的目标位置和来自轮子编码器.IMU.GPS等传感器获得的测量数据,激光扫描器的数据流, 以及其他传感器的数据流,例如激光雷达数据或者来自Kinect等传感器的3D点云数据,导航软件包的输出是控制移动的 速度命令,这些命令将控制机器人移动到目标位置.导航软件包集包含了一些标准算法的