Action 실습 연습문제 정답
시행일·최종 수정일: 2026년 9월 1일
정답을 보기 전에
먼저 각 문제에 자신의 말로 답해본 뒤 해설과 비교해 보세요. 표현이 달라도 핵심 개념과 계산 과정이 맞으면 정답으로 볼 수 있습니다.
1. Topic, Service와 비교하여 Action이 적합한 요구사항 세 가지를 쓰세요.
정답과 해설
작업이 여러 제어 주기에 걸쳐 실행되고, 중간 진행 상황이 필요하며, 실행 중 취소와 성공·취소·중단의 최종 상태 구분이 필요한 경우입니다. Navigation과 관절 궤적 추종이 대표적입니다.
2. .action 파일에서 Goal, Result, Feedback의 순서와 구분자를 설명하세요.
정답과 해설
첫 번째 --- 위는 Goal, 두 구분선 사이는 Result, 마지막은 Feedback입니다. 즉 Goal → Result → Feedback 순서입니다.
3. Goal이 ACCEPTED되었다는 것과 SUCCEEDED의 차이는 무엇인가요?
정답과 해설
ACCEPTED는 Server가 Goal 실행을 시작해도 좋다고 판단했다는 뜻입니다. SUCCEEDED는 실행을 마친 뒤 실제 목표를 정상 달성했다는 최종 상태입니다.
4. REJECTED, CANCELED와 ABORTED가 각각 발생하는 예를 드세요.
정답과 해설
범위를 벗어난 Goal이나 Busy 상태에서 실행 전 거절하면 REJECTED, 사용자의 Cancel 요청을 받아 안전하게 정지하면 CANCELED, 실행 중 장애물·Odometry 손실 등으로 완료할 수 없으면 ABORTED입니다.
5. ros2 action list -t, type, info, interface show, send_goal --feedback의 역할을 설명하세요.
정답과 해설
list -t는 이름과 Type, type은 특정 Action의 Type, info는 Server·Client 수를 확인합니다. interface show는 Goal·Result·Feedback 구조, send_goal --feedback은 Goal을 전송하고 진행 상황을 표시합니다.
6. Cancel 요청이 수락된 직후 바로 canceled()로 끝내면 실제 Robot에서 위험할 수 있는 이유는 무엇인가요?
정답과 해설
Protocol 상태만 CANCELED가 되고 Actuator가 마지막 명령을 계속 실행할 수 있기 때문입니다. 감속·0 명령 발행과 실제 정지를 확인한 뒤 최종 상태를 확정해야 합니다.
7. Server가 Goal의 NaN, Infinity와 범위를 검사해야 하는 이유는 무엇인가요?
정답과 해설
NaN은 일반 대소 비교를 우회할 수 있고 Infinity는 물리적으로 실행할 수 없습니다. 유한값과 Hardware 허용 범위를 확인하지 않으면 위험한 속도나 계산 오류가 Actuator까지 전달될 수 있습니다.
8. 동시 Goal 처리 정책 네 가지와 각각 적합한 예를 쓰세요.
정답과 해설
실행 중 새 Goal을 거절하는 Reject는 Calibration, 순서대로 처리하는 Queue는 Batch 작업, 기존 Goal을 취소하는 Preemption은 목적지 변경, Parallel은 서로 독립된 자원을 쓰는 작업에 적합합니다.
9. Preemption에서 기존 Goal의 실제 정지를 확인한 뒤 새 Goal을 실행해야 하는 이유는 무엇인가요?
정답과 해설
기존 Callback이 Motor 명령을 계속 발행하는 동안 새 Goal이 명령을 보내면 두 실행이 Actuator 소유권을 두고 충돌합니다. 정지와 자원 해제를 확인한 뒤 소유권을 넘겨야 결정적인 동작이 됩니다.
10. MultiThreadedExecutor가 있어도 Cancel Callback이 실행되지 않을 수 있는 이유는 무엇인가요?
정답과 해설
Action Entity가 모두 같은 Mutually Exclusive Callback Group에 있거나 실행 Callback이 Lock을 오래 보유하면 Thread가 남아도 Cancel Callback이 진행하지 못합니다. Callback Group 구성, Blocking 작업과 공유 Lock을 함께 점검해야 합니다.
11. 학습용 속도 × 시간 적분 대신 실제 Robot에서 Odometry를 사용해야 하는 이유는 무엇인가요?
정답과 해설
Wheel Slip, Battery 상태, 하중과 제어 오차 때문에 명령 속도와 실제 이동이 다릅니다. Encoder와 Sensor를 반영한 Odometry 또는 Localization Pose로 실제 진행량을 측정해야 합니다.
12. 여러 Node가 /cmd_vel에 직접 발행할 때 생기는 문제와 해결 구조를 설명하세요.
정답과 해설
도착 순서에 따라 Navigation, Joystick과 Action 명령이 섞여 Command Owner가 비결정적입니다. Source별 Topic에 발행하고 Velocity Mux가 Priority·Timeout으로 선택한 뒤 Safety Filter와 Driver로 전달합니다.
13. Discovery, Progress, Overall Timeout과 Driver Watchdog의 차이를 설명하세요.
정답과 해설
Discovery는 Server 발견 대기, Progress는 Feedback이나 실제 진행 갱신, Overall은 임무 전체의 제한시간입니다. Driver Watchdog는 새 Actuator 명령이 끊기면 하위 계층이 독립적으로 정지시키는 보호 기능입니다.
14. Nav2의 NavigateToPose가 Service보다 Action에 적합한 이유는 무엇인가요?
정답과 해설
목적지 주행은 여러 초에서 수분간 계속되며 거리·예상 시간 같은 Feedback이 필요합니다. 사용자나 상위 Planner가 목적지를 취소·변경할 수 있고 성공·취소·실패 Result를 구분해야 합니다.
15. 취소 후에도 Robot이 움직일 때 Action Callback부터 Motor Driver까지 진단 순서를 설명하세요.
정답과 해설
Cancel Callback 수신과 수락, 실행 Loop의 Cancel Flag 확인, 0 속도 발행을 순서대로 확인합니다. 이어 Velocity Mux의 Source·Priority·Timeout, Safety Filter 출력, Driver가 받은 명령과 Command Watchdog, 실제 Motor Disable 상태를 조사합니다.
학습 마무리
틀린 문제는 강의의 관련 장을 다시 읽고, 용어뿐 아니라 각 개념이 실제 로봇에서 어떤 역할을 하는지 설명해 보세요.