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