ROS2

[ROS2] Tutorial Intermediate - Creating a launch file

씨주 2024. 11. 26. 14:55

Creating a launch file

Background

ROS2의 launch 시스템은 유저가 시스템 configuration을 표현할 수 있도록 도와준다. configuration은 실행할 프로그램, 실행 위치, 전달할 argument, ROS 관련 규칙이 포함된다. 또한 launch process 상태를 모니터링할 수 있고, 보고도 한다.

python, XML, YAML로 작성된 launch 파일은 다른 노드로 시작, 정지할 수 있고 다양한 event를 실행할 수 있다. 

 

Tasks

Write the launch file

mkdir launch
# launch/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'),
            ]
        )
    ])

turtlesim패키지를 활용한 3가지 노드로 실행하는 launch 파일이다. 목표는 2개의 tutlesim window를 실행하여 1개의 turtle movement를 다른 하나가 흉내내도록 하는 것이다.

turtlesim 노드 2개를 실행했을 때, 다른 점은 namespace값 한 가지이다. 그래야 충돌없이 실행되기 때문에 namespace는 unique해야 한다. 두 turtle은 같은 topic에 대해 command받고 publish한다. namespace는 두 turtle을 구분하기 위한 요소이다.

마지막 node 또한 turtlesim 패키지를 활용하지만 mimic을 하는 것이 다르다. 이 node는 remapping으로부터 얻은 configuration detail이 추가된다. mimic의 /input/pose topic은 /turtlesim1/turtle1/pose와 /output/cmd_vel topic을 /turtlesim2/turtle1/cmd_vel로 remap한다. 이는 mimic이 /turtlesim1/sim의 pose topic을 subscribe하고 /turtlesim2/sim의 command topic으로 republish하는 것을 의미한다. 쉽게 말해 turtlesim2는 turtlesim1의 움직임을 모방할 것이다.

 

ros2 launch

cd launch
ros2 launch turtlesim_mimic_launch.py

package.xml에 exec_depend 의존성을 추가하는 것도 좋다. 이는 pakcage를 빌딩한 후에도 ros2 launch command를 사용가능하게 한다.

 

다른 터미널을 열어서 첫번째 turtle이 움직이게 해보자.

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}}"

그럼 같은 경로를 따라 두 turtle이 움직이는 것을 볼 수 있다.

 

Introspect the system with rqt_graph

실행 상태에서 rqt_graph를 실행해보면 node 간의 관계를 확인할 수 있다.

rqt_graph

hidden node(실행한 command ros2 topic_pub)은 /turtlesim1/sim노드가 subscribe하는 /turtlesim1/turtle1/cmd_vel 토픽으로  data를 publish한다. 남은 graph는 mimic이 /turtlesim1/sim의 pose topic을 subscribe하고 /turtlesim2/sim의 command topic을 publish한다는 것을 보여준다.

 

 

 

ROS2_Humble Documentation : https://docs.ros.org/en/humble/Tutorials/Intermediate.html