장애물 지도와 경로 계획
로봇 크기를 반영한 격자 탐색 경로를 만들고 제어기로 추종합니다.
진도 0%
레슨
- 격자와 로봇 반경
0.1m 해상도 지도에서 반경 0.15m와 여유 0.05m로 장애물을 팽창합니다.
- 큐·방문 집합과 BFS
4방향 격자에서 최단 경로와 경로 없음 결과를 계산합니다.
- 경로 점과 속도 제한
격자 중심을 map 좌표로 변환하고 회전 구간의 속도 제한을 계산합니다.
- 경로 추종과 충돌 확인
각 경로 점을 목표 제어기에 연결하고 이동 구간 전체의 충돌을 검사합니다.
장애물 지도와 경로 계획 미션
m06-motion-control 미션 solution 전체를 포함한 starter에서 NavigationActions를 확장합니다. 기존 액션·목표점 제어·C HAL 코드는 보존하고 planning.py의 부모 연결과 이동 구간 검사 TODO를 완성합니다.
요구사항
- 지도→팽창→BFS→경로 점→m06 제어의 파이프라인을 추가합니다.
- 시작과 목표가 막힌 경우·경로가 없는 경우에 액션을 실패로 끝내고 정지합니다.
- 점 위치만이 아니라 이전 자세와 새 자세 사이 이동 구간도 로봇 원형 몸체 기준으로 충돌 검사합니다.
- planning_config.json의 해상도 0.1m·몸체 반경 0.15m·계획 여유 0.05m·경유점 반경 0.025m·원점 (-0.35,-0.35)m·직선/코너 상한 0.30/0.10m/s를 설명합니다.
- 상수 명령 원호와 현의 차이 상한 |v·w|·dt²/8을 몸체 반경에 추가하여 HAL 이동 전에 검사하고 실제 이동 로그를 재확인합니다.
- 종점 0 속도 표식과 접근 명령을 구별하며 취소·HAL 결함·60초 시간 초과를 정지로 종료합니다.
완료 기준
- 열린 지도·우회 지도에서 60초 이내 도달하고 충돌 횟수가 0입니다.
- 막힌 목표와 좁은 통로 fixture에서 PATH_NOT_FOUND와 정지를 확인합니다.
- 같은 지도와 이웃 탐색 순서로 재실행하면 경로 셀 목록이 같습니다.
- bash check.sh 한 줄로 이전 회귀·새 경로 테스트 24개·네 fixture가 실행되며 starter는 AssertionError로 실패하고 solution은 전부 통과합니다.
- 끝점 둘은 안전하지만 중간에 장애물을 관통하는 선분과 접선 접촉을 충돌로 검출합니다.
- 사전 충돌 위험 차단은 prevented_segments에, 실제 기록 구간 검사의 충돌 수는 collisions에 구분해 보고합니다.
bash check.sh미션 시작 코드
모범 답안
모범 답안 내려받기검토 기준
- 입력·단위·실패 조건과 변경 이유를 설명합니다.
- 이전 모듈의 회귀 테스트와 이번 실험 근거를 함께 제출합니다.