# ROS2에서의 파라미터 관리

ROS2(로봇 운영 체제 2)는 분산 시스템에서 사용되는 로봇 애플리케이션의 개발을 위한 프레임워크로, 파라미터(Parameter)는 ROS2의 주요 구성 요소 중 하나이다. 파라미터는 노드의 동작을 동적으로 조정할 수 있도록 지원하며, 특히 노드의 재시작 없이도 설정 값을 변경할 수 있다는 점에서 중요한 역할을 한다. 이 글에서는 ROS2에서 파라미터의 역할과 관리 방법에 대해 심층적으로 다루겠다.

#### 파라미터의 개념

파라미터는 노드의 동작을 설정하는 값이다. 이는 노드의 초기화 시 설정되거나 실행 중에 동적으로 변경될 수 있다. 파라미터는 노드의 내부 상태에 영향을 미치는 중요한 변수로, 예를 들어 센서의 샘플링 주기, 로봇의 속도 한계, 또는 통신 주기 등을 정의할 수 있다. ROS2에서 파라미터는 일반적으로 키-값 쌍(key-value pair) 형태로 관리되며, 키는 문자열이고 값은 정수, 부동소수점, 문자열, 불리언, 배열 등 다양한 데이터 유형을 가질 수 있다.

#### 파라미터 서버와 클라이언트

ROS2의 파라미터는 노드의 특정 인스턴스에 속하는 것으로, 파라미터 서버는 해당 노드가 관리한다. 이 서버는 파라미터의 설정, 조회, 갱신 등의 작업을 담당하며, 노드 간 파라미터 값을 주고받기 위한 인터페이스를 제공한다.

파라미터 클라이언트는 파라미터 서버에 접근하여 특정 파라미터를 설정하거나 값을 가져올 수 있다. 이는 ROS2의 서비스나 액션 메커니즘과 유사한 구조로 동작하며, 파라미터 클라이언트는 주로 다른 노드에서 해당 노드의 파라미터 값을 참조하거나 수정하는 데 사용된다.

#### 파라미터 관리와 선언

ROS2에서는 파라미터를 사용하기 전에 노드가 해당 파라미터를 선언해야 한다. 이는 명시적으로 선언하지 않은 파라미터에 대한 접근을 방지하여 예기치 않은 오류를 줄이는 데 도움을 준다. 파라미터를 선언할 때는 기본값과 함께 해당 파라미터의 유형을 지정해야 하며, 이는 노드가 시작될 때 초기화된다.

파라미터는 노드가 실행 중일 때 동적으로 설정될 수 있으며, 이러한 변경은 즉각적으로 노드의 동작에 반영된다. 이를 통해 개발자는 시스템의 동작을 보다 유연하게 제어할 수 있다.

#### 파라미터 이벤트와 콜백

ROS2에서 파라미터가 변경되면 파라미터 이벤트(parameter event)가 발생하며, 이를 처리하기 위한 콜백 함수가 제공될 수 있다. 이러한 콜백 메커니즘은 파라미터 변경에 따른 노드의 즉각적인 반응을 가능하게 한다.

파라미터 이벤트는 파라미터의 생성, 변경, 삭제 등의 작업이 수행될 때마다 발생하며, 노드는 이를 통해 해당 파라미터의 상태를 실시간으로 모니터링할 수 있다. 콜백 함수는 이 이벤트에 반응하여 노드의 동작을 조정하거나 특정 작업을 수행할 수 있다.

#### 파라미터 파일

ROS2에서는 파라미터를 YAML 파일 형식으로 정의할 수 있다. 이 파일은 노드가 시작될 때 로드되며, 파라미터의 초기값을 설정하는 데 사용된다. 파라미터 파일을 사용하면 복잡한 시스템에서 다수의 노드에 걸쳐 동일한 파라미터 설정을 쉽게 관리할 수 있으며, 노드 간 일관성을 유지하는 데 도움을 준다.

YAML 파일은 계층적 구조를 가지며, 각 노드에 대해 별도의 파라미터 세트를 정의할 수 있다. 이를 통해 시스템 전반에 걸쳐 파라미터를 중앙에서 관리할 수 있다.

#### 파라미터 제약 조건

ROS2에서는 파라미터 값에 제약 조건을 설정할 수 있다. 예를 들어, 파라미터의 값이 특정 범위 내에 있어야 하거나, 특정 유형의 값만 허용되도록 할 수 있다. 이러한 제약 조건은 노드의 안정성을 보장하며, 잘못된 값으로 인해 발생할 수 있는 오류를 예방한다.

파라미터 제약 조건은 노드가 파라미터를 선언할 때 함께 정의되며, 클라이언트에서 파라미터를 설정하려고 할 때 이러한 제약 조건이 검증된다. 만약 조건을 만족하지 않는 값이 설정되려 하면, 해당 요청은 거부되며 오류 메시지가 반환된다.

***

관련 자료:

1. ROS2 Documentation: <https://docs.ros.org/en/foxy/index.html>
2. Programming Robots with ROS2, Morgan Quigley et al., O'Reilly Media, 2020.
3. ROS2 Parameter Server Design Document: <https://design.ros2.org/articles/parameter\\_server.html>
