Je bouwt een pilotenconsole: de drone luistert live naar het toetsenbord, weigert wat op dat moment niet veilig is, vangt fouten op zonder te crashen, en houdt van elke toetsaanslag een logboek bij. Na de landing rolt daar een vluchtrapport uit. Daarna test je je eigen werk en schrijf je een testverslag.
De vliegclub laat leden met de drone vliegen, maar wil twee dingen beter regelen. Ten eerste mag een toets nooit
iets doen wat op dat moment onveilig is. Ten tweede wil het bestuur nΓ‘ de vlucht kunnen zien wat er precies gebeurd
is: wie drukte wat in, wat is er geweigerd, en waar ging het mis. Jij bouwt drone_pilot.py.
VΓ³Γ³r het opstijgen gelden twee regels uit sprint 2:
Elke toets die iets doet, staat in een tabel. Een lange if/elif-keten over toetsen is niet
toegestaan: dat is precies wat US3 je afleert.
| Toets | Wat gebeurt er |
|---|---|
w Β· s Β· a Β· d | Vooruit Β· achteruit Β· zijwaarts links Β· zijwaarts rechts, steeds 50 cm. |
| pijltje omhoog Β· omlaag | Stijgen Β· dalen, ook 50 cm. |
| pijltje links Β· rechts | Draaien om zijn as: linksom Β· rechtsom, steeds 45Β°. |
t Β· l | Opstijgen Β· landen. |
f | Foto: het huidige beeld opslaan als PNG. |
v | Video-opname aan of uit (een schakelaar). |
1 Β· 2 | Vliegsnelheid langzaam (30 cm/s) of snel (80 cm/s). |
q | Stoppen: landen, opruimen, rapport. |
| iets anders | Niet herkend β melden en gewoon doorgaan. |
cv2.waitKey(1) & 0xFF uit
US4 · T1 knip je de toetscode af tot één byte, en dan zijn de pijltjes niet meer van elkaar te onderscheiden.
Daarvoor bestaat cv2.waitKeyEx(), die de volledige code teruggeeft. Die codes verschillen per
besturingssysteem, dus je kunt ze niet uit een boekje overnemen: druk de toetsen in, print de code die je
terugkrijgt, en zet jouw codes als constanten bovenaan je script.
| Situatie | Wat doet je console? |
|---|---|
| Bewegen of draaien terwijl de drone nog op de grond staat | Weigeren met een melding. De drone blijft staan. |
| Opstijgen terwijl hij al vliegt, of landen terwijl hij al staat | Weigeren met een melding. |
| Bewegen of draaien terwijl de batterij onder de 20% is | Weigeren. Landen, stoppen en een foto maken mogen dan nog wel. |
| Het drone-commando geeft een foutmelding | Opvangen, in het logboek zetten als fout, en doorgaan met de volgende toets. |
q beΓ«indigt de vlucht β en een noodgeval dat je zelf bedenkt in de Extra.
Van Γ©lke toetsaanslag komt een regel in je logboek: een lijst van dictionaries. In zo'n regel staat minimaal welke toets het was, welk commando erbij hoorde, hoeveel centimeter of graden het was, en wat de uitkomst was: uitgevoerd, geweigerd, onbekend of fout.
Na de landing print je script:
.items() over een telling die je zelf opbouwt;q drukt, heeft nul uitgevoerde toetsen.
Een percentage uitrekenen over nul toetsen kan niet. Je rapport moet dan iets zinnigs zeggen β en zeker niet crashen.
Maak een bestand project_plan.md met je planning. Beschrijf in welke stappen je dit aanpakt, hoe lang je
per stap denkt nodig te hebben, waar je problemen verwacht, en welke methodes uit djitellopy en
cv2 je nodig hebt. In het tabblad Ontwerpen komt er nog een onderdeel bij.
Typ een reeks toetsen en zie wat je console hoort te doen: welke toets wordt uitgevoerd, geweigerd of niet herkend, en wat er in het vluchtrapport komt. Hier staat geen Python β alleen het gedrag dat je script moet vertonen.