UNLV

[UNLV] - 드론 AI 실습: 텔로 드론(4일차)

빡성 2026. 2. 10. 02:42

1. 수업 개요: 드론과 AI의 만남

이번 수업은 이전에 다룬 머신러닝 알고리즘을 실제 드론에 적용하는 실습 수업이었다. 드론이 단순히 날아다니는 기계가 아니라, AI를 탑재한 지능형 시스템이라는 점을 이해했다.

수업에서는 DJI 로보마스터 텔로 탤런트(Robomaster Tello Talent)를 사용하여 드론의 기본 조작부터 시작해, Python으로 드론을 제어하고, 카메라로 촬영한 영상을 PC로 전송하여 AI 모델을 적용하는 전체 과정을 진행했다.

특히 드론이 사물을 인식하거나 장애물을 회피할 때, 이전에 다룬 분류 알고리즘(Decision Tree, SVM 등)이 어떻게 실무적으로 적용되는지, 그리고 어떤 알고리즘이 드론의 온보드 칩에서 실행하기에 적합한지 구체적으로 이해할 수 있었다.

2. 로보마스터 텔로 탤런트: 교육용 드론의 특징

DJI 로보마스터 텔로 탤런트(TT)는 교육용 드론으로 설계된 기체다. 주요 특징은 다음과 같다.

안전성을 위해 실내 비행 중 안전을 강화하기 위해 프로펠러 가드가 장착되어 있다. 컴팩트하고 내구성 있는 디자인으로 교육 환경에 적합하다.

카메라 성능은 5MP HD 카메라로 사진을 캡처하고, 전자식 이미지 안정화(EIS) 기능이 포함된 720p 비디오를 스트리밍할 수 있다. 이 카메라는 이후 AI 프로젝트에서 핵심적인 역할을 한다.

비행 성능은 최대 13분의 비행 시간과 최대 100m의 제어 범위를 가진다. 교육용으로는 충분한 성능이다.

지능형 비행 모드로는 8D 플립(Flips), 바운스 모드(Bounce Mode), EZ 샷(EZ Shots) 등이 있어 초보자도 비행을 재미있고 쉽게 할 수 있다. DJI의 고급 비행 제어 알고리즘에 의해 안정적인 비행이 보장된다.

하지만 중요한 것은, 이런 기본 기능보다도 프로그래밍 가능성이 이 드론의 진짜 강점이라는 점이었다.

3. 고급 프로그래밍 및 커스터마이징

텔로 탤런트의 가장 큰 특징은 오픈 소스 프로그래밍이 가능하다는 점이다. 내장된 ESP32 오픈 소스 모듈은 광범위한 프로그래밍과 커스터마이징을 가능하게 한다.

프로그래밍 언어 지원:

  • 블록 기반 코딩(Scratch): 초보자를 위한 시각적 프로그래밍
  • Python: 우리가 이번 수업에서 주로 사용할 언어
  • Arduino: 하드웨어 제어에 특화
  • MicroPython: 임베디드 시스템용 경량 Python

이런 다양한 언어 지원 덕분에 모든 숙련도에 맞춰 프로그래밍이 가능하다.

시각적 피드백 장치도 있다:

  • 8x8 LED 도트 매트릭스 화면: 맞춤형 애니메이션, 캐릭터 및 스크롤 텍스트를 표시할 수 있다
  • 풀 컬러 프로그래밍 가능 LED 인디케이터: 시각적 피드백을 제공하며 이벤트에 따라 색상이 변하도록 코딩할 수 있다

14핀 확장 인터페이스를 통해 서드파티 센서(I2C, UART, SPI, GPIO, PWM)를 연결할 수 있어 무한한 프로젝트 가능성을 열어준다. "이 확장 인터페이스가 바로 임베디드 시스템의 핵심"이였다.

4. 응용 분야 및 군집 기술

텔로 탤런트는 AI, 로봇 공학 및 프로그래밍 개념을 직접 체험하고 매력적인 방식으로 가르치는 데 이상적이다.

통합된 ToF 적외선 센서를 통해 장애물 회피 및 최대 1.2미터까지의 정밀한 거리 측정이 가능하다. 중요한 것은, 이 센서 데이터와 카메라 영상 데이터를 결합하여 복합적인 AI 알고리즘을 구동할 수 있다는 점이었다.

다중 드론 군집 제어(Multi-drone swarm control)를 지원하여 학생들이 동기화된 비행 포메이션을 프로그래밍하고 수행할 수 있게 한다. 여러 대의 드론이 협력하여 임무를 수행하는 것은 실제 산업 현장에서도 중요한 기술이다.

듀얼 밴드 Wi-Fi (2.4GHz/5.8GHz)는 교실처럼 무선 장치가 많은 복잡한 환경에서 필수적인 안정적인 연결을 보장한다. "드론이 찍은 영상을 PC로 전송할 때 이 Wi-Fi 연결이 핵심"이였다.

5. Tello 앱과 프로그래밍 환경 설정

드론을 제어하기 위해서는 먼저 소프트웨어를 설치해야 한다. 설치 과정은 다음과 같다.

기본 제어용 Tello 앱:

  • 활성화, 기체 비행, 영상 녹화 및 펌웨어 업데이트를 위해 필요
  • iOS 버전: iOS v9.0 이상
  • Android 버전: Android v4.4 이상

프로그래밍용 Tello EDU 앱:

  • Python 스크립트로 드론을 제어하기 위해 필요
  • iOS 버전: iOS v10.0 이상
  • Android 버전: Android v4.4 이상

DJI Education Hub:

  • http://edu.dji.com/download에서 다운로드
  • RoboMaster Assistant를 사용하여 오픈 소스 컨트롤러 펌웨어를 최신 버전으로 업데이트

프로그래밍을 하려면 반드시 Tello EDU 앱과 DJI Education Hub를 설치해야 한다. 특히 펌웨어를 최신 버전으로 업데이트하지 않으면 Python 스크립트가 제대로 작동하지 않을 수 있다.

6. 드론 안전 수칙: 절대 잊지 말아야 할 것

수업 초반에 안전 수칙을 반복해서 강조했다. 드론은 위험할 수 있으므로 절대 소홀히 해서는 안 된다.

배터리 관리:

  • 매 임무(비행) 전에 배터리가 완전히 충전되었는지 확인
  • 배터리가 부족하면 충전 독(dock)에 다시 놓기
  • 수업이 끝날 때 모든 배터리를 충전 독에 다시 놓기
  • TT 액세스 포인트(Wi-Fi)에 연결할 수 없는 경우, 대부분 배터리가 부족하기 때문 - 특히 중요한 부분이다

프로펠러 관리:

  • 매 임무 전에 프로펠러가 단단히 고정되어 있는지 확인
  • 손으로 모터를 잡고 프로펠러가 모터 샤프트에 단단히 부착되었는지 누르며 확인 (과도한 힘 사용 금지)
  • 프로펠러를 교체하려면 제공된 도구 사용
  • 손으로 프로펠러를 잡아당기지 말 것
  • 프로펠러를 뽑을 때는 항상 모터를 잡고 하기

비행 규칙:

  • 이것은 실내용 드론입니다. 야외에서 날리지 마십시오 - 엄격히 금지하신 사항
  • 항상 다른 사람의 공간과 프라이버시를 존중. 오직 본인의 공간에서만 날리기
  • 물체, 사람, 벽, 천장에 너무 가까이 드론을 날리지 말기
  • 드론이 충돌하면 아래로 떨어지고 프로펠러가 튕겨 나갈 수 있음. 프로펠러가 튕겨 나가는 것에 주의
  • 맨손으로 드론을 잡거나 움켜쥐지 말기 - 프로펠러는 매우 높은 속도로 회전하며 손가락이나 손을 다치게 할 수 있음
  • 드론을 착륙시키거나 중단할 때는 항상 컨트롤러 사용
  • 드론 조작 시 주의를 기울이기

