본문 바로가기

공부/ROS

[ROS]『ROS로 배우는 로봇 프로그래밍』 책 따라하기 - 텔레옵 봇 #2

반응형

127~128p) [ros parameter basic self study]
●예제 코드 8-4를 하면서 rospy.has_param, get_param에서 파라미터 이름 앞에 ~를 붙이는 부분의 책 설명이 잘 이해가 안 가서 구글링과 코드를 변형해가면서 parameter를 전반적으로 공부했다.

예제 8-4 실행 중의 rosparam list / 위쪽 2개가 예제에서 만든 파라미터이다.


+)아래 ⓐ~ⓔ는 내가 따로 공부하고 이해한 방식이므로 틀린 설명일 수 있다. 다만 기능적으로는 맞는 거 같다.


파라미터는 기본적으로 'rosparam set 명령을 이용'하거나 'rosrun 뒤에 파라미터 항을 추가하는 방식'으로 만들거나 수정할 수 있다.


A라는 이름의 파라미터를 만들 때 rosparam으로 만들면 그냥 A라는 이름으로 만들어진다. 반면 rosrun으로 만들면 실행한 노드이름/A라는 이름으로 만들어지고 이를 'private 파라미터'라고 한다. 전자는 'global 파라미터'이다.


rosparam set으로 '노드이름/A'을 수정하면 당연히 수정이 된다.


rospy의 has_param과 get_param 메서드는 각각 '파라미터가 있는지 확인', '해당 파라미터를 반환'하는 역할을 하고 파라미터 이름 앞에 ~를 넣으면 해당 노드의 private 파라미터를 지정하게 된다.


파라미터는 노드가 아닌 roscore에 귀속(?)된다. 즉 파라미터 서버를 연 노드를 종료한다고 사라지는 게 아니고 roscore를 종료해서 지워진다. roscore를 종료하지 않고 파라미터를 지우고 싶으면 rosparam delete 명령을 사용하면 된다.


아래는 rosparam 명령어의 사용법이고
http://wiki.ros.org/rosparam#rosparam_set

 

rosparam - ROS Wiki

melodic noetic   Show EOL distros:  EOL distros:   electric fuerte groovy hydro indigo jade kinetic lunar diamondback: Only showing information from the released package extracted on Unknown. No API documentation available. Please see this page for in

wiki.ros.org



아래는 rospy에서 파라미터를 다루는 법의 설명이다. 위의 ⓐ~ⓔ내용은 2개 링크에 자세히 나와있다.(물론 영어로)
http://wiki.ros.org/rospy/Overview/Parameter%20Server

 

rospy/Overview/Parameter Server - ROS Wiki

The ROS Parameter Server can store strings, integers, floats, booleans, lists, dictionaries, iso8601 dates, and base64-encoded data. Dictionaries must have string keys. rospy's API is a thin wrapper around Python's builtin xmlrpclib library, so you should

wiki.ros.org



●예제 코드를 변형한 실습을 해봤다. ①예제 코드 8-4에서 if-else 2개 블록을 while 구문 안쪽(twist_pub 위쪽)으로 넣어서 노드를 실행할 때만 파라미터 서버를 확인하는 게 아닌 동작 내내 상시로 파라미터 서버를 확인해 g_vel_scales를 수정하도록 했다. ②또한 has_param과 get_param에서 ~를 지웠고, ③파라미터를 rosrun 할 때 안 하고 이후 rosparam으로 만들어봤다.


영상을 보면 처음에는 default 값으로 [0.1,0.1]로 실행되다가 rosparam으로 값을 업데이트 해주어 [5,3]으로 실행된다.

이전과 달리 파라미터 이름 앞에 keys_to_twist/가 없다. 그렇기에 has_param과 get_param에서 ~를 빼야 이 파라미터를 인식한다.





========================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
========================================================================

반응형