goal·feedback·result
액션 이름 하나 뒤에는 통로가 몇 개 숨어 있을까?
세 부분
목표, 피드백, 결과
액션은 세 가지 메시지로 이루어집니다. 일을 시작하라는 목표(goal), 일하는 동안 보내는 피드백(feedback), 끝났을 때 한 번 보내는 결과(result)입니다.
거북이를 1.57라디안(위쪽)으로 돌리는 액션의 예입니다. 4강 8편에서 미리 본 .action의 세 칸이 이것입니다.
주고받는 순서
목표 하나에 보고는 여러 번
서버는 목표를 받으면 먼저 수락할지 거절할지 답합니다. 수락하면 일을 하면서 피드백을 여러 번 보내고, 끝나면 결과를 한 번 돌려줍니다.
클라이언트는 수락을 받자마자 결과를 미리 요청해 두고 기다립니다. 코드로는 7편에서 봅니다.
속을 열면
서비스 셋과 토픽 둘입니다
액션은 완전히 새로운 통신이 아닙니다. 묻고 답하는 일(목표, 결과, 취소)은 서비스 셋으로, 계속 흘러나오는 일(피드백, 상태)은 토픽 둘로 만든 묶음입니다.
그래서 7강의 서비스와 3강의 토픽을 알면 액션의 속도 읽힙니다.
따라 하기
숨은 이름을 꺼내 봅니다
turtlesim을 띄운 채 실행해 보세요. 이름에 _로 시작하는 부분이 있으면 숨은 이름이라 평소 list에는 안 보입니다. --include-hidden-services, --include-hidden-topics를 붙이면 보입니다.
화면의 …은 /turtle1/rotate_absolute를 줄인 것입니다.
목표의 상태
끝나는 길은 세 가지입니다
status 토픽으로는 목표마다 지금 상태가 나갑니다. 수락되어 실행되다가 성공, 취소, 중단 가운데 하나로 끝납니다. 취소와 중단의 차이는 3편에서 봅니다.
이 상태 값은 action_msgs 패키지의 GoalStatus 메시지에 정해져 있습니다(5편).
목표 ID
피드백에는 목표 ID가 붙습니다
피드백은 토픽이라 그 액션의 클라이언트 모두에게 갑니다. 그래서 목표마다 고유한 목표 ID(goal ID)를 붙이고, 클라이언트는 자기 ID가 붙은 것만 골라 씁니다.
ID는 4편의 출력 "Goal accepted with ID: f8db8f44…"에서 볼 수 있습니다. 거르는 일은 클라이언트 라이브러리가 해 줍니다.
다음 편