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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM