Skip to content

Latest commit

 

History

History
428 lines (338 loc) · 13.8 KB

File metadata and controls

428 lines (338 loc) · 13.8 KB

2025 국방AI 경진대회 프로젝트 종합 분석

📋 목차

  1. 대회 개요
  2. 임무 분석
  3. 하드웨어 구성
  4. 소프트웨어 스택
  5. 샘플 코드 분석
  6. 핵심 기술 요구사항
  7. 구현 전략

🎯 대회 개요

대회 목적

2025 국방AI 경진대회 - 자율주행 정찰로봇을 통한 작전 지역 내 경로 완주, 장애물 회피 및 정찰 탐지

평가 구성

  • 발표 평가 (20점): 문제 이해도, 모델 완성도, 발표 및 답변
  • 임무 평가 (80점): 정찰로봇의 자율주행, 객체인식, 통신보고

주요 제약사항

  • 하드웨어 교체/분해/개조 금지
  • 가상환경 및 클라우드 기반 환경 사용 제한 (생성형 AI 도구 활용 가능)
  • 데이터 공유, 장비 교환, 기술적 협력 금지
  • 드론: 사전 제공된 스마트폰과 공식 앱만 사용, 자동 피사체 추적 및 AI 기능 사용 금지

🎯 임무 분석

1. 자율주행 (구간 주행)

  • 목표: 출발지점 → 도착지점까지 자율주행
  • 체크포인트: 3곳 통과 필수
  • 평가 기준:
    • 체크포인트 통과 여부 (점수 누적)
    • 총 주행 시간 (순위 산정)
  • 복귀 규칙: 수행 불능 상태 시 복귀지점으로 이동하여 재주행 가능 (1회, 감점)

2. 객체인식

2.1 아군 표식

  • 목표: 피아식별 코드(QR/ArUco) 인식
  • 행동: 정찰로봇의 LED 장치에 패턴 표시

2.2 장애물 회피

  • 목표: 포트홀, 지반 함몰 등 장애물 인식 및 회피
  • 평가: 회피 정도에 따라 점수 부여

2.3 정찰탐지

  • 목표: 각 지점에 위치한 객체 탐지 및 분류
  • 객체 종류: 미사일, 위험물, 박격포, 전차, 적군, 탄약상자 등
  • 행동: 분류된 객체 종류 및 수량을 서버(작전현황대시보드)에 전송
  • 평가: 객체 인식 정확도에 따라 점수 부여

3. 통신보고

3.1 목표추적

  • 프로세스:
    1. 드론으로 경기장 이미지 수집
    2. AI 모델 추론을 통해 화재건물 위치 정보 추출
    3. 정찰로봇에 화재건물 위치 전달
    4. 정찰로봇이 화재건물 위치로 이동 후 이미지 캡처
    5. 서버로 이미지 데이터 전송
  • 평가: 정보의 정확도에 따라 점수 부여

3.2 위치보고

  • 목표: 체크포인트 통과 여부를 서버에 실시간 전송
  • 체크포인트 구간: 지정된 3곳

🔧 하드웨어 구성

정찰로봇 (WingBot)

항목 사양
크기 폭 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)

항목 사양
구성 DJI Neo 1대, 배터리 2대, 충전케이블 1개, 스마트폰(안드로이드)
무게 약 135g
크기 130 × 157 × 48.5 (mm)
비행시간 약 15분 내외
카메라 8.0mm(1/2") 이미지센서, 117.6도
사진파일형식 JPEG, 12MP
짐벌 1축 전동식 짐벌(틸트), 90도60도
제어방식 스마트폰(안드로이드)

경기장

  • 크기: 가로 500 × 세로 3.510 (m)
  • 주요 구간: 출발/도착, 직진, 교차로, 곡선, 장애물 구간
  • 체크포인트: 3곳
  • 객체 구간: 23곳 (고정)
  • 장애물(포트홀): 2곳 (고정)

💻 소프트웨어 스택

정찰로봇 (Jetson Nano)

항목 사양
개발언어 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)

개발PC (선택사항)

항목 사양
개발언어 Python 3.11.4
운영체제 Windows 10 Pro 이상
IDE Visual Studio Code
라이브러리 ultralytics 8.3.23 (yolov8n)
이미지라벨링 labelImg (windows_v1.8.1)

📝 샘플 코드 분석

Sample Code (1) - 비전 기초 및 라인 인식

1. 01_robot_camera_stream.ipynb

목적: Jetson Nano CSI 카메라 실시간 스트리밍

  • 기술: GStreamer 파이프라인 → OpenCV → ipywidgets
  • 해상도: 320×240, 60fps
  • 기능: 상하 반전 (cv2.flip(frame, 0))
  • 활용: 실시간 영상 확인 및 디버깅

2. 02_color_hsv.ipynb

