参数模型

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++ 一样

最新文章

  1. 监狱3D指纹门禁系统解决方案
  2. 深入探索Android中的Handler
  3. NP
  4. rm命令
  5. 用socket方式传输Image和Sound文件
  6. C11 memory_order
  7. Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)
  8. 虚拟机kali找不到无线网卡、搜不到无线网络
  9. nRF24LE1/nRF31512烧录驱动开发
  10. innobackupex: fatal error: no ‘innodb_buffer_pool_filename’解决方法
  11. 用css 添加手状样式,鼠标移上去变小手,变小手
  12. 三个线程T1,T2,T3.保证顺序执行的三种方法
  13. vmware中的linux虚拟机配置以nat模式上网,并用xshell连接该虚拟机
  14. Windows Boot Manager改成中文菜单
  15. [转]Introduction to Learning to Trade with Reinforcement Learning
  16. [UE4]加入音效
  17. leaflet入门(一)示例
  18. 如何在windows2003(IIS6)下配置IIS,使其支持cshtml
  19. nuget包循环引用问题
  20. 带最小值操作的栈 &#183; Min Stack

热门文章

  1. alpha week 1/2 Scrum立会报告+燃尽图 06
  2. 006一句话解决主机pc,Vmware虚拟机,开发板之间的ping问题
  3. 1054 求平均值 (20 分)C语言
  4. nginx 负载均衡的配置
  5. .net core 3.0 搭建 IdentityServer4 验证服务器
  6. 【转】C#中protected用法详解
  7. 【Python系统学习03】错误类型整理(一)
  8. 【转】安卓开发经验分享:资源、UI、函数库、测试、构建一个都不能少
  9. Redis系列之----Redis的两种持久化机制(RDB和AOF)
  10. 微信小程序---自定义三级联动