프로젝트 소개
이 프로젝트는 드론 조종 방식은 대부분 단일 입력 방식에 의존하고 있어 사용자가 상황에 따라 다양한 조작 방식을 선택하기 어렵다는 문제가 존재했고,
또 드론에 기능을 적용하려면 별도의 프로그램을 구성해야 해서 조종 기능과 AI 기능을 한 시스템에서 통합해 사용하기 어렵다는 한계가 있었습니다.
이에 따라 프로젝트를 기획하게 되었고, 키보드 조종 기반, AI 자동추적, 손 제스처 인식 기능을 하나의 프로그램에서 전환하여 사용할 수 있는 통합 드론 제어 시스템을 만드는 것을 목표로 했습니다.
프로젝트 기획
이론적 배경
1.드론 SDK 제어
-Tello 드론은 UDP 통신 기반command, takeoff, land, forward x 등의 명령 송수신
2.YOLOv8 이미지 인식
-객체 탐지 모델
-드론이 사람을 인식해 중앙을 따라오도록 구현
3.MediaPipe Hands
-손 랜드마크 21개 추출
-손 모양 기반 제스처 구분 후 드론 제어
시스템 구조
.
├── AI
│ ├── detector.py
│ ├── learn.pt
│ ├── train.py
│ └── yolov8n.pt
├── dataset
│ ├── data.yaml
│ ├── images
│ │ ├── train
│ │ └── val
│ └── labels
│ ├── train
│ └── val
├── drone
│ ├── drone_ai.py
│ ├── drone_control.py
│ ├── drone_video.py
│ ├── gesture_control.py
│ └── main.py
└── else
├── calibration.py
├── constants.py
└── frame.py
개발 환경
Python 3.13 / 3.11
OpenCV
ultralytics YOLO
MediaPipe
socket(UDP)
Tello Drone
프로젝트 결과
2) 핵심 기능 구현
(1) WASD 키보드 조종
키보드 입력 기반으로 SDK 명령을 보내도록 drone_control.py에서 구현하였습니다. 아래는 실제 이동 명령 처리 부분입니다.if k == 'w': send(f"forward {SPEED}")
if k == 's': send(f"back {SPEED}")
if k == 'a': send(f"left {SPEED}")
if k == 'd': send(f"right {SPEED}")
실험 결과 기본 이동 명령은 지연 없이 안정적으로 동작하였습니다.
(2) YOLO 기반 자동추적
drone_ai.py에서는 YOLO 모델을 이용해 객체 위치를 계산하고, 중심 위치에 따라 자동으로 드론을 이동시키도록 구현하였습니다.if cx < frame_mid - LEFT_THRESHOLD:
send("left 20")
elif cx > frame_mid + RIGHT_THRESHOLD:
send("right 20")
if w < MIN_BOX:
send("forward 20")
elif w > MAX_BOX:
send("back 20")
이를 통해 드론은 화면 중앙을 기준으로 사람을 자동으로 추적할 수 있었습니다.
(3) 손 제스처 인식
gesture_control.py에서는 손가락 개수를 계산하여 제스처를 구분하도록 구현하였습니다.if fingers == 0 or fingers == 5:
return "STOP"
elif fingers == 1:
return "FORWARD"
elif fingers == 2:
return "ROTATE"
이를 통해 손바닥, 손가락 1개, 손가락 2개 동작에 따라 정지, 전진, 회전 명령을 수행할 수 있었습니다.
3) 시스템 구조
각 기능은 모듈 단위로 나누어 개발하였습니다.* drone_control.py는 기본 조종
* drone_ai.py는 AI 추적
* gesture_control.py는 제스처 분석
* drone_video.py는 영상 스트림 처리
* main.py는 전체 흐름과 모드 전환
이러한 구조를 통해 기능 확장이나 수정이 용이하도록 하였습니다.
소감
이번 프로젝트에서 저는 전체 프로그램 구조를 설계하고, 드론 조종 기능, YOLO 기반 자동추적, 손 제스처 인식 기능을 직접 구현했습니다.
진행 과정에서 드론이 정상적으로 이륙하지 않는 문제가 발생해 실제 비행 테스트를 충분히 하지 못한 점이 가장 어려웠습니다. 명령 송수신과 영상 스트림은 정상 작동했지만, 네트워크 또는 드론 자체 문제를 해결하지 못해 코드 기반 테스트로만 기능을 검증했습니다.
다음에느 드론 연결 문제를 먼저 해결해 실제 비행 환경에서 통합 테스트를 진행하고 싶으며, 제스처 종류 확대나 AI 모델 확장 등 기능 개선도 시도해보고 싶습니다.