파라미터 이해하기

두부김치·2024년 2월 2일
1

ROS2

목록 보기
8/29

파라미터(Parameter)

파라미터(Parameter)는 아래 그림과 같이 각 노드가 가진 Parameter Server 를 통해 외부의 Parameter Client 와 통신하여 파라미터를 변경하는 것으로 서비스와 동일하다. 단, 서비스가 서비스 요청과 서비스 응답이라는 RPC(Remote Procedure Call)가 목적이었다면 파라미터는 서비스 통신 방법을 사용하여 노드 내부 또는 외부에서 노드 내 매개변수를 쉽게 지정(Set) 하거나 변경할 수 있고, 쉽게 가져(Get)와서 사용할 수 있게 하는 점에서 그 사용 목적이 다르다.

파라미터는 RCL(ROS Client Libraries)의 기본 기능으로 아래 그림과 같이 모든 노드가 자신만의 Parameter Server 를 가지고 있고, 또한 각 노드는 Parameter Client 를 가질 수도 있어서 자기 자신의 파라미터 및 다른 노드의 파라미터를 읽고 쓸 수 있다. 이를 활용하면 각 노드의 다양한 매개변수를 글로벌 매개변수 처럼 사용할 수 있게 되어 추가 프로그래밍이나 컴파일 없이 능동적으로 변화 가능한 프로세스를 만들 수 있게 된다. 그리고 각 파라미터는 yaml 파일 형태의 파라미터 설정 파일을 만들어 초기 파라미터 값 설정 및 노드 실행시에 파라미터 설정 파일을 불러와서 사용할 수 있기에 ROS 2 프로그래밍에 매우 유용하게 사용할 수 있다.

실습

파라미터 목록 확인(ros2 param list)

우선 실습을 하기전에 우리에게 익숙한 turtlesim과 teleop_turtle 노드를 불러오자

$ ros2 run turtlesim turtlesim_node
$ ros2 run turtlesim turtle_teleop_key

2개의 노드를 실행시켰으면 다음과 같이 파라미터 목록을 확인할 수 있는 파라미터 목록 확인 명령어를 사용하면 현재 개발환경에서 실행 중인 노드(turtlesim, turtle_teleop_key)의 Parameter Server 에 접근하여 현재 사용 가능한 파라미터를 노드별로 목록화하여 표시하게 된다. 여기서 use_sim_time 이 공통으로 보이는데 이는 모든 노드의 기본 파라미터로 시뮬레이션할떄 사용하는 파라미터이다.

$ ros2 param list
/teleop_turtle:
  scale_angular
  scale_linear
  use_sim_time
/turtlesim:
  background_b
  background_g
  background_r
  use_sim_time

파라미터 내용 확인(ros2 param describe)

이번에는 파라미터 목록 확인을 통해 알아본 파라미터가 어떤 형태, 목적, 데이터 형태, 최소/최댓값을 가지는지 알아보자. 이를 알아보기 위해서는 파라미터 내용 확인 (ros2 param describe) 명령어를 이용하면 되고 실제 사용 방법은 다음 명령어와 같이 ros2 param describe 명령어에 노드 이름과 파라미터 이름을 지정하면 된다. 아래 예제는 turtlesim 노드의 background_b 파라미터에 대해 알아본 결과로 파라미터 이름은 background_b 이고, 데이터 형태는 integer 이며, 배경 컬러의 파랑 채널이라는 설명과 함께 최소, 최대, 스텝 값을 확인할 수 있다.

$ ros2 param describe /turtlesim background_b
Parameter name: background_b
  Type: integer
  Description: Blue channel of the background color
  Constraints:
    Min value: 0
    Max value: 255
    Step: 1

파라미터 읽기(ros2 param get)

파라미터 읽기 명령어는 다음과 같다.

$ ros2 param get <노드 이름> <파라미터 이름>
					↓
$ ros2 param get <node_name> <parameter_name>            

