ROS 2 패키지에 런치 파일 통합하기
목표: ROS 2 패키지에 런치 파일 추가하기
배경 지식
이전 튜토리얼 에서는 독립된 런치 파일을 작성하는 방법을 살펴보았습니다. 이 튜토리얼에서는 기존 패키지에 런치 파일을 추가하는 방법과 일반적으로 사용되는 규칙을 소개합니다.
작업
1 패키지 생성
패키지가 위치할 작업 공간을 만듭니다:
mkdir -p launch_ws/src
cd launch_ws/src
mkdir -p launch_ws/src
cd launch_ws/src
md launch_ws\src
cd launch_ws\src
ros2 pkg create --build-type ament_python --license Apache-2.0 py_launch_example
ros2 pkg create --build-type ament_cmake --license Apache-2.0 cpp_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 문을 추가하고 setup 의 data_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]*')))
]
)
C++ 패키지의 경우 CMakeLists.txt 파일을 조정하여 파일의 끝에 다음을 추가하십시오:
# Install launch files.
install(DIRECTORY
launch
DESTINATION share/${PROJECT_NAME}/
)
파일의 끝까지(단, ament_package() 앞에서).
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'),
])
launch 디렉토리 내에 my_script_launch.xml 라는 새로운 런치 파일을 만듭니다.
XML 런치 파일의 경우 _launch.xml 이 권장되지만 필수는 아닙니다.
<launch>
<node pkg="demo_nodes_cpp" exec="talker" name="talker"/>
</launch>
launch 디렉토리 내에 my_script_launch.yaml 라는 새로운 런치 파일을 만듭니다.
YAML 런치 파일의 경우 _launch.yaml 이 권장되지만 필수는 아닙니다.
launch:
- node:
pkg: "demo_nodes_cpp"
exec: "talker"
name: "talker"
4 런치 파일 빌드 및 실행
작업 공간의 최상위로 이동하여 빌드합니다:
colcon build
colcon build 가 성공적으로 완료되고 작업 공간을 소스화한 경우 다음과 같이 런치 파일을 실행할 수 있습니다:
ros2 launch py_launch_example my_script_launch.py
ros2 launch py_launch_example my_script_launch.xml
ros2 launch py_launch_example my_script_launch.yaml
ros2 launch cpp_launch_example my_script_launch.py
ros2 launch cpp_launch_example my_script_launch.xml
ros2 launch cpp_launch_example my_script_launch.yaml
문서화
런치 문서 에서 launch_ros 에서 사용되는 개념에 대한 자세한 내용을 확인할 수 있습니다.
런치 기능에 대한 추가 문서 및 예제는 곧 제공됩니다. 그 동안 소스 코드 (https://github.com/ros2/launch 및 https://github.com/ros2/launch_ros)를 참고하세요.