"안전이 모든 것보다 우선"이였다. 특히 프로펠러는 매우 위험하므로 절대 맨손으로 잡지 말라고 반복해서 말씀하셨다.

7. 드론 프로젝트 로드맵: Task 1부터 Task 6까지

제시하신 드론 프로젝트는 단계적으로 학습할 수 있도록 설계되어 있다. 각 Task는 이전 Task의 기반 위에 구축된다.

Task 1: 드론을 수동으로 조작하고 드론의 이동성에 익숙해지기

먼저 Tello 앱을 사용하여 드론을 수동으로 조작해본다. 이 과정에서 드론의 이동 역학(Mobility)을 먼저 파악한다. 전진, 후진, 좌우 이동, 회전, 상승, 하강 등 기본 동작을 익힌다.

Task 2: PC/호스트 시스템에 가상 환경을 설정하고 Python 스크립트로 드론을 제어하기 위해 DJI Tellopy 패키지 설치하기

Python으로 드론을 제어하기 위한 환경을 구축한다. 가상 환경(virtual environment)을 만들고, DJI Tellopy 패키지를 설치한다. 가상 환경을 사용하는 것이 중요하다. 여러 프로젝트를 진행할 때 패키지 충돌을 방지할 수 있기 때문이다.

Task 3: Python 스크립트를 사용하여 드론 제어하기

이제 Python 코드로 드론을 제어한다. takeoff(), land(), move_forward(), move_back() 등의 함수를 사용하여 드론을 프로그래밍 방식으로 조작한다. "이 단계에서 드론이 단순한 기계가 아니라 프로그래밍 가능한 시스템이라는 것을 이해하게 된다"다.

Task 4: 드론에서 이미지와 비디오를 캡처하여 PC/호스트 시스템으로 전송하기

드론의 카메라로 촬영한 영상을 PC로 전송한다. 듀얼 밴드 Wi-Fi를 통해 실시간으로 영상 스트리밍이 가능하다. "이 단계가 AI 프로젝트의 기반이 된다"다. 드론의 시선(카메라)을 디지털 데이터(영상/이미지)로 변환하여 PC로 가져오는 과정이다.

Task 5: 전송된 이미지/비디오에 기본적인 이미지 처리 알고리즘 사용하기

OpenCV 등을 사용하여 필터링, 색상 검출, 엣지 검출 등 기본적인 이미지 처리를 수행한다. 이 단계에서 컴퓨터 비전의 기본을 익힌다.

Task 6: 전송된 이미지/비디오에 고급 CNN 이미지 처리 알고리즘 사용하기

YOLO 같은 딥러닝 모델을 사용하여 사물 인식, 객체 추적 등을 수행한다. "이 단계에서 드론이 진짜 AI 시스템이 된다"다. 드론이 찍은 영상을 PC에서 YOLO 모델로 분석하고, 그 결과를 바탕으로 드론에 명령을 내리는 구조를 이해하는 것이 핵심이다.

8. 분류 알고리즘의 심화 개념: 드론에 적용하기

드론이 사물을 인식하거나 상태를 판단할 때, 이전에 다룬 분류 알고리즘이 실무적으로 어떻게 적용되는지 확인했다.

모델 선택의 기준 (Embedded ML 관점):

중요한 것은 "드론의 온보드(On-board) 칩에서 직접 실행할 수 있는 알고리즘을 선택해야 한다"는 점이었다.

  • 의사결정 나무(DT): 연산량이 적어 드론의 온보드 칩에서 직접 실행하기에 가장 유리하다. Decision Tree는 드론에서 실시간으로 장애물을 분류할 때 가장 적합하다.
  • SVM: 실시간 추론 성능이 떨어질 수 있어, 드론 비행 중 즉각적인 반응이 필요한 작업에는 부적합할 수 있다. SVM은 정확도는 높지만, 드론처럼 빠른 반응이 필요한 시스템에는 적합하지 않다.

