2025 국방AI 경진대회 - 자율주행 정찰로봇을 통한 작전 지역 내 경로 완주, 장애물 회피 및 정찰 탐지
- 발표 평가 (20점): 문제 이해도, 모델 완성도, 발표 및 답변
- 임무 평가 (80점): 정찰로봇의 자율주행, 객체인식, 통신보고
- 하드웨어 교체/분해/개조 금지
- 가상환경 및 클라우드 기반 환경 사용 제한 (생성형 AI 도구 활용 가능)
- 데이터 공유, 장비 교환, 기술적 협력 금지
- 드론: 사전 제공된 스마트폰과 공식 앱만 사용, 자동 피사체 추적 및 AI 기능 사용 금지
- 목표: 출발지점 → 도착지점까지 자율주행
- 체크포인트: 3곳 통과 필수
- 평가 기준:
- 체크포인트 통과 여부 (점수 누적)
- 총 주행 시간 (순위 산정)
- 복귀 규칙: 수행 불능 상태 시 복귀지점으로 이동하여 재주행 가능 (1회, 감점)
- 목표: 피아식별 코드(QR/ArUco) 인식
- 행동: 정찰로봇의 LED 장치에 패턴 표시
- 목표: 포트홀, 지반 함몰 등 장애물 인식 및 회피
- 평가: 회피 정도에 따라 점수 부여
- 목표: 각 지점에 위치한 객체 탐지 및 분류
- 객체 종류: 미사일, 위험물, 박격포, 전차, 적군, 탄약상자 등
- 행동: 분류된 객체 종류 및 수량을 서버(작전현황대시보드)에 전송
- 평가: 객체 인식 정확도에 따라 점수 부여
- 프로세스:
- 드론으로 경기장 이미지 수집
- AI 모델 추론을 통해 화재건물 위치 정보 추출
- 정찰로봇에 화재건물 위치 전달
- 정찰로봇이 화재건물 위치로 이동 후 이미지 캡처
- 서버로 이미지 데이터 전송
- 평가: 정보의 정확도에 따라 점수 부여
- 목표: 체크포인트 통과 여부를 서버에 실시간 전송
- 체크포인트 구간: 지정된 3곳
| 항목 | 사양 |
|---|---|
| 크기 | 폭 210 × 길이 270 × 높이 180 (mm) |
| 무게 | 2.5kg |
| AI보드 | NVIDIA Jetson Nano Developer Kit - GPU: NVIDIA CUDA Core - CPU: Quad-core ARM Cortex-A57 - Memory: 4GB 64bit - Storage: micro SD (64GB 포함) |
| 제어기 | MCU STM32 Cortex-M0, 32bit MOTOR DRIVER - IMU Sensor |
| 카메라 | 8M Pixels IMX219 (CSI Interface) |
| 모터 | DC Geared Encoder Motor, 12V, 140rpm(max) |
| LED | WS2812 8Bit LED × 2개, 4×4Bit LED 1개 |
| 배터리 | 12V 3S2P, 18650 Battery 6700mAh |
| 디스플레이 | OLED (1.3inch, I2C) |
| 작동시간 | 약 3시간 (충전시간 약 5시간) |
| 기구재질 | 전차(Metal), 무한궤도(Carbon Steel) |
| 항목 | 사양 |
|---|---|
| 구성 | DJI Neo 1대, 배터리 2대, 충전케이블 1개, 스마트폰(안드로이드) |
| 무게 | 약 135g |
| 크기 | 130 × 157 × 48.5 (mm) |
| 비행시간 | 약 15분 내외 |
| 카메라 | 8.0mm(1/2") 이미지센서, 117.6도 |
| 사진파일형식 | JPEG, 12MP |
| 짐벌 | 1축 전동식 짐벌(틸트), |
| 제어방식 | 스마트폰(안드로이드) |
- 크기: 가로 500 × 세로 3.510 (m)
- 주요 구간: 출발/도착, 직진, 교차로, 곡선, 장애물 구간
- 체크포인트: 3곳
- 객체 구간: 23곳 (고정)
- 장애물(포트홀): 2곳 (고정)
| 항목 | 사양 |
|---|---|
| 개발언어 | Python 3.8 |
| 운영체제 | Ubuntu 18.04 |
| NVIDIA SDK | Jetpack 4.6.1 |
| 라이브러리 | PyTorch 1.11.0 TorchVision 0.12.0 ultralytics 8.3.20 (yolov8n) OpenCV 4.9.0 |
| 에디터 | Jupyter-Lab 4.2.5 |
| Robot API | WingBot Robot API (tiki.mini) |
| 항목 | 사양 |
|---|---|
| 개발언어 | Python 3.11.4 |
| 운영체제 | Windows 10 Pro 이상 |
| IDE | Visual Studio Code |
| 라이브러리 | ultralytics 8.3.23 (yolov8n) |
| 이미지라벨링 | labelImg (windows_v1.8.1) |
목적: Jetson Nano CSI 카메라 실시간 스트리밍
- 기술: GStreamer 파이프라인 → OpenCV → ipywidgets
- 해상도: 320×240, 60fps
- 기능: 상하 반전 (
cv2.flip(frame, 0)) - 활용: 실시간 영상 확인 및 디버깅
목적: HSV 색 공간 변환 및 색상 필터링
- 기술: RGB → HSV 변환,
cv2.inRange()마스킹 - 예시: 초록색 범위 추출 (H: 40-80, S: 40-255, V: 40-255)
- 활용: 특정 색상 객체 탐지 (라인, 표지판 등)
목적: 그레이스케일 변환 및 임계값 기반 라인 추출
- 기술: BGR → Gray,
cv2.threshold()(임계값: 180) - 활용: 흰색 라인 인식 (차선 인식 기초)
목적: 가우시안 블러를 통한 노이즈 제거 후 라인 추출
- 기술:
cv2.GaussianBlur()(5×5 커널) → 임계값 처리 - 활용: 노이즈가 많은 환경에서의 라인 인식 개선
목적: 관심 영역(ROI) 설정을 통한 처리 영역 제한
- 기술: 이미지 크롭 (하단 40%, 좌우 25-75%)
- 활용: 처리 속도 향상, 오검출 감소
목적: 라인 중심 좌표 계산 및 좌우 판단
- 기술: HSV 기반 흰색 마스킹 →
np.where()좌표 추출 → 중심 계산 - 로직:
- 라인 중심 X값 vs ROI 중앙 X값 비교
- ±10 픽셀 오차 범위로 "left/right/center" 판단
- 활용: 자율주행 조향 제어의 핵심 로직
목적: 저품질 스트리밍 (대역폭 최적화)
- 기술: JPEG 품질 30으로 인코딩
- 활용: 네트워크 전송 시 지연 최소화
목적: 실시간 스트림에서 이미지 캡처
- 기술: ipywidgets Button + 전역 프레임 저장
- 활용: 데이터 수집, 디버깅
목적: WingBot Robot API 종합 예제
- 주요 기능:
- 배터리:
get_battery_voltage(),get_current() - OLED:
log(),log_clear() - LED:
set_led(direction, index, R, G, B) - IMU:
get_imu()(X, Y, Z 가속도) - 모터 제어:
- 모드 설정:
set_motor_mode(MOTOR_MODE_PWM/PID) - 단일 제어:
set_motor_power(MOTOR_LEFT/RIGHT, rpm) - 복합 제어:
forward(),backward(),clockwise(),counter_clockwise(),stop()
- 모드 설정:
- 인코더:
get_encoder(MOTOR_LEFT/RIGHT)
- 배터리:
목적: 상단 16-bit LED 패턴 제어
- 기술: LED 인덱스 배열을 통한 패턴 표시 (X, O, #)
- 활용: 상태 표시, 아군 표식 패턴 출력
목적: QR 코드 인식
- 기술:
cv2.QRCodeDetector().detectAndDecode() - 최적화: 3프레임마다 검사 (부하 감소)
- 활용: 피아식별 코드 인식, 체크포인트 인식
목적: ArUco 마커 인식
- 기술:
cv2.aruco(DICT_4X4_50) - 호환성: OpenCV 버전별 API 폴백 처리
- 활용: 피아식별 마커 인식, 위치 추적
필수 기술 스택:
- 카메라 스트리밍 (GStreamer)
- HSV/그레이스케일 변환
- 가우시안 블러 (노이즈 제거)
- ROI 설정 (처리 영역 최적화)
- 임계값 처리 (이진화)
- 라인 중심 좌표 계산
- PID 제어 (조향)
구현 흐름:
카메라 프레임 → ROI 크롭 → HSV/그레이 변환 → 가우시안 블러
→ 임계값 처리 → 마스킹 → np.where() 좌표 추출
→ 중심 X 계산 → PID 제어 → 모터 제어
필수 기술 스택:
- Ultralytics YOLOv8n
- 데이터 라벨링 (LabelImg)
- 모델 학습 (PyTorch)
- 실시간 추론 (Jetson Nano 최적화)
객체 클래스:
- 미사일, 위험물, 박격포, 전차, 적군, 탄약상자 등
구현 흐름:
데이터 수집 → 라벨링 (YOLO 포맷) → 데이터셋 구성 (train/val)
→ data.yaml 생성 → 모델 학습 (전이학습) → best.pt 저장
→ Jetson Nano 최적화 → 실시간 추론 → JSON 전송
필수 기술 스택:
- OpenCV QRCodeDetector
- OpenCV ArUco
- LED 패턴 제어
활용:
- 피아식별 코드 인식 → LED 패턴 표시
- 체크포인트 인식 → 위치 보고
필수 기술 스택:
- JSON 데이터 전송
- 이미지 버퍼 전송
- 서버 API 연동
전송 데이터:
- 객체 인식 결과 (종류, 수량)
- 체크포인트 통과 여부
- 화재건물 이미지
-
Jetson Nano 설정
- Ubuntu 18.04, Jetpack 4.6.1
- Python 3.8, Jupyter Lab
- OpenCV, PyTorch, Ultralytics 설치
-
로봇 API 테스트
- 배터리, OLED, LED, IMU, 모터 기본 동작 확인
- PWM/PID 모드 테스트
-
카메라 스트리밍
- GStreamer 파이프라인 설정
- 실시간 프레임 처리 파이프라인 구축
-
라인 인식 파이프라인
- ROI 설정 (하단 40%, 중앙 영역)
- HSV/그레이 변환 → 가우시안 블러 → 임계값 처리
- 라인 중심 좌표 계산
-
PID 제어
- 라인 중심과 프레임 중심의 오차 계산
- PID 파라미터 튜닝 (Kp, Ki, Kd)
- 모터 제어 (좌우 차등 속도)
-
체크포인트 인식
- QR/ArUco 마커 인식
- 서버에 통과 여부 전송
-
데이터 수집
- 카메라로 객체 이미지 캡처
- 다양한 각도, 조명 조건 수집
-
데이터 라벨링
- LabelImg로 YOLO 포맷 라벨링
- 클래스: 미사일, 위험물, 박격포, 전차, 적군, 탄약상자
-
모델 학습
- YOLOv8n 전이학습
- epochs, batch size, 이미지 크기 튜닝
- mAP50, mAP50-95 모니터링
-
모델 최적화
- Jetson Nano에서 추론 속도 최적화
- TensorRT 변환 (선택)
-
실시간 추론
- 카메라 프레임 → YOLO 추론
- 객체 종류 및 수량 집계
- JSON 형식으로 서버 전송
-
멀티태스킹
- 자율주행 + 객체인식 동시 처리
- 우선순위 관리 (자율주행 > 객체인식)
-
장애물 회피
- 객체인식으로 포트홀 탐지
- 경로 재계산 및 회피 알고리즘
-
드론 연동
- 드론 이미지 수신
- 화재건물 추론 (YOLO)
- 정찰로봇에 위치 정보 전달
-
성능 최적화
- 프레임 스킵 (객체인식은 3프레임마다)
- ROI 최적화
- JPEG 품질 조정
-
단위 테스트
- 각 모듈별 독립 테스트
- 예외 처리 및 에러 핸들링
-
통합 테스트
- 전체 파이프라인 테스트
- 실제 경기장 환경 시뮬레이션
-
로그 및 모니터링
- OLED/콘솔 로그 출력
- LED 상태 표시
- 배터리 모니터링
- 체크포인트 통과율: 100% 목표
- 주행 시간: 최소화 (순위 산정)
- 라인 추종 정확도: ±10 픽셀 이내
- mAP50: 0.8 이상 목표
- 추론 속도: 10 FPS 이상 (Jetson Nano)
- 오검출률: 최소화
- 전송 지연: 100ms 이하
- 데이터 정확도: 100%
-
하드웨어 제약
- 하드웨어 교체/분해/개조 금지
- 배터리 관리 (9V 이하 저전압 경고)
-
소프트웨어 제약
- 가상환경/클라우드 사용 제한
- 생성형 AI 도구 활용 가능
-
드론 제약
- 공식 앱만 사용
- 자동 피사체 추적/AI 기능 사용 금지
-
공정성
- 데이터 공유, 장비 교환 금지
- 위반 시 실격 처리
- Ultralytics YOLOv8: https://docs.ultralytics.com/
- OpenCV 문서: https://docs.opencv.org/
- Jetson Nano 개발자 가이드: NVIDIA 공식 문서
- LabelImg: https://github.com/HumanSignal/labelImg
이 프로젝트는 자율주행, 컴퓨터 비전, AI 모델 학습, 로봇 제어를 통합한 복합 시스템입니다.
성공을 위한 핵심 요소:
- 안정적인 라인 추종: PID 제어 튜닝이 핵심
- 정확한 객체 인식: 충분한 데이터 수집 및 라벨링
- 실시간 처리: Jetson Nano 성능 최적화
- 견고한 통신: 서버 연동 및 에러 핸들링
- 통합 테스트: 전체 파이프라인 사전 검증
우선순위:
- 자율주행 (기본 기능)
- 객체인식 (점수 확보)
- 통신보고 (필수 요구사항)
- 최적화 (성능 향상)