ros의 매개 변수 사용 및 프로그래밍 방법

5995 단어
매개변수 모델
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는 각 노드 간의 데이터 매개변수를 저장하는 데 사용됩니다.
따라서 우리는 파라미터 서버를 전역 변수 저장 공간으로 이해할 수 있다. 같은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 파일
* 파일에서 매개변수 읽기
먼저 매개변수 파일에서 매개변수의 값을 수정하여 파일에 저장합니다.
다음 명령으로 파일에서 파라미터 $rosparamload 파라미터를 읽습니다.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 
 5 #include 
 6 #include 
 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<: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++와 같다

좋은 웹페이지 즐겨찾기