성능 지표의 실제 의미:

드론에서는 일반적인 정확도(Accuracy)보다도 다른 지표가 더 중요하다.

  • 재현율(Recall): 드론이 장애물을 '장애물'로 인식하지 못하는 상황(거짓 음성)을 방지해야 하므로, 안전을 위해서는 재현율을 높이는 튜닝이 필수적이다. 드론이 장애물을 놓치면 충돌로 이어질 수 있으므로, 재현율이 정확도보다 더 중요하다.
  • F1-Score: 드론이 장애물을 너무 예민하게 감지해서 아무것도 없는데 비행을 멈추는 상황(정밀도)과 실제 장애물을 놓치는 상황(재현율) 사이의 균형을 맞추기 위해 사용한다. F1-Score는 정밀도와 재현율의 조화 평균으로, 드론처럼 안전이 중요한 시스템에서 매우 유용하다.

과적합(Overfitting) 방지:

특정 조명이나 배경에서만 학습된 드론 AI는 다른 장소에서 비행할 때 실패할 확률이 높다. 드론은 다양한 환경에서 비행해야 하므로, 모델의 일반화 성능이 매우 중요하다.

이를 위해 교차 검증(K-Fold)을 통해 모델의 일반화 성능을 확보하는 것이 강조된다. K-Fold 교차 검증을 통해 모델이 다양한 환경에서도 잘 작동하는지 확인할 수 있다.

9. 텔로 드론과 AI의 결합: 센서 융합과 처리 파이프라인

단순 비행을 넘어 AI 시스템으로 확장하기 위한 기술적 구성 요소를 살펴봤다.

ESP32 오픈 소스 모듈의 역할:

드론의 기본 비행 제어 외에 사용자가 직접 짠 AI 로직이나 추가 센서 데이터를 처리하는 '두뇌' 역할을 한다. ESP32는 드론의 메인 프로세서와 별도로 동작하여, 사용자 정의 AI 알고리즘을 실행할 수 있게 해준다.

센서 융합 (Sensor Fusion):

드론은 여러 센서의 데이터를 결합하여 더 정확한 판단을 내린다.

  • ToF(Time of Flight) 센서: 1.2m 내의 거리를 정밀하게 측정하여 AI가 장애물을 회피하는 판단 근거를 제공한다. ToF 센서는 카메라만으로는 부족한 거리 정보를 제공한다.
  • 카메라 영상 데이터: 사물의 모양, 색상, 패턴 등을 인식한다.
  • 융합: 이 두 데이터를 결합하여 복합적인 AI 알고리즘을 구동한다. 센서 융합을 통해 단일 센서의 한계를 극복할 수 있다.

전송 및 처리 파이프라인:

전체 구조는 다음과 같다:

  1. 드론이 카메라로 영상을 촬영
  2. 듀얼 밴드 Wi-Fi를 통해 PC로 영상 전송 (Task 4)
  3. PC에서 YOLO(Deep Learning) 모델을 돌려 사물을 인식
  4. 인식 결과를 바탕으로 드론에 명령을 내림
  5. 드론이 명령에 따라 동작

"이 구조를 이해하는 것이 핵심"이였다. 드론의 온보드 칩에서는 복잡한 딥러닝 모델을 실행하기 어렵기 때문에, PC에서 모델을 실행하고 결과만 드론에 전송하는 방식이 효율적이다.

하지만 "앞으로는 드론의 온보드 칩 성능이 향상되면서, Decision Tree 같은 경량 모델을 드론에서 직접 실행하는 것도 가능해질 것"이였다.

10. 실제 프로젝트 시나리오: 단계별 학습

제시한 로드맵은 단계적 학습을 목표로 한다. 각 단계는 이전 단계의 기반 위에 구축된다.

1단계: 물리적 제어 이해

