[ROS2 Tutorial 따라하기] [CLI Tools] 9. Creating a launch file

[ROS2 Tutorial 따라하기] [CLI Tools] 9. Creating a launch file

이 글은 아래의 자료를 참고로 만들어졌습니다.

https://docs.ros.org/en/dashing/Tutorials/Launch-Files/Creating-Launch-Files.html

Creating a launch file

Goal: Create a launch file to run a complex ROS 2 system.

Tutorial level: Beginner

Background

이전까지의 튜토리얼에서는 실행하려는 새 node마다 새 터미널을 열어 실행하였습니다.

수 많은 nodes가 동시에 실행하는 복잡한 시스템에서는,

새로운 터미널들을 열고 각각에 configuration을 입력하여 실행하는 것은 힘든 일이 될 수 있습니다.

Launch files은 환경을 설정하고 nodes를 동시에 실행할 수 있게 해줍니다.

ros2 launch 명령으로 하나의 launch file을 실행하면

전체의 시스템(모든 nodes와 각각의 configurations)이 한 번에 실행됩니다.

Prerequisites

이번 튜토리얼에서는 rqt_graph와 turtlesim packages를 사용합니다.

text editor가 필요합니다(저는 nano를 사용하겠습니다).

항상 새로운 터미널에 설정파일을 소싱하는 것을 잊지 마세요.

Tasks

1 Setup

launch file을 저장할 새로운 디렉토리를 만듭니다.

$ cd ~ $ mkdir launch

아래의 명령을 통해 turtlesim_mimic_launch.py라는 lauch file을 만듭니다.

$ touch launch/turtlesim_mimic_launch.py

또는 시스템의 GUI를 통하여 새로운 파일을 만들 수도 있습니다.

2 Write the launch file

nano를 이용하여

아래의 내용을 turtlesim_mimic_launch.py에 복사, 붙여넣기하고 저장합니다.

$ nano ~/launch/turtlesim_mimic_launch.py

from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='turtlesim', node_namespace='turtlesim1', node_executable='turtlesim_node', node_name='sim' ), Node( package='turtlesim', node_namespace='turtlesim2', node_executable='turtlesim_node', node_name='sim' ), Node( package='turtlesim', node_executable='mimic', node_name='mimic', remappings=[ ('/input/pose', '/turtlesim1/turtle1/pose'), ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'), ] ) ])

2.1 Examine the launch file

import 명령문을 사용하여 python의 luanch modules의 일부를 끌어옵니다.

from launch import LaunchDescription from launch_ros.actions import Node

그리고 launch description을 실행합니다.

def generate_launch_description(): return LaunchDescription([ ])

turtlesim package에 포함되어 있는 세 개의 nodes를 LaunchDescription안에 넣습니다.

이 시스템의 목표는 2개의 turtlesim windows를 실행하고,

그 중 한 turtle이 다른 turtle의 움직임을 따라하는 것입니다.

lanch description에서 2개의 turtlesim windows를 실행합니다.

Node( package='turtlesim', node_namespace='turtlesim1', node_executable='turtlesim_node', node_name='sim' ), Node( package='turtlesim', node_namespace='turtlesim2', node_executable='turtlesim_node', node_name='sim' ),

2개의 nodes가 다른 점은 namespace 값이 다르다는 것뿐입니다.

고유한 namespaces는 node 이름과 topic 이름의 충돌없이 2개의 시뮬레이터를 실행하게 해줍니다.

두 turtles는

같은 topic으로부터 명령을 receive하고,

같은 topic으로 자세를 publish합니다.

마지막 node는 turtlesim package에 있는 mimic을 실행합니다.

Node( package='turtlesim', node_executable='mimic', node_name='mimic', remappings=[ ('/input/pose', '/turtlesim1/turtle1/pose'), ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'), ] )

이 node는 remappings 형식의 세부 정보가 추가되었습니다.

/input/pose topic이 /turtlesim1/turtle1/pose으로 remapped하였고,

/output/cmd_vel topic이 /turtlesim2/turtle1/cmd_vel로 remapped하였습니다.

따라서, mimic은

/turtlesim1/sim의 자세를 subscribe하고,

/turtlesim2/sim의 제어 명령을 republish합니다.

즉, turtlesim2가 turtlesim1의 움직임을 따라합니다.

3 ros2 launch

turtlesim_mimic_launch.py를 실행하기 위해서,

해당 디렉토리로 들어가서, launch file을 실행합니다.

$ cd launch $ ros2 launch turtlesim_mimic_launch.py [INFO] [launch]: All log files can be found below /home/ros/.ros/log/2021-05-14-15-27-25-244479-robotv-9807 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [turtlesim_node-1]: process started with pid [9817] [INFO] [turtlesim_node-2]: process started with pid [9818] [INFO] [mimic-3]: process started with pid [9819]

만약 package에서 launch file을 제공한다면,

아래의 구문으로 실행이 가능합니다.

좀 더 자세한 내용은 package에 대한 튜토리얼에서 다룹니다.

$ ros2 launch

시스템이 작동하는 것을 보기 위해서,

새로운 터미널을 열고,

/turtlesim1/turtle1/cmd_vel topic을

ros2 topic pub 명령을 실행하여 /turtlesim1/sim을 움직입니다.

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

아래외 같이 같은 경로로 움직임을 확인할 수 있습니다.

4 Introspect the system with rqt_graph

시스템이 실행하고 있는 동안,

새로운 터미널을 열어

nodes의 관계를 살펴보기위해 rqt_graph를 실행합니다.

$ rqt_graph

ros2 topic pub 명령을 사용하여 실행한

/_ros2cli_publisher_geometry_msgs_msg_Twist node는 /turtlesim1/turtle1/cmd_vel topic을 통해 데이터를 publish하고,

/turtlesim1/sim node는 /turtlesim1/turtle1/cmd_vel topic을 subscribe합니다.

/turtlesim1/sim node가 /mimic node로 /turtlesim1/turtle1/pose topic을 보내고,

/mimic node가 /turtlesim2/sim node로 /turtlesim2/turtle1/cmd_vel topic을 보냅니다.

from http://jstar0525.tistory.com/43 by ccl(A) rewrite - 2021-05-14 16:26:15