参数模型

ROS Master

(Parameter Server)

/robot_name: "my_robot"        ----{Node A   Node B}

/robot_radius:0.4                          ----{Node C}

/robot_height :0.5                        ----{Node D}

参数服务器 Parameter Server  用于保存各个节点之间的数据参数

因此我们可以将Parameter Server理解为全局变量存储空间,只要在同一ros环境里面都可以通过参数服务器发送请求去查询相关的参数。

参数命令行使用(以小海龟为例)

YAML参数文件 (多参数文件)
background_b : 255
background_b : 86
background_b : 69
rosdistro : 'melodic'
roslaunch:
uris: {host_hcx_vpc__43763: 'http://hcx-vpc :43763/'}
rosversion :'1.14.3'
run_id: 07708de-a38b-11e9-818b-000c29d22e4d

rosparam

*列出当前多个参数

$ rosparam list

*显示某个参数值

$ rosparam get param_key

*设置某个参数值

$ rosparam set param_key param_value

*保存参数到文件

$ rosparam dump fole_name

*从文件中读取参数

$ rosparam load file_name

*删除参数

$ rosparam detele param_key

以下以小海龟案例为例

显示小海龟运行中的参数列表

qqtsj  ~  rosparam list
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_qqtsj_nitro_an515_51__43045
/rosversion
/run_id

显示小海龟中参数的值

qqtsj  ~  rosparam get /background_r
69
qqtsj  ~  rosparam get /background_g
86
qqtsj  ~  rosparam get /background_b
255

设置某个参数的值

 qqtsj  ~  rosparam set /background_b 255
 qqtsj  ~  rosparam set /background_r 255
 qqtsj  ~  rosparam set /background_g 255
 qqtsj  ~  rosparam get /background_b
255
 qqtsj  ~  rosparam get /background_g
255
 qqtsj  ~  rosservice call /clear "{}"

通过设置参数的值去改变小海龟的运动背景颜色

命令为:rosservice call /clear "{}"

通过发送一个空的请求去刷新新设置参数的值,从而改变小海龟。

*保存参数到文件中

将参数保存到YAML参数文件中,如下

$ rosparaam dump param.yaml

我这里的路径为主目录路径的param.yaml文件中 

*从文件中读取参数

首先在参数文件中修改参数的值,保存在文件中。

用以下命令从文件读取参数 $ rosparam load param.yaml

*删除参数

$ rosparam delete param_key

 qqtsj  ~  rosparam delete /background_b
 qqtsj  ~  rosparam list
/background_r
/rosdistro
/roslaunch/uris/host_qqtsj_nitro_an515_51__43045
/rosversion
/run_id

接下来用程序去实现参数的使用和编程

首先创建一个功能包

$ cd ~/catkin_ws/src

$ catkin_create_pkg learning_parameter roscpp rospy std_srvs

通过(c++)去实现 

如何获取/设置参数

*初始化ros节点

*get函数获取参数

*set函数设置参数

程序如下

 1 /**
2 * 该例程设置/读取海龟例程中的参数
3 */
4 #include <string>
5 #include <ros/ros.h>
6 #include <std_srvs/Empty.h>
7
8 int main(int argc, char **argv)
9 {
10 int red, green, blue;
11
12 // ROS节点初始化
13 ros::init(argc, argv, "parameter_config");
14
15 // 创建节点句柄
16 ros::NodeHandle node;
17
18 // 读取背景颜色参数
19 ros::param::get("/background_r", red);
20 ros::param::get("/background_g", green);
21 ros::param::get("/background_b", blue);
22
23 ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue);
24
25 // 设置背景颜色参数
26 ros::param::set("/background_r", 255);
27 ros::param::set("/background_g", 255);
28 ros::param::set("/background_b", 255);
29
30 ROS_INFO("Set Backgroud Color[255, 255, 255]");
31
32 // 读取背景颜色参数
33 ros::param::get("/background_r", red);
34 ros::param::get("/background_g", green);
35 ros::param::get("/background_b", blue);
36
37 ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue);
38
39 // 调用服务,刷新背景颜色
40 ros::service::waitForService("/clear");
41 ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear");
42 std_srvs::Empty srv;
43 clear_background.call(srv);
44
45 sleep(1);
46
47 return 0;
48 }

编译命令如下

$ cd ~/catkin_ws

$ catkin_make

$ source devel/setup.bash

$ roscore

$ rosrun turtlesim turtlesim_node

$ rosrun learning_parameter parameter_config

以(python)程序如下

 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # 该例程设置/读取海龟例程中的参数
4
5 import sys
6 import rospy
7 from std_srvs.srv import Empty
8
9 def parameter_config():
10 # ROS节点初始化
11 rospy.init_node('parameter_config', anonymous=True)
12
13 # 读取背景颜色参数
14 red = rospy.get_param('/background_r')
15 green = rospy.get_param('/background_g')
16 blue = rospy.get_param('/background_b')
17
18 rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue)
19
20 # 设置背景颜色参数
21 rospy.set_param("/background_r", 255);
22 rospy.set_param("/background_g", 255);
23 rospy.set_param("/background_b", 255);
24
25 rospy.loginfo("Set Backgroud Color[255, 255, 255]");
26
27 # 读取背景颜色参数
28 red = rospy.get_param('/background_r')
29 green = rospy.get_param('/background_g')
30 blue = rospy.get_param('/background_b')
31
32 rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue)
33
34 # 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
35 rospy.wait_for_service('/clear')
36 try:
37 clear_background = rospy.ServiceProxy('/clear', Empty)
38
39 # 请求服务调用,输入请求数据
40 response = clear_background()
41 return response
42 except rospy.ServiceException, e:
43 print "Service call failed: %s"%e
44
45 if __name__ == "__main__":
46 parameter_config()

