노드 시작 및 파라미터 전달

1. 노드 시작 기본 개념

ROS2에서 노드는 독립적인 실행 단위로, 각각의 노드는 퍼블리셔, 서브스크라이버, 서비스, 액션 등의 역할을 담당한다. ROS2의 launch 파일은 노드 시작을 자동화하고, 여러 노드를 동시에 실행하거나 서로 다른 파라미터를 전달할 수 있는 편리한 방법을 제공한다.

노드 실행을 위한 launch 파일의 기본 구조는 다음과 같다:

<launch>
    <node
        name="노드_이름"
        pkg="패키지_이름"
        exec="실행파일_이름"
        output="screen">
    </node>
</launch>

2. 파라미터 전달

노드에 파라미터를 전달하기 위해서는 launch 파일에서 param 태그를 사용하여 노드 실행 시 필요한 파라미터를 정의할 수 있다. ROS2의 파라미터는 노드의 동작을 동적으로 설정하고 조정할 수 있는 중요한 수단이다.

2.1. 정적 파라미터 설정

정적 파라미터는 노드가 시작될 때 한 번 설정되며, 실행 중에는 변경되지 않는다. 이러한 파라미터는 launch 파일 내에서 param 태그로 정의할 수 있다. 예시:

<launch>
    <node
        name="노드_이름"
        pkg="패키지_이름"
        exec="실행파일_이름"
        output="screen">
        <param name="파라미터_이름" value="" />
    </node>
</launch>

이 방식으로 설정된 파라미터는 노드가 실행되는 동안 유지되며, 프로그램이 종료될 때까지 동일한 값을 갖는다.

2.2. 동적 파라미터 전달

동적 파라미터는 노드 실행 중에도 변경될 수 있다. 이를 통해 런타임 중에도 노드의 동작을 조정할 수 있다. ROS2는 rclcpp::ParameterEvent를 사용하여 이러한 동적 파라미터 변경을 처리하며, 노드는 특정 이벤트가 발생할 때 파라미터를 업데이트할 수 있다.

노드의 동적 파라미터는 다음과 같이 설정할 수 있다:

또한, 노드에서 동적으로 파라미터를 받아들이기 위해서는 set_parameters_callback 함수를 사용하여 파라미터 변경을 처리해야 한다.

2.3. 파라미터 파일 사용

파라미터를 파일로 관리할 수도 있다. ROS2는 YAML 파일 형식을 사용하여 여러 파라미터를 한꺼번에 정의하고, 이 파일을 launch 파일에서 불러와 사용할 수 있다. 예시 YAML 파일은 다음과 같다:

YAML 파일을 사용하는 launch 파일은 다음과 같다:

이 방식은 여러 노드가 동일한 파라미터 파일을 공유해야 할 때 유용하며, 각 노드의 파라미터 설정을 한 번에 관리할 수 있는 장점을 제공한다.

3. 런타임 파라미터 수정

실시간으로 파라미터를 수정하려면 ros2 param 명령을 사용하여 변경할 수 있다. 예를 들어, 실행 중인 노드의 특정 파라미터를 수정하려면 다음과 같은 명령을 입력한다:

이 명령은 노드가 실행 중일 때 해당 파라미터 값을 즉시 변경하며, 노드에서 설정된 파라미터 콜백 함수를 통해 그에 맞는 처리를 수행할 수 있다.

4. launch 파일에서 파라미터 관련 동작 관리

launch 파일에서 파라미터의 유효성 검증이나 조건부 실행 등의 동작을 추가로 설정할 수 있다. 예를 들어, 특정 조건에 따라 노드를 실행할지 말지를 결정하는 구조를 launch 파일에 추가할 수 있다. 이는 복잡한 시스템을 구성할 때 매우 유용하며, 시스템의 유연성을 높여준다.

5. 파라미터와 런치 파일에서의 조건부 실행

파라미터를 이용하여 특정 조건에 따라 노드의 실행을 제어할 수 있다. launch 파일에서는 다양한 조건문을 활용해 파라미터 값에 따라 노드를 실행하거나 특정 동작을 수행하도록 설정할 수 있다.

5.1. 조건부 실행 예제

다음은 파라미터 값을 기준으로 노드의 실행 여부를 결정하는 간단한 예제다:

위 예제에서는 use_node라는 인자를 통해 노드의 실행 여부를 제어할 수 있다. launch 파일을 실행할 때, use_node 인자의 값을 true 또는 false로 설정하여 해당 노드를 실행할지 말지를 결정할 수 있다.

5.2. 파라미터 값에 따른 실행 조건

특정 파라미터 값에 따라 실행 조건을 다르게 설정할 수 있다. 예를 들어, launch 파일에서 파라미터 값을 기준으로 노드의 실행 여부를 제어하는 방식은 다음과 같다:

이 예제는 노드의 파라미터가 특정 값일 때만 실행하는 조건부 논리를 적용한다. 이를 통해 노드의 실행을 더 세밀하게 제어할 수 있으며, 복잡한 시스템에서도 유용하다.

