回顾参数的模型,之前介绍过在ROS Master中有一个参数服务器Paramester Server,它是一个全局字典, 是用来保存各个节点之间的配置参数的

比如这里有一个Paramester Server,里面保存了名字my_robot,半径0.4和高度0.5,这些配置参数是各个节点都可以全局访问的,比如在A节点访问robot_name字典就可以得到值my_robot,它只需要给ROS Master发送一个查询的请求就可以返回该结果,node A,B,C,D类似。虽然各个node不属于同样一个PC里,可能是位于不同的电脑里,但是只要你是在同样一个ROS环境里都可以通过Paramester Server来查询这样全局字典的参数,我们可以将Paramester Server简单理解为全局变量存储空间,这就是Paramester Server参数服务器的一个模型
接下来是参数服务器的使用方法
第一步,创建功能包
专门针对Paramester Server创建功能包learning_paramester,依赖参数roscpp rospy std_srvs

cd ~/catkin_ws/src 进入工作空间下src里打开终端
catkin_create_pkg learning_parameter roscpp rospy rospy std_srvs 创建功能包


参数命令行rosparam的使用
基本上rosparam可以完成大部分参数的查询,设置,保存文件,读取文件都可以来使用,在ros里如果参数比较多的话一般会用到这样一个文件yaml 这样一个参数文件,效果如下

左边是字典的变量名,右边是变量对应的值,一对一对出现
在ros中,经常会涉及很多配置参数,这些参数一个一个设很麻烦,便会用这样的参数文件把所有参数列出来然后一次性加载到Paramester Server里来
下面以海龟为例看rosparam命令行的使用方式

roscore
rosrun turtlesim turtlesim_node 运行海龟仿真器

接下来再打开一个终端学习rosparam命令行的使用

rosparam list 查询海龟历程里有多少参数在里面

background_b,background_g,background_r是后面背景颜色蓝色的rgb值,可以通过修改该值置换背景颜色,其余还包括ROS Master本身提供的一些参数,比如ros版本号,当前运行的ros的版本,进程的id号

rosparam get 参数名(例: /turtlesim/background_b) 得到某个参数的值
例:rosparam get /turtlesim/background_b


可见ros的发行版noetic版,ros的version是1.15.9;这些参数都是存在在ros paramester里面的

rosparam get 参数名 要修改的值
修改某个变量的名字
例:
rosparam set /turtlesim/background_b 100
rosservice call /clear “{}”

需要再发一个请求才可以把背景颜色改变,该请求的服务名为clear,也是发送空即可,一旦发送该请求仿真器就会查询后面的rgb值然后刷新背景颜色

rosparam dump 文件名 把参数保存成一个文件
例: rosparam dump param.yaml

用rosparam把参数保存成一个文件,比如说想保存某个ros系统里的很多参数,后面可以作为调试依据
这个文件会保存在这个终端的当前路径下,默认这个路径为主文件路径,可以在主文件夹下找到该文件

打开文件,可见它保存了我们刚在终端例里看到的这些参数的值

另外,还可以在文件里修改参数值,保存后使用另外一个命令

rosparam load 文件名 当前路径下加载一个文件、
rosservice call /clear “{}” 再刷新一下背景颜色


rosparam delete 参数名 删掉某个参数
例: rosparam delete /turtlesim/background_b (注意路径)


重新刷新背景颜色即可看缺失参数后的颜色
第二步,编程方法(C++)
下面通过程序看一下刚刚命令行上的操作在程序里面应该怎样去实现
将课件代码/learning_parameter/src里的parameter_config.cpp代码文件放置于catkin_ws/src/learning_learning_parameter/src里
parameter_config.cpp代码内容

