거북이 두 마리 띄우기

한 거북이가 움직이면 다른 거북이가 따라 하게 할 수 있을까?

목표

둘째 거북이가 따라 합니다

공식 튜토리얼 "Creating a launch file"의 예를 그대로 만듭니다. 거북이 창 두 개를 띄우고, 첫 거북이를 움직이면 둘째 거북이가 똑같이 움직이게 합니다. 노드는 셋, 터미널은 런치 하나면 됩니다.

mimic

따라 하게 만드는 셋째 노드

turtlesim의 mimic 노드는 거북이의 위치와 방향(Pose)을 받아, 똑같이 움직이라는 속도 명령(Twist)으로 바꿔 냅니다. 첫 거북이의 Pose를 받아 둘째 거북이에게 보내면 따라 하기가 됩니다.

런치 파일

Node 세 개를 한 목록에

앞의 두 Node는 3편처럼 네임스페이스만 다른 거북이 창입니다. 셋째 Node가 mimic이고, remappings로 mimic이 들을 토픽과 낼 토픽을 거북이들의 토픽에 이어 줍니다.

주석 자리에 첫 Node를 복사해 넣고 namespace만 'turtlesim2'로 바꿉니다. remappings는 6편에서 자세히 봅니다.

따라 하기

띄우고 첫 거북이만 돌립니다

2편 카드 2의 틀(import 두 줄 + def generate_launch_description():) 안에 앞 장의 목록을 넣어 turtlesim_mimic_launch.py로 저장하고, 그 폴더에서 띄웁니다. 새 터미널에서 첫 거북이에게만 명령을 보내면 두 거북이가 같은 원을 그립니다.

전체 코드는 공식 튜토리얼 "Creating a launch file"의 turtlesim_mimic_launch.py에 있습니다. 한 줄 명령: 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}}"

로그

출력이 한 터미널에 모입니다

세 노드의 로그가 런치를 띄운 터미널 하나에 나옵니다. 대괄호 속 이름은 실행 파일 이름에 순번을 붙인 프로세스 이름입니다. Ctrl+C 한 번이면 셋이 함께 꺼집니다.

출력은 줄마다 앞부분만 보였습니다.

확인

노드 셋, 이어진 토픽까지 봅니다

노드 목록에 런치가 띄운 셋이 보입니다. 둘째 거북이의 cmd_vel에는 발행하는 쪽 하나(mimic)와 구독하는 쪽 하나(둘째 거북이)가 붙어 있습니다.

rqt_graph(2강 6편)로 봐도 같은 연결이 보입니다.

다음 편

네임스페이스를 실행할 때 바꿀 수는 없을까요?

5편실행할 때 값 넘기기 10강 목록