ros2 action send_goal

코드 한 줄 없이 거북이에게 목표를 보낼 수 있을까?

찾기

지금 있는 액션과 타입

turtlesim을 띄워 두고 새 터미널에서 실행합니다. 액션도 토픽처럼 이름과 타입이 있습니다. 목표를 보내려면 둘 다 알아야 합니다.

ros2 action list -t로 이름과 타입을 한 번에 볼 수도 있습니다.

누가 누구와

서버와 클라이언트를 확인합니다

teleop도 띄운 상태라면 클라이언트 /teleop_turtle와 서버 /turtlesim이 보입니다. 서버는 보통 하나이고, 클라이언트는 여럿일 수 있습니다.

ros2 node info /turtlesim의 Action Servers 칸에서도 같은 이름을 볼 수 있습니다.

모양 보기

순서는 목표, 결과, 피드백

목표 theta는 바라볼 방향(라디안), 결과 delta는 출발 방향과의 각 차이, 피드백 remaining은 남은 각입니다. 피드백이 가운데가 아니라 맨 뒤에 옵니다.

실제 출력에는 칸마다 영어 주석(#) 한 줄이 위에 붙어 있습니다.

따라 하기

목표를 보내면 거북이가 돕니다

ros2 action send_goal 뒤에 이름, 타입, 값 순서로 적고, 값은 YAML로 씁니다(3강 6편). 화면처럼 \로 줄을 나눠 쳐도 되고 한 줄로 쳐도 됩니다. 거북이가 위쪽(1.57라디안)으로 돌아섭니다.

맨 앞의 "Waiting for an action server…" 줄은 줄였습니다. ID와 숫자는 실행할 때마다 다릅니다.

중간 보고 보기

--feedback을 붙입니다

위를 보던 거북이에게 "{theta: -1.57}"을 보내면서 끝에 --feedback을 붙이면, 남은 각 remaining이 0을 향해 줄어드는 피드백이 계속 찍힙니다.

공식 튜토리얼의 출력은 remaining: -3.1268…에서 시작해 delta: 3.1200…로 끝났습니다.

명령줄에서 취소

기다리는 중에 Ctrl+C

Jazzy의 send_goal은 결과를 기다리는 동안 Ctrl+C를 누르면 그냥 끝나지 않고, 3편의 취소 요청을 보낸 뒤 끝납니다. turtlesim 터미널에는 "Rotation goal canceled"가 찍힙니다.

명령 가운데를 …으로 줄였고 출력도 일부만 보였습니다.

다음 편

나만의 액션 타입은 어떻게 만들까요?

5편액션의 모양 9강 목록