ROS 2 파라미터 이해 : 정적인 코드를 동적인 로봇으로 바꾸는 기술
ROS 2에서 노드의 성격을 결정짓는 유전자와 같은 존재가 바로 파라미터입니다.

공간의 온도나 조명의 밝기에 따라 행동을 달리해야 하는 로봇을 상상해 보세요. 만약 환경이 바뀔 때마다 개발자가 매번 소스코드를 수정하고 다시 빌드해야 한다면 그 로봇은 과연 지능적이라고 불릴 수 있을까요? 아마 아닐 겁니다. 로봇 프레임워크인 ROS 2에서 노드의 성격을 결정짓는 유전자와 같은 존재가 바로 파라미터입니다. 파라미터를 제대로 이해하는 것은 단순히 설정 값을 바꾸는 기술을 넘어, 유연하고 확장 가능한 로봇 시스템을 설계하는 기초가 됩니다.
노드의 정체성을 결정하는 설정 가능한 DNA
파라미터는 개별 노드 내부에 저장되는 설정 값들의 집합입니다. 정수, 실수, 불린, 문자열 그리고 배열까지 다양한 데이터 타입을 지원하며, 노드가 실행되는 시점뿐만 아니라 실행 중에도 그 값을 바꿀 수 있다는 점이 핵심입니다. 감도가 예민한 센서를 다룰 때나 로봇의 가속도 제한을 시험할 때 파라미터는 개발자에게 놀라운 자유도를 제공합니다.
하지만 이런 유연성이 항상 달콤하기만 한 것은 아닙니다. 너무 많은 파라미터는 오히려 시스템의 복잡도를 높이고 관리의 어려움을 초래하기도 합니다. 물론 잘 설계된 파라미터 구조는 유지보수 비용을 획기적으로 줄여주지만, 반대로 무분별한 사용은 노드의 동작을 예측하기 어렵게 만들 수 있습니다.
실시간으로 소통하는 인터페이스: CLI
ROS 2는 터미널에서 즉각적으로 파라미터를 조회하고 수정할 수 있는 강력한 명령행 도구(CLI)를 제공합니다. 여러분은 이를 통해 노드의 내부 상태를 들여다보고 실시간으로 개입할 수 있습니다.
파라미터 목록과 상세 정보 확인
ros2 turtlesim을 실행해 봅시다.
ros2 run turtlesim turtlesim_node
가장 먼저 수행하게 되는 작업은 현재 어떤 파라미터들이 존재하는지 확인하는 것입니다.
ros2 param list

특정 노드의 파라미터만 추려보고 싶다면 노드 이름을 뒤에 붙여주면 됩니다. 만약 turtlesim 노드의 배경색 설정을 확인하고 싶다면 다음과 같이 입력합니다.
ros2 param list /turtlesim

단순히 이름만 아는 것으로는 부족할 때가 있습니다. 이 파라미터가 어떤 용도인지, 허용되는 값의 범위는 어디까지인지 궁금하다면 describe 명령어가 해결책이 됩니다.
ros2 param describe /turtlesim background_r

값의 확인과 변경: Get and Set
파라미터의 현재 값을 읽어오는 작업은 매우 빈번하게 일어납니다.
ros2 param get /turtlesim background_r
# 결과
Integer value is: 69
이 명령은 현재 설정된 빨간색 채널의 값을 반환합니다. 만약 여러분이 화면의 색상을 즉시 바꾸고 싶다면 set 명령어를 사용하면 됩니다.
ros2 param set /turtlesim background_r 150

명령을 입력하는 즉시 노드의 내부 변수가 업데이트되고, 시각적인 변화가 일어나는 과정을 목격할 수 있습니다. 감이 잘 오시지 않을 수 있지만, 이는 실제 로봇 운용 중에 제어 알고리즘의 파라미터를 튜닝할 때 엄청난 시간 절약 효과를 가져다줍니다.
설정 저장: YAML 파일로 관리하는 로봇의 기억
실시간으로 바꾼 설정 값들이 노드를 재시작할 때마다 사라진다면 매우 번거로운 일이 될 것입니다. ROS 2는 현재의 파라미터 상태를 파일로 저장하고 나중에 다시 불러오는 기능을 제공합니다. 이를 흔히 파라미터 덤프(Dump)라고 부릅니다.
ros2 param dump /turtlesim > turtlesim_backup.yaml

생성된 YAML 파일은 텍스트 편집기로 쉽게 수정할 수 있으며, 버전 관리 시스템을 통해 팀원들과 공유하기도 좋습니다. 저장된 설정 파일을 다시 노드에 적용하려면 load 명령어를 사용합니다.
ros2 param load /turtlesim turtlesim_backup.yaml

이 방식을 사용하면 복잡한 로봇 시스템의 초기 설정 값을 체계적으로 관리할 수 있습니다. 마치 게임의 세이브 데이터를 불러오듯 로봇을 항상 최적의 상태로 가동할 수 있게 됩니다.
선언되지 않은 파라미터와 동적 재구성
ROS 2 노드는 기본적으로 미리 정의된 파라미터만 사용할 수 있도록 설계되어 있습니다. 하지만 때로는 실행 시점에 임의의 파라미터를 추가해야 할 상황이 생깁니다. 이때 노드 옵션에서 allow_undeclared_parameters를 활성화하면 선언되지 않은 이름의 파라미터도 자유롭게 다룰 수 있게 됩니다.
또한 파라미터 값이 변경될 때마다 특정 콜백 함수가 실행되도록 설정할 수 있습니다. 이를 통해 값이 바뀌는 순간 로봇의 모터를 정지시키거나 센서의 샘플링 속도를 즉각 조정하는 등의 정교한 제어가 가능해집니다. 유연성과 안전성 사이의 균형을 잡는 것이 바로 숙련된 로봇 엔지니어의 역량이라고 할 수 있습니다.
요약
우리는 이번 시간을 통해 ROS 2 파라미터가 단순한 변수 그 이상의 가치를 지닌다는 것을 알 수 있었습니다. 파라미터는 노드 간의 독립성을 보장하면서도 외부와의 소통 창구를 열어두는 전략적인 도구입니다.
첫째, 파라미터는 노드 실행 중에도 변경 가능한 설정 값입니다. 둘째, CLI를 통해 실시간으로 값을 읽고 쓸 수 있어 튜닝에 용이합니다. 셋째, YAML 파일을 활용해 설정을 영구적으로 보존하고 공유할 수 있습니다.