개발자와 함께하는 ROS2 Humble Parameter 이해하기, ROS2 명령어-5

IROBOU·2023년 8월 20일
1

인공지능_로봇개발

목록 보기
6/17
post-thumbnail

ros2로 개발하다보면 parameter라는 것을 많이 설정하게 될 것이다.

이 parameter가 무엇인지 오늘 배워보도록 하자!


목표
ROS2에서 parameter 값을 확인하고, 설정하고, 저장하고, 불러오는 방법에 대해서 배운다.

예상 소요시간
5분

영상 튜토리얼
추후 업데이트


배경지식

parameter는 간단히 말해 node의 설정 값이라고 생각하면 된다.

예를 들어 음식을 주문 하는 node가 있다고 하면 한번에 최대 주문 가능한 음식 개수, 주문할 전화번호 등이 node에서 설정이 필요한 값들이라고 할 수 있는데, 이들이 parameter이다.

이 설정 값들은 interger, float, boolean, string, list 같은 형식을 갖는다.


준비물


1. 환경 설정하기

항상 그랬듯이 다음 명령어들로 /turtlesim과 /teleop_turtle을 실행해주자!

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

2. ros2 param list

이제 본격적으로 parameter 관련 명령어에 대해 알아볼 건데

제일 처음 명령어는 ros2 param list이다.

해당 명령어는 다음과 같고 이를 실행해보자!

ros2 param list

그렇다면 현재 /teleop_turtle과 /turtlesim node의 pamrameter들이 다음과 같이 각각 나열 될 것이다.

/teleop_turtle:
  qos_overrides./parameter_events.publisher.depth
  qos_overrides./parameter_events.publisher.durability
  qos_overrides./parameter_events.publisher.history
  qos_overrides./parameter_events.publisher.reliability
  scale_angular
  scale_linear
  use_sim_time
/turtlesim:
  background_b
  background_g
  background_r
  qos_overrides./parameter_events.publisher.depth
  qos_overrides./parameter_events.publisher.durability
  qos_overrides./parameter_events.publisher.history
  qos_overrides./parameter_events.publisher.reliability
  use_sim_time

상단의 결과를 보면 각 node이름 별로 구분되게 parameter가 출력됐고(node별로 각각 다른 설정값을 갖기 때문) 공통적으로 use_sim_time이라는 parameter가 있는 것을 관찰 할 수 있다.

몇가지 parameter를 살펴보면, /turtlesim node에 있는 background_b는 왠지 RGB 색상중 blue계열의 설정 값과 관련되있는 것 같다!

그럼 이 값을 살펴볼 수 있는 다음 명령어를 배워보자


3. ros2 param get

ros2 param get은 특정 parameter의 현재 설정 값을 보여주는 명령어이다.

문법은 다음과 같다.

ros2 param get <관심 노드 이름> <알고자하는 parameter 이름>

즉 관심 노드의 이름과 알고 싶어하는 parameter 이름으로 명령어를 구성해주면 그 설정값을 반환해준다.

다음 명령어를 통해 실습해보자.

ros2 param get /turtlesim background_g

위 명령어 뜻은 /turtlesim node에서 background_g라는 parameter의 설정값을 get(보여줘)해줘 라는 의미이다.

명령어를 실행하게 되면 다음과 같은 값을 반환 할 것이다.

Integer value is: 86

이 말은 현재 background_g는 interger type이며 그 값은 86이라는 의미가 된다.

추가로 background_r과 backgound_b에 대해 살펴보는 것은 여러분에게 맡기겠다!

다음은 이 설정 값들을 원하는 값으로 세팅하는 방법에 대해 배워보겠다.


4. ros2 param set

다음과 같은 명령어를 사용하면 원하는 parameter를 설정할 수 있다.

ros2 param set <원하는 node 이름> <바꾸고자 하는 parameter 이름> <설정하고자하는 >

위의 명령어는 원하는 node에 있는 parameter 이름의 값을 '설정하고자하는 값'으로 세팅 해줘 라는 말이다.

다음 명령어를 통해 실습해보자.

ros2 param set /turtlesim background_r 150

이는 /turtlesim node에 있는 background_r이라는 parameter를 150이라는 값으로 설정하겠어 라는 의미이다.

이 명령어를 실행했을 때 다음과 같은 메세지가 출력되면 성공!

박수~!! 짝짝짝

Set parameter successful

Turtlesim창을 열어서 확인해보면 색이 바뀐 것을 확인 할 수 있을 것이다.

참고로 이렇게 바뀐 node의 설정 값들은 일시적이고 node를 껐다 키면 다시 원래대로 돌아온다.

그럼 이렇게 바꾼 parameter값을 저장하고 싶으면 어떻게 할까?

다행히도 ros2개발자는 이 상황을 고려하여 이미 명령어를 개발해놨다. ㅎㅎ


5. ros2 param dump