编译和c++ 一样

ros之参数的使用与编程方法的更多相关文章

  1. 学习linux/unix编程方法的建议(转)

    假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过 我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux ...

  2. paip.函数式编程方法概述以及总结

    paip.函数式编程方法概述以及总结 1     函数式编程:函数式风格..很多命令式语言里支持函数式编程风格 1.1      起源 (图灵机,Lisp机器, 神经网络计算机) 1.2      函 ...

  3. 理解ROS的参数

    记住每次操作之前都要在一个单独的终端中运行ros的核心. roscore rosparam命令允许你在ROS的参数服务器上操作和存储数据,参数服务器可以存储整数,浮点数,布尔类型,字典,列表.ROS使 ...

  4. iOS利用block实现链式编程方法(Objective-C链式编程)

    objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...

  5. 学习linux/unix编程方法的建议,学习Linux的四个步骤(转)

    解答:学习Linux的四个步骤假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过我想大概可以分为4个阶段,水平从低到高从安装使用=>linux ...

  6. Py编程方法,尾递归优化,map函数,filter函数,reduce函数

    函数式编程 1.面向过程 把大的问题分解成流程,按照流程来编写过程 2.面向函数 面向函数编程=编程语言定义的函数+数学意义上的函数先弄出数学意义上的方程式,再用编程方法编写这个数学方程式注意面向函数 ...

  7. Atitit 编程语言编程方法的进化演进 sp  COP ,AOP ,SOP

    Atitit 编程语言编程方法的进化演进 sp  COP ,AOP ,SOP 1.1.  Sp  oop>>COP ,AOP ,SOP1 1.2. Sp  oop 结构化方法SP(Stru ...

  8. Spring3 MVC请求参数获取的几种方法

    Spring3 MVC请求参数获取的几种方法 一.      通过@PathVariabl获取路径中的参数 @RequestMapping(value="user/{id}/{name}&q ...

  9. PHP函数可变参数列表的具体实现方法介绍

    PHP函数可变参数列表可以通过_get_args().func_num_args().func_get_arg()这三个函数来实现.我们下面就对此做了详细的介绍. AD:2014WOT全球软件技术峰会 ...

随机推荐

  1. 【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差

    [题解]歌唱王国(概率生成函数+KMP)+伦讲的求方差 生成函数的本质是什么呀!为什么和It-st一样神 设\(f_i\)表示填了\(i\)个时候停下来的概率,\(g_i\)是填了\(i\)个的时候不 ...

  2. 【题解】P4091 [HEOI2016/TJOI2016]求和

    [题解]P4091 [HEOI2016/TJOI2016]求和 [P4091 HEOI2016/TJOI2016]求和 可以知道\(i,j\)从\(0\)开始是可以的,因为这个时候等于\(0\).这种 ...

  3. 洛谷$1220$ 关路灯 记搜/$DP$

    \(Sol\) 约定\(pos\)为老张所处的位置的路灯号,\(i<pos,j>pos\). 显然,如果\(i\)和\(j\)都关了,那么它们之间的所有灯一定也都关了. 设\(f[i][j ...

  4. status100到500http响应对应状态解释

    1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx-成功 这类状态代码表明服务器成功地接受了客户端请求 ...

  5. 1060 爱丁顿数 (25 分)C语言

    英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿数" E ,即满足有 E 天骑车超过 E 英里的最大整数 E.据说爱丁顿自己的 E 等于87. 现给 ...

  6. wechat+项目开源分享 - 让你的微信账号有趣起来

    WeChat+ 如果你曾经有过以下的问题或者需求,那么这篇分享很适合你: 苦于手机存储不够,但是又不敢随便删微信的消息,只能小心翼翼的清理: 酷炫沙雕表情包制作,比如把几句话融入到王静泽-真香的表情包 ...

  7. 日志冲突解决方案(基于gradle)

    日志冲突解决方案 前提:我使用gradle管理项目 最近在项目中需要用curator客户端操作zookeeper,在maven仓库拉取的jar包导致日志冲突,会报以下的错误: 经常会有如上图2处红色框 ...

  8. 【转】VS2017缺少文件

    在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加文件引用 ...

  9. Centos 中文乱码解决方法

    问题描述 crontab -e 添加定时任务时,直接将下面内容粘贴过去,结果竟然乱码了. # 每个星期日凌晨3:00执行完全备份脚本 0 3 * * 0 /bin/bash -x /root/bash ...

  10. 如何获取scrimba内部(内联框架)中网页地址?

    看图:  将其在新窗口打开  方法一:按下F12 键 (打开 开发者工具) ,再照图中箭头用鼠标点击所示, 图中粗红下划线为该页面的URL 地址, 复制在新窗口打开即可 方法二:利用JS代码手动获取 ...