여기서는 파라미터를 사용하여 액션 서버 작성 시 사용했던 소스에 특정 기능을 추가하도록 하겠습니다.
1. Python 코드에서 파라미터 선언하기
~/ros2_study/src/my_first_package/ my_first_package/dist_turtle_action_server.py의 소스의 init()에 아래의 파라미터 선언을 추가합니다.
self.declare_parameter('quantile_time', 0.75)
self.declare_parameter('almost_goal_time', 0.95)

여기서 의미는 다음과 같습니다.
| quantile_time | 0.75 | 진행률 75% 지점 판단용 |
| almost_goal_time | 0.95 | 목표에 거의 도달한 시점 판단용 |
2. 코드에서 파라미터 값 읽기
선언한 파라미터는 get_parameters()로 읽을 수 있습니다.
(quantile_time, almosts_time) = self.get_parameters(
['quantile_time', 'almost_goal_time']
)
self.quantile_time = quantile_time.value
self.almosts_time = almosts_time.value
파라미터 객체에서 실제 값은 .value로 가져옵니다.

3. 실행 중 파라미터 변경 감지하기
ROS 2에서는 실행 중 파라미터가 변경되었을 때 콜백 함수를 실행할 수 있습니다.
먼저 import를 추가합니다.
from rcl_interfaces.msg import SetParametersResult

그다음 콜백을 등록합니다.
self.add_on_set_parameters_callback(self.parameter_callback)

콜백 함수 예시는 다음과 같습니다.
def parameter_callback(self, params):
for param in params:
print(param.name, "is changed to", param.value)
if param.name == 'quantile_time':
self.quantile_time = param.value
if param.name == 'almost_goal_time':
self.almosts_time = param.value
print(
'quantile_time and almost_goal_time is',
self.quantile_time,
self.almosts_time
)
return SetParametersResult(successful=True)
이 구조를 사용하면 터미널에서 ros2 param set을 실행했을 때 코드 내부 변수까지 함께 갱신됩니다.

4. 파라미터 변경 테스트
먼저 빌드를 수행합니다.
cd ros2_study
colcon build

노드를 실행합니다.
ros2 run my_first_package dist_turtle_action_server

다른 터미널에서 아래 명령어를 실행하여 현재 값을 확인합니다.
ros2 param get /dist_turtle_action_server quantile_time
출력 예시:
Double value is: 0.75

값을 변경합니다.
ros2 param set /dist_turtle_action_server quantile_time 0.8
정상 출력:
Set parameter successful
노드 실행 터미널에는 다음과 비슷한 로그가 출력됩니다.
quatile_time is changed to 0.8
quatile_time and almost_goal_time is 0.8 0.95

almost_goal_time도 같은 방식으로 변경할 수 있습니다.
ros2 param set /dist_turtle_action_server almost_goal_time 0.99


5. 왜 파라미터를 써야 할까요?
로봇 프로그램을 만들다 보면 속도, 거리, 각도, 허용 오차 같은 값이 계속 바뀝니다.
이 값을 코드 안에 직접 넣으면 매번 코드를 수정하고 다시 빌드해야 합니다.
하지만 파라미터를 사용하면 다음처럼 바꿀 수 있습니다.
ros2 param set /robot_node max_speed 0.5
즉, 로봇의 동작 조건을 실행 중에 조정할 수 있습니다.
실제 로봇 개발에서는 다음 값들을 파라미터로 자주 관리합니다.
- 최대 속도
- 목표 도달 거리
- 회전 허용 오차
- 센서 필터 계수
- PID 게인
- 카메라 사용 여부
- 디버그 출력 여부
6. 실무 관점에서 중요한 점
파라미터는 단순한 설정값이 아니라 노드의 외부 제어 인터페이스입니다.
즉, 코드 안에 박혀 있는 숫자를 밖으로 빼내는 구조입니다.
예를 들어 다음 코드는 좋지 않습니다.
if distance < 0.2:
break
이렇게 작성하면 목표 도달 기준을 바꾸려면 코드를 수정해야 합니다.
더 좋은 방식은 다음과 같습니다.
self.declare_parameter('goal_tolerance', 0.2)
self.goal_tolerance = self.get_parameter('goal_tolerance').value
그리고 실행 중에는 다음처럼 바꿀 수 있습니다.
ros2 param set /dist_turtle_action_server goal_tolerance 0.1
이런 방식이 실무형 ROS 2 코드입니다.
7. 정리
ROS 2 파라미터는 노드의 설정값을 외부에서 관리하기 위한 기능입니다.
핵심 명령어는 다음 5개입니다.
ros2 param list
ros2 param get
ros2 param set
ros2 param dump
ros2 param load
Python 코드에서는 다음 함수들이 중요합니다.
declare_parameter()
get_parameter()
get_parameters()
add_on_set_parameters_callback()
파라미터를 잘 사용하면 코드 수정 없이 로봇 동작을 조정할 수 있고, YAML 파일을 이용해 설정값을 저장하고 재사용할 수 있습니다.
ROS 2에서 로봇 시스템을 안정적으로 운영하려면 파라미터 구조는 반드시 익혀두셔야 합니다.
'강좌 > ROS2' 카테고리의 다른 글
| launch 파일에서 실행 인자 사용하기 #1 (0) | 2026.05.15 |
|---|---|
| ROS2 launch 작성 (0) | 2026.05.10 |
| ROS 2 MultiThreadedExecutor와 Action Server로 Turtlesim 거리 이동 구현하기 (0) | 2026.05.10 |
| ROS2 MultiThread 기초 (0) | 2026.05.10 |
| ROS2 Action Server 만들기 #2 (0) | 2026.05.10 |