본문으로 바로가기

소스에서 파라미터 사용하기

category 강좌/ROS2 2026. 5. 10. 17:27

여기서는 파라미터를 사용하여 액션 서버 작성 시 사용했던 소스에 특정 기능을 추가하도록 하겠습니다.

 

 

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에서 로봇 시스템을 안정적으로 운영하려면 파라미터 구조는 반드시 익혀두셔야 합니다.

 

 

728x90
728x90