6. 파라미터 설정을 위한 런치 옵션 활용

ROS2에서는 파라미터를 launch 파일에 인자로 전달하여 다양한 설정을 미리 정의할 수 있다. 예를 들어, 특정 값에 따라 다른 파라미터를 적용하거나, 파라미터를 사용자 정의 인자로 설정하여 launch 파일을 더욱 유연하게 만들 수 있다.

6.1. 런치 파일 인자 설정 예시

다음은 launch 파일에서 인자를 통해 파라미터 값을 설정하는 예시다:

이 예제에서는 파라미터_이름이라는 인자를 통해 노드가 시작될 때 파라미터 값을 지정할 수 있다. launch 파일 실행 시 인자의 값을 전달하여, 노드가 사용하는 파라미터 값을 동적으로 설정할 수 있게 된다.

7. 파라미터 유효성 검증

launch 파일에서 파라미터를 설정할 때, 입력된 파라미터가 유효한 값인지 검증하는 것이 필요할 수 있다. 이를 위해 launch 파일 내에서 파라미터의 값 범위를 지정하거나, 특정 값에 대한 예외 처리를 설정할 수 있다.

7.1. 파라미터 유효성 검증 예시

파라미터의 값이 지정된 범위를 벗어났을 때 노드를 실행하지 않도록 설정할 수 있다:

이 구조는 파라미터가 유효한 값일 때에만 노드를 실행할 수 있게 해주며, 잘못된 값이 입력되었을 때 시스템이 오작동하지 않도록 예방할 수 있다.

8. 파라미터 파일을 통한 복잡한 설정 관리

ROS2에서는 복잡한 시스템 구성을 관리하기 위해 파라미터 파일을 사용하여 다양한 설정을 중앙에서 관리할 수 있다. 파라미터 파일은 YAML 형식으로 작성되며, 여러 노드에 공통적인 설정이나 각각의 노드에 필요한 고유한 설정을 명확하게 구분할 수 있다.

8.1. YAML 파라미터 파일의 구조

파라미터 파일은 노드 이름을 키로 하여 해당 노드가 사용할 파라미터들을 정의한다. 기본 구조는 다음과 같다:

이 예시는 특정 노드가 두 개의 파라미터를 사용할 수 있도록 설정한 YAML 파일이다. 각 파라미터는 ros__parameters 섹션 아래에 위치하며, 해당 노드의 설정을 관리한다.

8.2. 파라미터 파일의 활용

launch 파일에서 이 YAML 파일을 불러와 노드에 파라미터를 적용하는 방법은 다음과 같다:

이렇게 하면, 노드가 시작될 때 path/to/파라미터파일.yaml 경로에 있는 YAML 파일을 참조하여 파라미터가 자동으로 설정된다. 이를 통해 복잡한 시스템에서도 중앙 관리 방식으로 파라미터 설정을 용이하게 할 수 있다.

8.3. 다중 노드 파라미터 관리

YAML 파일은 하나 이상의 노드에 대한 설정을 한꺼번에 관리할 수 있다. 예를 들어, 여러 노드가 존재할 때 각 노드의 파라미터를 다음과 같이 정의할 수 있다:

이 방식은 여러 노드가 같은 파라미터를 공유하거나, 노드마다 다른 파라미터를 적용해야 할 때 유용하다. launch 파일에서 이 YAML 파일을 불러와서 노드에 필요한 파라미터를 한 번에 설정할 수 있다.

9. 동적 파라미터 재구성

ROS2는 런타임 중에도 파라미터 값을 동적으로 재구성할 수 있는 기능을 제공한다. 이는 시스템이 동작 중일 때 환경 변화나 요구 사항에 맞춰 파라미터를 수정하여 노드의 동작을 조정하는 데 유용하다.

9.1. 동적 파라미터 변경

노드가 실행 중일 때, ros2 param 명령어를 사용하여 파라미터를 수정할 수 있다. 예를 들어, 노드의 특정 파라미터를 실시간으로 변경하려면 다음과 같은 명령어를 사용할 수 있다:

이 명령어는 노드가 실행되는 동안 파라미터_이름의 값을 새_값으로 즉시 변경한다. 이를 통해 시스템의 동작을 실시간으로 조정할 수 있으며, 이 과정은 ROS2 노드가 설정한 파라미터 콜백을 통해 처리된다.

9.2. 파라미터 변경 이벤트 처리

파라미터 변경 이벤트는 노드 내부에서 콜백 함수로 처리된다. 이를 위해 set_parameters_callback 함수를 사용하여 파라미터 변경 시 발생하는 이벤트를 처리할 수 있다. 다음은 파라미터 이벤트 처리의 예시다:

이 코드는 파라미터가 변경될 때마다 해당 이벤트를 감지하고, 노드의 동작을 수정하는 데 사용된다. 특히 실시간 시스템에서는 파라미터 변경을 통해 노드의 동작을 즉각적으로 조정할 수 있어 매우 유용하다.

Last updated