Sprint 3 ยท Herhaling, lists & video  ยท  US3: Video streaming

Als piloot, wil ik live zien wat de drone ziet en beelden kunnen bewaren, zodat ik na de vlucht kan terugkijken wat er gebeurde.

Taak 1: Video stream starten en stoppen

De eerste stap naar live video: hoe verbind je je met de video-feed van de drone, haal je frames op en sluit je alles netjes af.

Streaming: drie fasen

Video-streaming bestaat uit drie fasen: initialisatie (verbinding + stream starten), ophalen (loop over frames), shutdown (netjes afsluiten).

Fase 1: Initialisatie

Verbinding maken en stream starten:

tello = Tello()
tello.connect()
tello.streamon()
time.sleep(2)  # Wacht op buffering!

De wacht is cruciaal โ€” zonder krijg je None-frames.

Fase 2: Ophalen in een lus

Je vraagt de frame-lezer รฉรฉn keer op. Daarna haal je in een for-lus steeds het nieuwste frame op, controleer je het en laat je het zien. De lus heeft een maximum, en met q stop je eerder:

frame_read = tello.get_frame_read()

for frame_nr in range(300):          # hooguit 300 frames, ongeveer 10 seconden
    img = frame_read.frame
    if img is None:
        continue                     # nog geen beeld: door naar de volgende ronde
    cv2.imshow("Tello", img)

    key = cv2.waitKey(1) & 0xFF      # 1 ms kijken of er een toets is ingedrukt
    if key == ord('q'):
        break                        # q = stoppen

Fase 3: Shutdown

Stream en verbinding netjes sluiten, nรก de lus, op niveau 0:

cv2.destroyAllWindows()
tello.streamoff()
tello.end()

Zie de 3-fasen timeline

NoneType frames: Als je None krijgt, wachten na streamon() te kort. Voeg extra time.sleep() toe.

Opdracht: vijf frames ophalen

Schrijf een script stream_capture.py dat:

  1. Een Tello verbindt, de stream start en 2 seconden wacht.
  2. Met een for-lus vijf frames achter elkaar ophaalt (elk frame kost ~33 ms).
  3. Na elk frame het volgende print: Frame N: hoogte ร— breedte, type: {type}, min/max: {min}/{max}
  4. De stream netjes stopt en de verbinding sluit.

Je hebt dus al deze imports:

from djitellopy import Tello
import time

Acceptatiecriteria

  • Script heet stream_capture.py en importeert Tello en time.
  • Na connect() en streamon() wacht het script 2 seconden.
  • Het script haalt vijf frames op en print voor elk: hoogte, breedte, type en min/max pixelwaarde.
  • streamoff() en end() staan onderaan het script, na de lus, op niveau 0.
  • Het script crasht niet met NoneType-fouten.