목적: HSV 색 공간 변환 및 색상 필터링

  • 기술: RGB → HSV 변환, cv2.inRange() 마스킹
  • 예시: 초록색 범위 추출 (H: 40-80, S: 40-255, V: 40-255)
  • 활용: 특정 색상 객체 탐지 (라인, 표지판 등)

3. 03_line_gray.ipynb

목적: 그레이스케일 변환 및 임계값 기반 라인 추출

  • 기술: BGR → Gray, cv2.threshold() (임계값: 180)
  • 활용: 흰색 라인 인식 (차선 인식 기초)

4. 04_line_gaussian.ipynb

목적: 가우시안 블러를 통한 노이즈 제거 후 라인 추출

  • 기술: cv2.GaussianBlur() (5×5 커널) → 임계값 처리
  • 활용: 노이즈가 많은 환경에서의 라인 인식 개선

5. 05_line_roi.ipynb

목적: 관심 영역(ROI) 설정을 통한 처리 영역 제한

  • 기술: 이미지 크롭 (하단 40%, 좌우 25-75%)
  • 활용: 처리 속도 향상, 오검출 감소

6. 06_line_where.ipynb

목적: 라인 중심 좌표 계산 및 좌우 판단

  • 기술: HSV 기반 흰색 마스킹 → np.where() 좌표 추출 → 중심 계산
  • 로직:
    • 라인 중심 X값 vs ROI 중앙 X값 비교
    • ±10 픽셀 오차 범위로 "left/right/center" 판단
  • 활용: 자율주행 조향 제어의 핵심 로직

Sample Code (2) - 로봇 제어 및 마커 인식

1. 01_robot_camera_stream_lowquality.ipynb

목적: 저품질 스트리밍 (대역폭 최적화)

  • 기술: JPEG 품질 30으로 인코딩
  • 활용: 네트워크 전송 시 지연 최소화

2. 02_robot_camera_capture.ipynb

목적: 실시간 스트림에서 이미지 캡처

  • 기술: ipywidgets Button + 전역 프레임 저장
  • 활용: 데이터 수집, 디버깅

3. 03_robot_api.ipynb

목적: 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)

4. 03_robot_led_top.ipynb

