[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
를 통해 설정 값을 입력해주었다. 이 맵핑을 통해 turtlesim2
가 turtlesim1
의 움직임을 따라하게 된다.
이제 새로 만든 런치 파일을 실행해보자. 실행하기 위해서는 해당 파일이 있는 폴더로 먼저 이동해야 한다.
$ 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개의 거북이가 같은 움직임을 하는 것을 볼 수 있다.
rqt_graph 를 통해 조금 더 자세히 살펴보자.
가장 좌측에 있는 노드는 토픽을 퍼블리시하고 있는 터미널 창을 의미한다. 터미널 창에서 /turtlesim1/sim
노드로 /turtlesim1/turtle1/cmd_vel
이라는 토픽을 퍼블리시하고 있고, /turtlesim1/sim
노드는 /mimic
노드에게 /turtlesim1/turtle1/pose
토픽을 퍼블리시하고 있다. 그리고 /mimic
노드는 /turtlesim2/sim
노드에게 /turtlesim2/turtle1/cmd_vel
토픽을 퍼블리시하고 있다.
댓글남기기