ros2 param dump는 특정 node가 갖는 parameter의 설정 값을 보여주고 필요하면 저장할 수 있는 기능을 제공한다.

기본 문법은 다음과 같다.

ros2 param dump <node 이름>

이는 'node 이름'에 있는 parameter를 보여줘 라는 의미다.

이 node의 parameter를 저장하고 싶으면 다음과 같은 명령어를 사용한다.

ros2 param dump <node 이름> <parameter 파일이름.yaml>

위의 명령어는 'node 이름'에 있는 parameter를 'parameter 파일이름.yaml'의 형태로 현재 경로에 저장해준다.

그럼 다음 명령어로 실습해보자.

ros2 param dump /turtlesim > turtlesim.yaml

이 말은 즉, /turtlesim에 있는 parameter를 turtlesim.yaml파일에 저장해줘~ 라는 의미이다.

ubuntu 명령어 ls을 사용하면 현재 경로에 turtlesim.yaml파일이 생성됐음을 확인 할 수 있다.

그럼 이 파일을 load하려면 어떻게 할까?


6. ros2 param load

이번에 배워볼 명령어는 방금 저장한 parameter를 불러오는 명령어이다.

기본 문법은 다음과 같다.

ros2 param load <node 이름> <불러오고자하는 parameter file경로 또는 이름>

이는 'node 이름'을 갖는 node에 '불러오고자하는 parameter file경로 또는 이름'의 파일에 있는 설정값들을 불러와줘 라는 의미이다.

다음 명령어로 실습해보자.

ros2 param load /turtlesim turtlesim.yaml

간단히 의미를 살펴보자면 /turtlesim node에 turtlesim.yaml에 있는 설정값들을 불러와줘 라는 의미이다.

명령어를 실행하면 다음과 같은 메세지가 뜰 것이다.

Set parameter background_b successful
Set parameter background_g successful
Set parameter background_r successful
Set parameter qos_overrides./parameter_events.publisher.depth failed: parameter 'qos_overrides./parameter_events.publisher.depth' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.durability failed: parameter 'qos_overrides./parameter_events.publisher.durability' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.history failed: parameter 'qos_overrides./parameter_events.publisher.history' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.reliability failed: parameter 'qos_overrides./parameter_events.publisher.reliability' cannot be set because it is read-only
Set parameter use_sim_time successful

대략 성공했다는 메세지인 것 같다. 그렇지만 Read-only parameter라서 실패했다는 메세지도 있는데 이는 일부 parameter들은 node가 실행될 때 설정된 값에서 바꿀 수 없다는 의미이다.

그렇다면 node가 실행될 때 parameter 값을 설정하고 싶으면 어떻게 할까?

걱정하지 마시라. 다음 명령어에서 배워볼 것이다.


7. Load parameter file on node startup

ros2 run이라는 명령어는 node를 실행하는데 사용됐다.

여기를 약간 변형하면 node를 실행할 때 원하는 parameter로 설정할 수 있다.

기본 문법은 다음과 같다.

ros2 run <package 이름> <executable 이름> --ros-args --params-file <parameter 파일 이름>

명령어 구성을 살펴보면 'package 이름'의 package에 'executable 이름'을 실행할 때 parmeter file은 'parameter 파일 이름'이고 이 안에 있는 설정값들로 node의 parameter값을 세팅 해줘 라는 의미이다.

다음 명령어로 간단한 예제를 살펴보자.

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

이는, turtlesim패키지에 turtlesim_node라는 executable을 실행할 건데 parameter값들이 들어있는 parameter파일을 turtlesim.yaml이고 여기에 있는 값들로 node의 parameter들을 설정해줘 라는 말이 된다.

정상적으로 실행 됐다면 배경화면이 바뀐 TurtleSim 화면을 볼 수 있을 것이다.


여때까지 node의 parameter의 개념과 이를 확인하고, 설정하고, 저장하고, 불러오는 명령어에 대해서 배웠다.

경험상 오늘 배운 명령어들은 파라미터가 정상적으로 node에 설정되어있나? 확일 할 때 자주 사용하는 것 같다.

즉 개발하다보면 자연스럽게 익숙해지는 부분이고 까먹었으면 인터넷에서 찾아보면 된다. 나도 종종 문법 까먹으면 찾아본다. ㅎㅎ

오늘도 역시 스스로를 칭찬해주자~!

"크으 오늘도 멋진 나ㅎㅎ"

질문하고 싶거나 인공지능 & 로봇 개발에 대해 다뤄줬으면 하는 주제를 댓글로 남겨주기 바란다~!

문의메일: irobou0915@gmail.com
오픈톡 문의: https://open.kakao.com/o/sXMqcQAf
IRoboU 유튜브 채널: https://www.youtube.com/channel/UC2-d99PrBwJy15MjPa32zYg

참고 문헌: https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Parameters/Understanding-ROS2-Parameters.html

profile
지식이 현실이 되는 공간

0개의 댓글