[ROS2] (10)-launch 파일로 실행하기

launch 파일의 필요성

지금까지는 노드를 실행할 때마다 새로운 터미널 창을 열어서 노드를 실행해주었다. 튜토리얼에서는 노드가 몇 개 없지만, 노드의 개수가 많아지면 이렇게 매번 터미널 창을 열어서 실행시키는 것이 쉽지 않다.

런치 파일을 이용하면 동시에 여러 개의 노드를 실행하고 설정할 수 있다. ros2 launch <launch_file> 명령어를 통해 모든 노드의 실행과 각 노드의 설정을 한 번에 할 수 있다.

launch 파일로 노드 실행

먼저, 런치 파일을 저장할 폴더를 만든다. mkdir tutorial_launch 명령어로 tutorial_launch라는 폴더를 만들 수 있다. 새로 만든 폴더에 빈 파일을 새로 만든다(touch tutorial_launch/turtlesim_mimic_launch.py). 런치파일은 파이썬으로 만들 수 있다.

새로 만든 turtlesim_mimic_launch.py 파일을 텍스트 편집기로 연 뒤, 아래 코드를 붙여넣는다.

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='turtlesim',
            namespace='turtlesim1',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            namespace='turtlesim2',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            executable='mimic',
            name='mimic',
            remappings=[
                ('/input/pose', '/turtlesim1/turtle1/pose'),
                ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
            ]
        )
    ])

코드를 보면 3개의 노드가 있는 것을 확인할 수 있다. 첫 번째와 두 번째 노드는 모두 turtlesim 패키지의 turtlesim_node 실행파일을 실행하는 것이고, namespace만 다른 것을 확인할 수 있다. 이처럼 같은 노드를 실행할 때는 namespace를 달리 해야 한다.

마지막 노드는 turtlesim 패키지의 mimic이라는 실행 파일이다. 이 노드는 remmappings를 통해 설정 값을 입력해주었다. 이 맵핑을 통해 turtlesim2turtlesim1의 움직임을 따라하게 된다.

이제 새로 만든 런치 파일을 실행해보자. 실행하기 위해서는 해당 파일이 있는 폴더로 먼저 이동해야 한다.

$ cd tutorial_launch
$ ros2 launch turtlesim_mimic_launch.py

실행하게 되면 2개의 turtlesim 창이 뜬다. 새로운 터미널을 열고, 아래와 같이 토픽을 퍼블리시 해준다.

$ ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"

아래 사진과 같이 2개의 거북이가 같은 움직임을 하는 것을 볼 수 있다.

image

rqt_graph 를 통해 조금 더 자세히 살펴보자.

image

가장 좌측에 있는 노드는 토픽을 퍼블리시하고 있는 터미널 창을 의미한다. 터미널 창에서 /turtlesim1/sim 노드로 /turtlesim1/turtle1/cmd_vel이라는 토픽을 퍼블리시하고 있고, /turtlesim1/sim 노드는 /mimic 노드에게 /turtlesim1/turtle1/pose 토픽을 퍼블리시하고 있다. 그리고 /mimic 노드는 /turtlesim2/sim 노드에게 /turtlesim2/turtle1/cmd_vel 토픽을 퍼블리시하고 있다.

댓글남기기