글 / ROS 2 기초

ROS 2 Launch 파일

실행할 노드와 그 이름, 파라미터, 토픽 이름 변경을 파일 하나에 기술하여 ros2 launch로 한 번에 실행한다.

작성일 · 읽는 시간 2분 · ROS 2 Jazzy 기준

Launch 파일의 필요성

노드를 ros2 run으로 하나씩 실행하면 터미널이 노드 수만큼 필요하고, 인자를 매번 수동으로 입력해야 한다. launch 파일에는 어떤 실행 파일을 어떤 설정으로 실행할지를 기술한다. launch 파일은 XML, YAML, Python으로 작성할 수 있다.

Python Launch 파일

예제는 공식 튜토리얼의 turtlesim(거북이 시뮬레이터)이다. mimic 노드는 첫째 거북이의 움직임을 둘째 거북이가 그대로 재현하도록 한다. generate_launch_description 함수가 LaunchDescription을 반환하고, 그 내부에 실행할 노드를 Node로 나열한다.

pythonturtlesim_mimic_launch.py
from launch import LaunchDescription
from launch_ros.actions import Node


def generate_launch_description():
    return LaunchDescription([
        Node(package='turtlesim', executable='turtlesim_node',
             namespace='turtlesim1',
             # 딕셔너리나 YAML 파일 경로의 목록으로 넘긴다
             parameters=[{'background_r': 200}]),
        Node(package='turtlesim', executable='turtlesim_node',
             namespace='turtlesim2'),
        Node(package='turtlesim', executable='mimic', name='mimic',
             # (원래 이름, 바꿀 이름) 쌍으로 토픽을 잇는다
             remappings=[
                 ('/input/pose', '/turtlesim1/turtle1/pose'),
                 ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
             ]),
    ])

launch 파일 하나가 실행하는 노드 셋과 각 인자

Node의 인자

  • namespace: 노드와 토픽 이름 앞에 붙으므로, 같은 실행 파일을 두 개 실행해도 이름이 충돌하지 않는다.
  • parameters: 여러 개를 지정하면 같은 파라미터에는 뒤에 지정한 값이 적용된다.
  • remappings: 코드를 수정하지 않고 토픽 이름을 변경한다.

remappings로 이어지는 mimic 노드와 두 거북이의 토픽

실행 방법

bash
ros2 launch turtlesim_mimic_launch.py
# 패키지에 든 launch 파일
ros2 launch <패키지 이름> <launch 파일 이름>