Ubuntu ROS 실습(35)

zeusqoi·5일 전

개인공부 - ubuntu

목록 보기
54/58

이번 실습에서는 ROS 2의 파라미터 프로그래밍(Python)을 진행했다. argument 노드의 파라미터를 확인하고 직접 값을 변경해본 뒤, YAML 파일과 Launch 파일을 이용해 파라미터를 적용하는 과정까지 실습했다.


1. 파라미터 프로그래밍

ROS 2에서는 노드의 설정값을 파라미터(Parameter)로 관리할 수 있다.

이번 실습에서는 argument 노드에서 다음 파라미터를 사용했다.

qos_depth
min_random_num
max_random_num

argument.py에서는 다음과 같이 파라미터를 선언하고 값을 가져온다.

self.declare_parameter('qos_depth', 10)
qos_depth = self.get_parameter('qos_depth').value

self.declare_parameter('min_random_num', 0)
self.min_random_num = self.get_parameter('min_random_num').value

self.declare_parameter('max_random_num', 9)
self.max_random_num = self.get_parameter('max_random_num').value

self.add_on_set_parameters_callback(self.update_parameter)

또한 min_random_num과 max_random_num을 이용해서 랜덤한 a, b 값을 생성한다.


2. 파라미터 목록 확인

먼저 argument 노드를 실행했다.

source ~/robot_ws/install/setup.zsh
ros2 run topic_service_action_rclpy_example argument

새로운 터미널에서 파라미터 목록을 확인했다.

ros2 param list

실행 결과는 다음과 같았다.

/argument:
  max_random_num
  min_random_num
  qos_depth
  use_sim_time

argument 노드에 등록되어 있는 파라미터를 확인할 수 있었다.


3. 파라미터 값 확인

이번에는 max_random_num의 현재 값을 확인했다.

ros2 param get /argument max_random_num

결과:

Integer value is: 9

기본값인 9가 설정되어 있는 것을 확인했다.


4. CLI로 파라미터 변경

이번에는 max_random_num의 값을 100으로 변경했다.

ros2 param set /argument max_random_num 100

정상적으로 파라미터가 변경됐다.

그다음 min_random_num도 50으로 변경했다.

ros2 param set /argument min_random_num 50

이렇게 실행 중인 노드의 파라미터 값을 CLI를 통해 직접 변경할 수 있었다.


5. 파라미터 변경 콜백 확인

파라미터가 변경됐을 때 실제 값이 어떻게 반영되는지도 확인했다.

argument.py의 update_parameter() 함수는 다음과 같이 작성되어 있다.

def update_parameter(self, params):
    for param in params:
        if param.name == 'min_random_num' and param.type_ == Parameter.Type.INTEGER:
            self.min_random_num = param.value
        elif param.name == 'max_random_num' and param.type_ == Parameter.Type.INTEGER:
            self.max_random_num = param.value
    return SetParametersResult(successful=True)

min_random_num이나 max_random_num이 변경되면 해당 값을 self.min_random_num 또는 self.max_random_num에 반영한다.

전체적인 흐름은 다음과 같다.

ros2 param set
      ↓
update_parameter()
      ↓
파라미터 값 변경
      ↓
self.min_random_num / self.max_random_num에 반영
      ↓
랜덤값 생성 범위 변경

6. YAML 파라미터 파일 확인

ROS 2에서는 여러 파라미터를 YAML 파일로 관리할 수도 있다.

이번 실습에서는 다음 파일을 확인했다.

param/arithmetic_config.yaml

파일 내용은 다음과 같았다.

/**:
  ros__parameters:
    qos_depth: 30
    min_random_num: 0
    max_random_num: 9

YAML 파일에 qos_depth, min_random_num, max_random_num을 설정해둔 것을 확인했다.


7. Launch 파일에서 YAML 적용

다음으로 arithmetic.launch.py를 확인했다.

Launch 파일에서는 arithmetic_config.yaml의 경로를 지정한다.

param_dir = LaunchConfiguration(
    'param_dir',
    default=os.path.join(
        get_package_share_directory(
            'topic_service_action_rclpy_example'),
        'param',
        'arithmetic_config.yaml'))

그리고 argument 노드에 파라미터 파일을 적용한다.

Node(
    package='topic_service_action_rclpy_example',
    executable='argument',
    name='argument',
    parameters=[param_dir],
    output='screen'),

calculator 노드에도 같은 YAML 파일을 적용한다.

Node(
    package='topic_service_action_rclpy_example',
    executable='calculator',
    name='calculator',
    parameters=[param_dir],
    output='screen'),

즉, Launch 파일에서 YAML 파일을 불러와 여러 노드의 파라미터를 설정하는 구조다.


8. Launch 파일 실행

마지막으로 Launch 파일을 실행했다.

처음에는 workspace를 source하지 않은 상태에서 실행해서 다음 오류가 발생했다.

Package 'topic_service_action_rclpy_example' not found

workspace를 다시 source했다.

source ~/robot_ws/install/setup.zsh

그다음 Launch 파일을 실행했다.

ros2 launch topic_service_action_rclpy_example arithmetic.launch.py

이번에는 정상적으로 실행됐다.

argument와 calculator가 함께 실행됐고, argument에서 랜덤한 a, b 값이 출력되는 것도 확인했다.

YAML 파일에 설정된 값에 따라 min_random_num: 0, max_random_num: 9 범위에서 랜덤값이 생성되는 것을 확인했다.


마무리

이번 실습에서 다음 내용을 확인했다.

  • ros2 param list로 파라미터 목록 확인
  • ros2 param get으로 파라미터 값 확인
  • ros2 param set으로 실행 중인 파라미터 변경
  • update_parameter()를 이용한 변경값 반영
  • YAML 파일을 이용한 파라미터 관리
  • Launch 파일에서 YAML 파라미터 적용
  • Launch를 이용해 argument, calculator 노드 실행

특히 CLI를 이용해 실행 중인 파라미터를 변경하는 방법과 YAML 파일을 이용해 노드의 파라미터를 설정하는 방법을 직접 확인했다.

0개의 댓글