Knowhow/ROS2

[ROS2 Foxy Tutorial 한글 번역] 6. Understanding parameters

침닦는수건 2023. 2. 2. 15:24
반응형

Link

https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters.html

 

Understanding parameters — ROS 2 Documentation: Foxy documentation

Goal: Learn how to get, set, save and reload parameters in ROS 2. A parameter is a configuration value of a node. You can think of parameters as node settings. A node can store parameters as integers, floats, booleans, strings, and lists. In ROS 2, each no

docs.ros.org

 

Background

파라미터는 노드의 configuration 값으로 다른 말로 노드의 세팅값이라고 보면 된다. 노드는 파라미터를 integer, float, boolean, string, list 형태로 가질 수 있으며 각 노드마다 고유한 파라미터를 갖고 있다. 더 많은 정보를 얻고 싶으면 원본 홈페이지에 연결된 the concept document 링크를 열어보길 바란다.

 

Prerequisites

여전히 turtlesim 패키지를 사용할 것이다. 당연하게도 ROS2 sourcing하는 것을 잊지 말자.

 

Tasks

1. Setup

/turtlesim과 /teleop_turtle을 실행하자. 각각 다른 터미널에서 실행하는 것을 잊지 말자.

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

 

2. ros2 param list

노드에 속한 파라미터를 보기 위해선 새로운 터미널을 열고 다음 커맨드를 입력해보라.

ros2 param list

node namespace인 /teleop_turtle과 /turtlesim 밑으로 각 노드의 파라미터 리스트를 얻을 수 있다.

/teleop_turtle:
  scale_angular
  scale_linear
  use_sim_time
/turtlesim:
  background_b
  background_g
  background_r
  use_sim_time

보면, 모든 노드가 "use_sim_time"이라는 파라미터를 갖고 있다. 이건 이 두 노드가 특별히 들고 있는 파라미터가 아니라 ROS2 모든 노드가 들고 있는 파라미터다. 

 

(use_sim_time은 True로 설정시 ros::Time time = ros::Time::now() 같은 명령어가 시스템 시간을 사용하지 않고 내부의 /clock 뱉어주는 시뮬레이션 시간을 뱉도록 한다. 즉, 시간 흐름을 시뮬레이션 상에서 별도로 정의하고 싶을 때 사용하는 것이라 모든 노드에 기본으로 들어가 있는 것이다.)

 

/turtlesim 파라미터를 보면 이름에서 알 수 있듯이 배경색을 결정하는 파라미터들이 있다. 

 

파라미터의 타입을 알고 싶을 땐 "ros2 param get"을 이용하면 된다.

 

3. ros2 param get

파라미터의 현재값과 타입을 출력하고자 할 때 다음 커맨드를 이용한다.

ros2 param get <node_name> <parameter_name>

예를 들어, /turtlesim의 파라미터 중 "background_g"를 알고 싶을 경우, 다음과 같이 입력하면 된다.

ros2 param get /turtlesim background_g

출력 결과는 다음과 같다.

Integer value is: 86

이제 "background_g"는 integer 값을 갖는 파라미터라는 것을 알 수 있고 현재값은 86이라는 것도 알 수 있다. 

 

만약 "background_r"이나 "background_b"를 했다면 각각 정수 69, 255를 볼 수 있었을 것이다.

 

4. ros2 param set

파라미터를 runtime 중 변경하고 싶을 땐 다음 커맨드를 사용할 수 있다.

ros2 param set <node_name> <parameter_name> <value>

예를 들어, /turtlesim의 배경색을 바꿔보자.

ros2 param set /turtlesim background_r 150

다음과 같이 출력되면 파라미터 설정이 완료된 것이다.

Set parameter successful

그리고 배경색이 다음과 같이 변한 것을 볼 수 있을 것이다.

"set" 을 이용해서 변경한 파라미터는 지금 현재 세션에서만 유효하다. 영구적으로 변경되는 것이 아니다. 

 

만약 영구적이길 원하는 경우, 세팅을 저장하고 다음에 세팅을 불러와서 노드를 시작하는 방법이 있다.

 

5. ros2 param dump

노드의 현재 파라미터 모두를 파일의 형태로 저장할 수 있다. 커맨드는 다음과 같다.

ros2 param dump <node_name>

예를 들어, /turtlesim의 파라미터를 저장하고 싶은 경우, 다음과 같다.

ros2 param dump /turtlesim

다음과 같은 출력이 나오면 완료된 것이다.

Saving to:  ./turtlesim.yaml

현재 workspace로 쓰고 있는 폴더에 파일이 생성되었을 것이고 그 내용은 다음과 같을 것이다. 

turtlesim:
  ros__parameters:
    background_b: 255
    background_g: 86
    background_r: 150
    use_sim_time: false

나중에 다시 쓸 일이 있을 것 같은 파라미터들은 저장을 해두자.

 

6. ros2 param load

저장을 했으니 당연히 불러올 수도 있다. 커맨드는 다음과 같다.

ros2 param load <node_name> <parameter_file>

예를 들어, 앞선 "ros2 param dump"로 저장했던 "./turtlesim_yalm"을 불러오는 커맨드는 다음 모양일 것이다. 

ros2 param load /turtlesim ./turtlesim.yaml

다음과 같은 출력 결과를 볼 수 있을 것이다.

Set parameter background_b successful
Set parameter background_g successful
Set parameter background_r successful
Set parameter use_sim_time successful

 

7. Load parameter file on node startup

노드를 일단 실행하고 저장해두었던 파라미터를 덮어쓰는 방법 외에 애초에 저장해두었던 파라미터를 초기값으로 노드를 실행시킬 수 있다. 

ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>

turtlesim을 사용해왔던 커맨드랑 똑같은데 "--ros-args" 와 "--params-file"을 불러오고자 하는 파일 경로와 함께 추가해준 것이다. 

 

현재 실행 중인 turtlesim 노드를 끄고 아래 커맨드로 다시 실행해보라.

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

turtlesim 윈도우가 당연히 또 뜰 것인데 배경색이 이전에 변경했던 보랏빛 배경으로 변한 상태로 실행된 것을 볼 수 있을 것이다. 

 

Summary

노드는 기본 설정값을 정의하는 파라미터를 갖고 있다. "get" 과 "set" 커맨드를 이용해 파라미터 값을 읽고 쓰는 것이 가능하다. 또한 파라미터를 저장하고 불러올 수도 있어 나중에 재활용할 수도 있다.

반응형