/*** 该例程设置/读取海龟例程中的参数*/
#include <string>
#include <ros/ros.h>
#include <std_srvs/Empty.h>int main(int argc, char **argv)
{int red, green, blue;// ROS节点初始化ros::init(argc, argv, "parameter_config");// 创建节点句柄,接下来程序运行起来之后就可以去获取ROS Master里的参数服务器里的参数了ros::NodeHandle node;// 读取背景颜色参数值//通过ros::param::get获取得到参数值后存到red,green,blue,这是上面已经定义好的int型变量ros::param::get("rosrun turtlesim turtlesim_node/background_r", red);ros::param::get("rosrun turtlesim turtlesim_node/background_g", green);ros::param::get("rosrun turtlesim turtlesim_node/background_b", blue);//加一个日志信息,标注在修改信息前原始变量的值ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue);// 设置背景颜色参数//通过ros::param::set修改变量的具体值ros::param::set("rosrun turtlesim turtlesim_node/background_r", 255);ros::param::set("rosrun turtlesim turtlesim_node/background_g", 255);ros::param::set("rosrun turtlesim turtlesim_node/background_b", 255);//日志信息,告诉终端修改了背景颜色ROS_INFO("Set Backgroud Color[255, 255, 255]");// 读取背景颜色参数//重新读取检查背景颜色参数ros::param::get("rosrun turtlesim turtlesim_node/background_r", red);ros::param::get("rosrun turtlesim turtlesim_node/background_g", green);ros::param::get("rosrun turtlesim turtlesim_node/background_b", blue);ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue);// 调用服务,刷新背景颜色//调用海龟服务器clear服务,刷新ros::service::waitForService("/clear");ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear");std_srvs::Empty srv;clear_background.call(srv);sleep(1);return 0;
}

第三步,配置代码编译规则

add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LIBRARIES})


第四步,编译并运行发布者

cd ~/catkin_ws //回到工作空间根目录下
catkin_make //编译
source devel/setup.bash //设置环境变量,可通过下面方法减去该步骤,跳过
roscore
rosrun turtlesim turtlesim_node
rosrun learning_parameter parameter_config //编译运行刚才实现的程序节点,运行learning_service里的一个节点,节点名为turtle_spawn

运行结束最后一个指令的结果

原来是蓝色运行后是白色
同时会看到在终端显示原来数据值是65,86,255,然后修改后是255,255,255,最后重新获取一遍都是255即修改成功
以上就是在程序里通过get,set两种方式修改或获取参数的值
提示:这里的get,set并不是ros里唯一的获取参数或者设置参数的,还有其他方式,参考http://wiki.ros.org/Parameter%20Sserver

Python文件代码
将代码放与
主目录/catkin_ws/src/learning_parameter/scripts/

流程完全一样,注意怎样通过rospy.get_param来获取参数的原始值并保存与red,green,blue
通过rospy.set_param可以把变量变成某值
再rospy.get_param一遍发现值都变化了,然后再发送一个clear这个请求让背景颜色发生变化变为白色

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程设置/读取海龟例程中的参数import sys
import rospy
from std_srvs.srv import Emptydef parameter_config():# ROS节点初始化rospy.init_node('parameter_config', anonymous=True)# 读取背景颜色参数red   = rospy.get_param('/background_r')green = rospy.get_param('/background_g')blue  = rospy.get_param('/background_b')rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue)# 设置背景颜色参数rospy.set_param("/background_r", 255);rospy.set_param("/background_g", 255);rospy.set_param("/background_b", 255);rospy.loginfo("Set Backgroud Color[255, 255, 255]");# 读取背景颜色参数red   = rospy.get_param('/background_r')green = rospy.get_param('/background_g')blue  = rospy.get_param('/background_b')rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue)# 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的servicerospy.wait_for_service('/clear')try:clear_background = rospy.ServiceProxy('/clear', Empty)# 请求服务调用,输入请求数据response = clear_background()return responseexcept rospy.ServiceException, e:print "Service call failed: %s"%eif __name__ == "__main__":parameter_config()