예를 들어 위에서 사용했던 파라미터 목록 확인 (ros2 param list) 명령어를 통해 확인된 background_r, background_g, background_b 파라미터의 값을 읽어 오면 아래와 같은 결과를 확인할 수 있다. 즉, 현재 실행 중인 turtlesim 노드의 배경색은 r = 69, g = 86, b = 255 값의 색상으로 Neon Blue(#4556FF, https://www.htmlcsscolor.com/hex/4556FF)에 해당되게 된다. 지금까지 강좌에서 파란색 화면 상의 거북이라고 했었는데 그 파란색이 정확히는 r = 69, g = 86, b = 255 이였던 것이다.

$ ros2 param get /turtlesim background_r
Integer value is: 69

$ ros2 param get /turtlesim background_g
Integer value is: 86

$ ros2 param get /turtlesim background_b
Integer value is: 255

파라미터 쓰기(ros2 param set)

파라미터 읽기를 해봤으니 파라미터 쓰기를 해보자. 파라미터 쓰기 명령어는 다음과 같다.

$ ros2 param get <노드 이름> <파라미터 이름> <변경할 파라미터 >
					↓
$ ros2 param get <node_name> <parameter_name> <value>       

예를 들어 배경색을 Dark Violet(#9400D3, https://www.htmlcsscolor.com/hex/9400D3)으로 변경하기 위하여 r = 148, g = 0, b = 211 값으로 변경해보자.

$ ros2 param set /turtlesim background_r 148
Set parameter successful

$ ros2 param set /turtlesim background_g 0
Set parameter successful

$ ros2 param set /turtlesim background_b 211
Set parameter successful



이 명령어가 실행되었다면 위 사진처럼 /turtlesim 노드의 배경색이 보라색으로 바뀐것을 확인할 수 있다. 이렇게 파라미터는 별도의 추가 프로그래밍 작업 없이 정해놓은 파라미터를 통해 외부에서 읽고, 쓸 수 있기에 프로그램 수정과 컴파일 없이도 다른 결과르 만들어 낼 수 있다.

파라미터 저장(ros2 param dump)

앞에서 파라미터 쓰기(ros2 param set)를 사용해 파라미터의 값을 변경할 수 있다는 것을 알았다. 이 명령어를 이용하면 파라미터를 변경할 수 있지만 /turtlesim 노드를 종료한 다음 다시 실행하면 모든 파라미터는 다시 초깃값으로 설정된다. 이때 파라미터 저장 명령어(ros2 param dump)를 사용하면 변경된 파라미터를 저장할 수 있다.

파라미터 저장을 위한 명령어는 다음과 같다.

$ ros2 param dump <노드_이름>
			↓
$ ros2 param dump /turtlesim
Saving to: ./turtlesim.yaml

파라미터를 저장하면 현재 경로에 해당 노드 이름으로 설정 파일이 yaml 형태로 저장된다.
turtlesim.yaml 파일에는 turtlesim 노드가 파라미터 서버를 통해 가지고 있던 background_b, background_g, background_r, use_sim_time 파라미터 값이 된다.

$ cat ./turtlesim.yaml
turtlesim:
  ros__parameters:
    background_b: 211
    background_g: 0
    background_r: 148
    use_sim_time: false

노드 실행 시 저장된 파라미터 값을 사용하려면 다음 예제와 같이 --ros-args --params-file 옵션과 함께 앞에서 만들었던 yaml 파일의 위치를 입력하면 된다.

$ ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtleism.yaml

파라미터 삭제(ros2 param delete)

특정 파라미터 삭제 명령어는 다음과 같다.

$ ros2 param delete /turtlesim background_b
Deleted parameter successfully

파라미터의 삭제된 상태는 다음 명렁어를 통해 확인할 수 있다.

$ ros2 param list /turtlesim
  background_g
  background_r
  use_sim_time

이상으로 파라미터에 대해 알아보았다. 파라미터에 대한 더욱 자세한 내용은 뒤에서 더 설명할 예정이다.

profile
Robotics

0개의 댓글