ros之参数的使用与编程方法

参数模型

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

原文地址:https://www.cnblogs.com/tanshengjiang/p/12238929.html