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는 각 노드 간의 데이터 매개변수를 저장하는 데 사용됩니다.
따라서 우리는 파라미터 서버를 전역 변수 저장 공간으로 이해할 수 있다. 같은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++와 같다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.