목적: 상단 16-bit LED 패턴 제어

  • 기술: LED 인덱스 배열을 통한 패턴 표시 (X, O, #)
  • 활용: 상태 표시, 아군 표식 패턴 출력

5. 04_robot_camera_qrcode.ipynb

목적: QR 코드 인식

  • 기술: cv2.QRCodeDetector().detectAndDecode()
  • 최적화: 3프레임마다 검사 (부하 감소)
  • 활용: 피아식별 코드 인식, 체크포인트 인식

6. 05_robot_camera_aruco.ipynb

목적: ArUco 마커 인식

  • 기술: cv2.aruco (DICT_4X4_50)
  • 호환성: OpenCV 버전별 API 폴백 처리
  • 활용: 피아식별 마커 인식, 위치 추적

🎯 핵심 기술 요구사항

1. 자율주행 (차선 인식)

필수 기술 스택:

  • 카메라 스트리밍 (GStreamer)
  • HSV/그레이스케일 변환
  • 가우시안 블러 (노이즈 제거)
  • ROI 설정 (처리 영역 최적화)
  • 임계값 처리 (이진화)
  • 라인 중심 좌표 계산
  • PID 제어 (조향)

구현 흐름:

카메라 프레임 → ROI 크롭 → HSV/그레이 변환 → 가우시안 블러 
→ 임계값 처리 → 마스킹 → np.where() 좌표 추출 
→ 중심 X 계산 → PID 제어 → 모터 제어

2. 객체인식 (YOLOv8)

필수 기술 스택:

  • Ultralytics YOLOv8n
  • 데이터 라벨링 (LabelImg)
  • 모델 학습 (PyTorch)
  • 실시간 추론 (Jetson Nano 최적화)

객체 클래스:

  • 미사일, 위험물, 박격포, 전차, 적군, 탄약상자 등

구현 흐름:

데이터 수집 → 라벨링 (YOLO 포맷) → 데이터셋 구성 (train/val)
→ data.yaml 생성 → 모델 학습 (전이학습) → best.pt 저장
→ Jetson Nano 최적화 → 실시간 추론 → JSON 전송

3. 마커 인식 (QR/ArUco)

필수 기술 스택:

  • OpenCV QRCodeDetector
  • OpenCV ArUco
  • LED 패턴 제어

활용:

  • 피아식별 코드 인식 → LED 패턴 표시
  • 체크포인트 인식 → 위치 보고

4. 통신보고

필수 기술 스택:

  • JSON 데이터 전송
  • 이미지 버퍼 전송
  • 서버 API 연동

전송 데이터:

  • 객체 인식 결과 (종류, 수량)
  • 체크포인트 통과 여부
  • 화재건물 이미지

🚀 구현 전략

Phase 1: 기초 환경 구축

  1. Jetson Nano 설정

    • Ubuntu 18.04, Jetpack 4.6.1
    • Python 3.8, Jupyter Lab
    • OpenCV, PyTorch, Ultralytics 설치
  2. 로봇 API 테스트

    • 배터리, OLED, LED, IMU, 모터 기본 동작 확인
    • PWM/PID 모드 테스트
  3. 카메라 스트리밍

    • GStreamer 파이프라인 설정
    • 실시간 프레임 처리 파이프라인 구축

Phase 2: 자율주행 구현

  1. 라인 인식 파이프라인

    • ROI 설정 (하단 40%, 중앙 영역)
    • HSV/그레이 변환 → 가우시안 블러 → 임계값 처리
    • 라인 중심 좌표 계산
  2. PID 제어

    • 라인 중심과 프레임 중심의 오차 계산
    • PID 파라미터 튜닝 (Kp, Ki, Kd)
    • 모터 제어 (좌우 차등 속도)
  3. 체크포인트 인식

    • QR/ArUco 마커 인식
    • 서버에 통과 여부 전송

Phase 3: 객체인식 구현

  1. 데이터 수집

    • 카메라로 객체 이미지 캡처
    • 다양한 각도, 조명 조건 수집
  2. 데이터 라벨링

    • LabelImg로 YOLO 포맷 라벨링
    • 클래스: 미사일, 위험물, 박격포, 전차, 적군, 탄약상자
  3. 모델 학습

    • YOLOv8n 전이학습
    • epochs, batch size, 이미지 크기 튜닝
    • mAP50, mAP50-95 모니터링
  4. 모델 최적화

    • Jetson Nano에서 추론 속도 최적화
    • TensorRT 변환 (선택)
  5. 실시간 추론

    • 카메라 프레임 → YOLO 추론
    • 객체 종류 및 수량 집계
    • JSON 형식으로 서버 전송

Phase 4: 통합 및 최적화

  1. 멀티태스킹

    • 자율주행 + 객체인식 동시 처리
    • 우선순위 관리 (자율주행 > 객체인식)
  2. 장애물 회피

    • 객체인식으로 포트홀 탐지
    • 경로 재계산 및 회피 알고리즘
  3. 드론 연동

    • 드론 이미지 수신
    • 화재건물 추론 (YOLO)
    • 정찰로봇에 위치 정보 전달
  4. 성능 최적화

    • 프레임 스킵 (객체인식은 3프레임마다)
    • ROI 최적화
    • JPEG 품질 조정

Phase 5: 테스트 및 디버깅

  1. 단위 테스트

    • 각 모듈별 독립 테스트
    • 예외 처리 및 에러 핸들링
  2. 통합 테스트

    • 전체 파이프라인 테스트
    • 실제 경기장 환경 시뮬레이션
  3. 로그 및 모니터링

    • OLED/콘솔 로그 출력
    • LED 상태 표시
    • 배터리 모니터링

📊 핵심 성능 지표

자율주행

  • 체크포인트 통과율: 100% 목표
  • 주행 시간: 최소화 (순위 산정)
  • 라인 추종 정확도: ±10 픽셀 이내

객체인식

  • mAP50: 0.8 이상 목표
  • 추론 속도: 10 FPS 이상 (Jetson Nano)
  • 오검출률: 최소화

통신보고

  • 전송 지연: 100ms 이하
  • 데이터 정확도: 100%

⚠️ 주의사항

  1. 하드웨어 제약

    • 하드웨어 교체/분해/개조 금지
    • 배터리 관리 (9V 이하 저전압 경고)
  2. 소프트웨어 제약

    • 가상환경/클라우드 사용 제한
    • 생성형 AI 도구 활용 가능
  3. 드론 제약

    • 공식 앱만 사용
    • 자동 피사체 추적/AI 기능 사용 금지
  4. 공정성

    • 데이터 공유, 장비 교환 금지
    • 위반 시 실격 처리

📚 참고 자료


🎯 결론

이 프로젝트는 자율주행, 컴퓨터 비전, AI 모델 학습, 로봇 제어를 통합한 복합 시스템입니다.

성공을 위한 핵심 요소:

  1. 안정적인 라인 추종: PID 제어 튜닝이 핵심
  2. 정확한 객체 인식: 충분한 데이터 수집 및 라벨링
  3. 실시간 처리: Jetson Nano 성능 최적화
  4. 견고한 통신: 서버 연동 및 에러 핸들링
  5. 통합 테스트: 전체 파이프라인 사전 검증

우선순위:

  1. 자율주행 (기본 기능)
  2. 객체인식 (점수 확보)
  3. 통신보고 (필수 요구사항)
  4. 최적화 (성능 향상)