수동 비행을 통해 드론의 이동 역학(Mobility)을 먼저 파악한다. 전진, 후진, 좌우 이동, 회전 등 기본 동작을 익힌다. 드론을 직접 조작해보지 않으면, 프로그래밍으로 제어할 때 어떤 명령을 내려야 할지 모른다.

2단계: 프로그래밍 환경 구축

Python 스크립트로 제어하기 위한 가상 환경과 패키지 설정을 완료한다. 가상 환경을 만들고, DJI Tellopy 패키지를 설치한다. 환경 설정이 제대로 되지 않으면 이후 모든 작업이 실패한다.

3단계: 프로그래밍 제어

Python 코드로 드론을 제어한다. takeoff(), land(), move_forward() 등의 함수를 사용한다. "이 단계에서 드론이 단순한 기계가 아니라 프로그래밍 가능한 시스템이라는 것을 이해하게 된다"다.

4단계: 데이터 획득 및 처리

드론의 시선(카메라)을 디지털 데이터(영상/이미지)로 변환하여 PC로 가져오는 과정을 익힌다. 듀얼 밴드 Wi-Fi를 통해 실시간으로 영상 스트리밍이 가능하다. "이 단계가 AI 프로젝트의 기반이 된다"다.

5단계: 기본 이미지 처리

OpenCV 등을 사용하여 필터링, 색상 검출, 엣지 검출 등 기본적인 이미지 처리를 수행한다. 이 단계에서 컴퓨터 비전의 기본을 익힌다.

6단계: 고급 AI 적용

YOLO 같은 딥러닝 모델을 사용하여 사물 인식, 추적, 음성 제어 등 실제 지능형 임무를 수행한다. "이 단계에서 드론이 진짜 AI 시스템이 된다"다.

11. 프로젝트 예시: 객체 인식, 추적, 음성 제어

제시하신 프로젝트 예시들은 실제로 구현 가능한 실용적인 프로젝트들이다.

객체 인식 (Object Recognition):

관심 있는 물체를 감지하기 위해 YOLO 딥러닝 모델을 사용한다. 드론이 카메라로 촬영한 영상을 PC로 전송하고, PC에서 YOLO 모델이 물체를 인식한 뒤, 그 결과를 바탕으로 드론에 명령을 내린다.

"예를 들어, 드론이 공을 인식하고 그 공을 따라다니도록 할 수 있다"다. 이는 실제 축구 경기에서 드론이 공을 추적하는 것과 같은 원리다.

객체 추적 (Object Tracking):

관심 있는 물체를 추적하기 위해 YOLO 딥러닝 모델을 사용한다. 객체 인식과 달리, 추적은 시간에 따라 움직이는 물체를 계속 따라다니는 것이다.

"객체 추적은 객체 인식의 연장선이지만, 시간적 정보를 활용한다"다. 이전 프레임에서 인식한 물체의 위치를 기억하고, 다음 프레임에서 그 물체를 찾아 계속 추적한다.

음성 명령 제어 (Voice Command Control):

음성 명령을 사용하여 드론의 움직임을 제어한다. 마이크로 음성을 입력받고, 음성 인식 모델로 명령을 해석한 뒤, 그에 따라 드론을 제어한다.

음성 명령 제어는 사용자 인터페이스의 한 형태다. "앞으로 가", "왼쪽으로", "착륙" 등의 명령을 음성으로 내리면 드론이 그에 따라 동작한다.

"이런 프로젝트들은 모두 Task 1부터 Task 6까지의 기반 위에 구축된다"다. 기본기를 탄탄히 쌓아야 고급 프로젝트를 구현할 수 있다는 것이다.

12. 실습: Python으로 드론 제어하기

실습에서는 Python의 djitellopy 라이브러리를 사용하여 텔로 드론을 제어했다.

기본 연결 및 테스트:

먼저 드론에 연결하고 배터리 상태를 확인하는 기본 코드를 실행했다. 드론을 제어하기 전에 반드시 배터리 상태를 확인해야 한다. 배터리가 20% 이하면 비행을 중단해야 한다.

