서비스·액션과 이동 작업 상태
짧은 요청과 진행·취소가 있는 작업을 구분해 이동 명령 인터페이스를 만듭니다.
진도 0%
레슨
- 토픽·서비스·액션 선택
센서 스트림·설정 조회·목표 이동에 맞는 통신 계약과 이유를 제출합니다.
- 요청·응답과 오류
설정 조회 요청에서 알 수 없는 키와 정상 응답을 판정합니다.
- 목표·피드백·결과
이동 작업의 대기·실행·성공·실패·취소 전이를 구현합니다.
- 취소와 정지 연결
Python 가상 액션 취소를 C HAL 정지 요청으로 연결합니다.
서비스·액션과 이동 작업 상태 미션
m04-topic-contract 미션 solution 전체를 이어받은 starter에서 기존 C HAL·센서·좌표·토픽 검사를 보존하며 action_runtime.py의 정지 연결과 동일 id 판정을 완성합니다.
요구사항
- 목표 id와 좌표·프레임을 갖는 요청, 거리 피드백, 최종 결과의 스키마를 추가합니다.
- 음수 제한 속도와 알 수 없는 프레임의 목표를 거절합니다.
- ROS 2 서비스와 액션의 개념 대응표를 만들고 실제 rclpy 통신 검증은 후속으로 표시합니다.
- ACTION-CONTRACT.md의 스키마·전이·단위·PC/ROS 2 대응을 읽고 변경 이유와 실행 로그를 제출합니다. map 위치 주입과 고정 PWM은 통신 fixture이며 실제 이동 제어는 m06에서 추가합니다.
- 취소 접수는 CANCELING, C HAL 정지 호출과 출력 확인 뒤 CANCELED입니다. HAL 결함은 ABORTED/HAL_FAULT로 남기며 성공·실패 종료도 출력 0을 확인합니다.
완료 기준
- 같은 목표 id의 중복 요청이 두 작업을 만들지 않습니다.
- 실행 중 취소하면 다음 가상 0.05초 tick까지 모터 출력이 0이고 결과가 CANCELED입니다.
- 완료 후 취소와 잘못된 상태 전이가 기존 결과를 변경하지 않습니다.
- 동일 id·다른 목표 내용은 CONFLICT, 활성 목표가 있을 때 다른 id는 BUSY이며 기존 목표를 변경하지 않습니다.
- bash check.sh에서 C 44개·기존 Python 61개·전체 Python 81개 검사가 통과합니다. bash action_demo.sh에서 취소 다음 tick의 PWM=(0.0, 0.0)을 확인합니다.
- map 외 프레임, 비유한 좌표, bool 숫자, [0,0.5] 밖 속도 상한을 거절합니다. 가상 0.05초는 벽시계 및 실물 정지 보장이 아닙니다.
bash check.sh미션 시작 코드
모범 답안
모범 답안 내려받기검토 기준
- 입력·단위·실패 조건과 변경 이유를 설명합니다.
- 이전 모듈의 회귀 테스트와 이번 실험 근거를 함께 제출합니다.