ROS入门-14.参数的使用与编程方法相关推荐

  1. 古月居 ROS 入门21讲--PA16 参数的使用与编程方法

    古月居 ROS 入门21讲--PA16 参数的使用与编程方法 1.参数模型 2.创建功能包 cd ~/catkin_ws/src catkin_create_pkg learning_paramete ...

  2. 【RK3399Pro学习笔记】十二、ROS参数的使用与编程方法

    目录 创建功能包 参数命令行使用 YAML参数文件 rosparam C++ 编写程序 配置CMakeLists.txt 编译并运行 python 编写程序 运行 平台:华硕 Thinker Edge ...

  3. ROS入门-12.服务端Server的编程实现

    实现服务通讯的服务端Server的编程实现 主要给海龟发送速度指令,通过topic发,Service实现:Client发布request来控制Server是不是给海龟发指令让其动起来,Client相当 ...

  4. ROS入门-9.订阅者Subscriber的编程实现

    还是通过海龟仿真器去发布数据,要实现一个订阅者来订阅海龟的位置信息等,publisher是海龟仿真器,subcriber即为这次我们要实现的程序 数据传输为从publisher传向subscriber ...

  5. 【ROS学习笔记】(九)参数的使用与编程方法

    一.参数模型 在ROS Master中有一个Parameter Server参数服务器,它是一个全局字典,用来保存各种配置参数,配置参数是各个节点都可以全局访问的. 二.使用方法 1. 列出当前所有参 ...

  6. 古月居《ROS入门21讲》零基础学习笔记

    文章目录 前言 1.课程简介 2.Linux系统介绍及安装 3.Linux基础操作(操作集) 命令结构 常用命令 快捷操作 4.cpp&python极简基础(操作集) 简单对比 安装编译器 编 ...

  7. ROS入门的基本操作

    ROS入门的基本操作 一.ROS命令行工具的使用 二.创建工作空间与功能包 创建工作空间的流程 创建功能包的流程 三.发布者Publisher的编程实现 如何实现一个发布者 如何配置CMakeLIst ...

  8. 古月居ROS入门21讲笔记

    ROS入门21讲笔记--古月居 1 C++&Python极简基础 1.1 安装编译/解析器 1.2 for循环 1.3 while循环 1.4 面向对象 2. ROS基础 2.1 ROS概念 ...

  9. 【ROS】ros入门21讲(下)

    前言:上文讲了话题的通信机制,接下来是ROS的第二种重要通信机制-服务. [ROS]ros学习21讲(上) 客户端请求,相当于开关,一次开,再一次关,控制运动的状态.服务端应答. 目录 ROS 七:客 ...

最新文章

  1. 兼容超大图片的处理_动态图适用性调研与兼容性方案
  2. mysql decs倒叙查询_mysql按照日期方式查询
  3. 2007年分区联赛提高组之一 统计数字
  4. NHibernate之旅(14):探索NHibernate中使用视图
  5. 前端学习(1263):post方式的参数传递
  6. Tiny Core Linux 4.5 发布,微型 Linux 操作系统
  7. grep/egrep和正则表达式汇总
  8. clion windows安装
  9. android应用程序的生命周期,Android应用程序的生命周期.doc
  10. 梦如果实现以后。。。。。。
  11. oracle中插入一个blob数据
  12. retainAll用法
  13. 【渗透技巧】pop3协议渗透
  14. Ubuntu安装中文字体
  15. inflect java_在native线程利用JNI 反射自定义类
  16. 《精益数据分析》-第二部分概括笔记
  17. OS X下修改系统Hosts文件以及苹果手机如何host映射
  18. IDEA 的Http接口调试工具
  19. 【PCIe 6.0】PCIe Flit 打包解包规则
  20. luogu P4117 [Ynoi2018] 五彩斑斓的世界

热门文章

  1. amd64_or_ia64?
  2. 关于Dijkstra最短路径算法
  3. InstallShield 2012 Spring新功能试用(12): Suite/Advanced UI 和 Advanced UI 工程支持InstallScript安装程序(Part 1)...
  4. Linux架构之NFS共享存储1
  5. 304441事务管理与并发控制
  6. 什么是软件 什么是硬件
  7. CNN破解简单验证码(Tensorflow实现)
  8. Exception异常处理
  9. scala helloworld
  10. python 将数据写入excel