MAVSDK와 컴퓨터 비전(YOLO)을 활용한 모듈식 드론 자율 추적 및 미션 실행 시스템
drone_project/
├── configs/ # 설정 파일 (YAML)
│ ├── camera.yaml # 카메라 및 YOLO 설정
│ ├── control.yaml # PID 제어 설정
│ └── system.yaml # 시스템 및 미션 설정
├── vision/ # 비전 모듈 (카메라, 검출, 추적)
│ ├── stream.py # 영상 입력
│ ├── detector.py # YOLO 물체 검출
│ └── tracker.py # 물체 추적
├── control/ # 제어 모듈 (PID, Offboard)
├── mission/ # 미션 상태 머신 (탐색/추적/복귀)
├── platform/ # 하드웨어 인터페이스 (MAVSDK, 안전)
├── common/ # 공통 타입 및 유틸리티
├── utils/ # 시각화 및 모니터링
├── training/ # 모델 학습 (YOLO 커스텀 학습)
│ ├── dataset/ # 학습 데이터
│ ├── train.py # 학습 스크립트
│ └── QUICKSTART.md # 학습 가이드
├── models/ # 학습된 YOLO 모델 저장
├── logs/ # 실행 로그 및 녹화
├── tests/ # 유닛 테스트
├── deploy/ # 배포 스크립트
├── main.py # 메인 실행 파일
└── test_vision.py # 비전 시스템 테스트
- YOLO 기반 물체 검출: 학습된 모델로 실시간 물체 인식
- 다중 추적 알고리즘: KCF/CSRT/MOSSE + Kalman 필터 스무딩
- 다양한 입력 소스: USB/CSI 카메라, 영상 파일, RTSP 스트림
- PID 제어: 위치/속도/Yaw 제어
- Offboard 모드: 자동 명령 전송 (20Hz)
- 속도/고도 제한: 안전 범위 내 제어
- 상태 머신: IDLE → TAKEOFF → SEARCH → TRACK → RTL
- 자동 탐색: 나선형/그리드 패턴
- 타겟 추적: 검출된 물체 자동 추적
- 로스트 복구: 타겟 소실 시 재탐색
- GeoFence: 비행 영역 제한
- 배터리 모니터링: 저전압 자동 복귀
- 고도 제한: 최소/최대 고도 제한
- 비상 정지: 긴급 상황 대응
- CSV 로그: 텔레메트리, 검출 결과, 제어 명령
- 이벤트 로그: JSON 형식 상태 변화 기록
# 의존성 설치
pip install -r requirements.txt
# 또는 자동 설치 스크립트
./deploy/scripts/setup.sh# 카메라 + YOLO 검출 테스트
python test_vision.py
camera:
source_type: "USB" # 또는 "FILE", "RTSP"
device_id: 0 # 카메라 번호
detection:
method: "yolo" # YOLO 사용
yolo:
model_path: "models/best.pt" # 학습한 모델 경로
conf_threshold: 0.5 # 신뢰도 임계값system:
mode: "SITL" # 시뮬레이션 모드 (실제 드론은 "REAL")controller:
position:
p_gain: 0.5 # 비례 게인
i_gain: 0.01 # 적분 게인
d_gain: 0.1 # 미분 게인# 직접 실행
python main.py
# 또는 스크립트 사용
./deploy/scripts/start_drone.sh# 카메라 + YOLO 검출 실시간 테스트
python test_vision.py# 전체 테스트
python -m pytest tests/
# 특정 테스트
python -m pytest tests/test_controller.py # 제어기
python -m pytest tests/test_state_machine.py # 상태 머신# 1. PX4 SITL 실행 (별도 터미널)
cd ~/PX4-Autopilot
make px4_sitl gazebo
# 2. 드론 시스템 실행
python main.py# 1. 프로젝트 복사
scp -r drone_project/ [email protected]:~/
# 2. Jetson에서 설치
ssh [email protected]
cd ~/drone_project
pip install -r requirements.txt
# 3. 자동 시작 설정 (systemd)
sudo cp deploy/systemd/drone.service /etc/systemd/system/
sudo systemctl enable drone.service
sudo systemctl start drone.service
# 4. 로그 확인
sudo journalctl -u drone.service -fcd deploy/docker
docker-compose up -d
# 로그 확인
docker-compose logs -fMIT License