드론 기본 연결 및 배터리 확인
from djitellopy import Tello

tello = Tello()
tello.connect()
print(f"Battery Life: {tello.get_battery()}%")

키보드로 드론 조종:

WASD 키를 사용하여 드론을 조종하는 실습을 했다. OpenCV를 사용하여 실시간 비디오 스트림을 보면서 드론을 제어했다. 키보드 조종을 통해 드론의 이동 역학을 직접 경험할 수 있었다.

주요 조종 키:

  • W/S: 전진/후진
  • A/D: 좌우 이동
  • U/J: 상승/하강
  • Z/X: 좌우 회전
  • T/L: 이륙/착륙
  • Q: 종료

자동 미션 수행:

사각형 경로를 자동으로 비행하는 미션을 프로그래밍했다. takeoff() → move_forward() → rotate_clockwise()를 반복하여 정사각형을 그리도록 했다. 이 실습을 통해 드론이 단순한 기계가 아니라 프로그래밍 가능한 시스템이라는 것을 이해할 수 있었다.

사각형 미션 코드
tello.takeoff()
tello.move_up(50)

for i in range(4):
    tello.move_forward(100)  # 100cm 전진
    tello.rotate_clockwise(90)  # 90도 회전

tello.land()

비디오 녹화:

드론의 카메라로 촬영한 영상을 PC로 전송하여 MP4 파일로 저장하는 실습도 했다. OpenCV의 VideoWriter를 사용하여 실시간으로 비디오를 녹화했다. 이 영상 데이터가 이후 AI 프로젝트의 입력이 된다.

실습을 통해 드론을 Python으로 제어하는 전체 과정을 경험할 수 있었다. 특히 실시간 비디오 스트리밍과 키보드 조종을 동시에 하는 것이 인상 깊었다.

13. 정리

이번 수업을 통해 드론이 단순히 날아다니는 기계가 아니라, AI를 탑재한 지능형 시스템이라는 점을 깊이 이해할 수 있었다.

수업의 핵심 내용을 정리하면:

  • 드론은 프로그래밍 가능한 시스템: ESP32 오픈 소스 모듈과 다양한 프로그래밍 언어 지원으로 무한한 커스터마이징이 가능하다.
  • 센서 융합의 중요성: ToF 센서와 카메라 데이터를 결합하여 더 정확한 판단을 내릴 수 있다.
  • 모델 선택의 기준: 드론의 온보드 칩에서 실행하기 위해서는 Decision Tree 같은 경량 모델이 적합하다. SVM은 정확도는 높지만 실시간 성능이 떨어질 수 있다.
  • 성능 지표의 실제 의미: 드론에서는 재현율(Recall)이 정확도보다 더 중요하다. 장애물을 놓치면 충돌로 이어질 수 있기 때문이다.
  • 단계적 학습의 중요성: Task 1부터 Task 6까지 순차적으로 학습해야 고급 프로젝트를 구현할 수 있다.
  • 안전이 최우선: 드론은 위험할 수 있으므로 안전 수칙을 절대 소홀히 해서는 안 된다.

특히 드론이 찍은 영상을 PC로 전송하고, PC에서 YOLO 모델로 분석한 뒤, 그 결과를 바탕으로 드론에 명령을 내리는 전체 파이프라인을 이해한 것은 매우 유용했다.

이 수업에서 다룬 내용은 앞으로 드론 기반 AI 프로젝트를 개발할 때 매우 유용할 것이다. 특히 모델 선택 기준, 성능 지표의 실제 의미, 센서 융합 방법 등을 이해한 것은 실무에서 큰 도움이 될 것 같다.

다음 수업에서는 실제로 Python 스크립트를 작성하여 드론을 제어하고, 카메라로 촬영한 영상에 AI 모델을 적용하는 실습을 진행할 예정이다. 기대가 된다.