ROS 2 패키지에 런치 파일 통합하기

목표: ROS 2 패키지에 런치 파일 추가하기

전제 조건

ROS 2 패키지를 만드는 방법 튜토리얼을 통해 익혔어야 합니다.

새로운 터미널을 열 때마다 ROS 2를 소스화하는 것을 잊지 마십시오. 여기 를 참고하세요.

배경 지식

이전 튜토리얼 에서는 독립된 런치 파일을 작성하는 방법을 살펴보았습니다. 이 튜토리얼에서는 기존 패키지에 런치 파일을 추가하는 방법과 일반적으로 사용되는 규칙을 소개합니다.

작업

1 패키지 생성

패키지가 위치할 작업 공간을 만듭니다:

mkdir -p launch_ws/src
cd launch_ws/src
ros2 pkg create --build-type ament_python --license Apache-2.0 py_launch_example

2 런치 파일을 저장할 구조 생성

패키지의 모든 런치 파일은 패키지 내부의 launch 디렉토리에 저장됩니다. 위에서 만든 패키지의 최상위에 launch 디렉토리를 만드십시오.

Python 패키지의 경우 패키지를 포함하는 디렉토리 구조는 다음과 같아야 합니다:

src/
  py_launch_example/
    launch/
    package.xml
    py_launch_example/
    resource/
    setup.cfg
    setup.py
    test/

colcon이 런치 파일을 찾고 사용할 수 있도록 하려면 Python의 설정 도구에 런치 파일의 존재를 알려야 합니다. 이를 위해 setup.py 파일을 열고 상단에 필요한 import 문을 추가하고 setupdata_files 매개변수에 런치 파일을 포함시키십시오.

import os
from glob import glob
# Other imports ...

package_name = 'py_launch_example'

setup(
    # Other parameters ...
    data_files=[
        # ... Other data files
        # Include all launch files.
        (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*')))
    ]
)

3 런치 파일 작성

launch 디렉토리 내에 my_script_launch.py 라는 새로운 런치 파일을 만듭니다. Python 런치 파일의 경우 _launch.py 가 권장되지만 필수는 아닙니다. 그러나 런치 파일 이름은 launch.py 로 끝나야 ros2 launch 에 의해 인식되고 자동 완성됩니다.

런치 파일은 generate_launch_description() 함수를 정의해야 하며 이 함수는 launch.LaunchDescription() 을 반환하여 ros2 launch 명령에 사용됩니다.

import launch
import launch_ros.actions

def generate_launch_description():
    return launch.LaunchDescription([
        launch_ros.actions.Node(
            package='demo_nodes_cpp',
            executable='talker',
            name='talker'),
  ])

4 런치 파일 빌드 및 실행

작업 공간의 최상위로 이동하여 빌드합니다:

colcon build

colcon build 가 성공적으로 완료되고 작업 공간을 소스화한 경우 다음과 같이 런치 파일을 실행할 수 있습니다:

ros2 launch py_launch_example my_script_launch.py

문서화

런치 문서 에서 launch_ros 에서 사용되는 개념에 대한 자세한 내용을 확인할 수 있습니다.

런치 기능에 대한 추가 문서 및 예제는 곧 제공됩니다. 그 동안 소스 코드 (https://github.com/ros2/launchhttps://github.com/ros2/launch_ros)를 참고하세요.