Miniatuurdrones monteren, lanceren, leren kennen en ontwikkelen met een complete set

Door Stephen Evanczuk

Bijgedragen door De Noord-Amerikaanse redacteurs van DigiKey

Het gebruik van drones met vier sets rotorbladen – quadcopters – blijft groeien en ze worden inmiddels voor allerlei toepassingen ingezet. Maar het ontwerp blijft complex en vraagt kennis van mechanische, elektronische en software-subsystemen. Hoewel designers natuurlijk prima de benodigde kennis kunnen opdoen, biedt een dev kit voor drones een voorsprong, omdat hierin alle elementen samenkomen die nodig zijn om ervaring op te doen met de theorie en de praktijk van het vliegen met drones.

Dit artikel beschrijft een dev kit van STMicroelectronics. Hiermee krijgen ontwikkelaars een mini-quadcopter met gebruiksvriendelijke montage, die echter een complete demonstratie geeft van de complexe systemen voor de vluchtbediening die essentieel zijn voor ieder luchtvaartuig met meerdere rotorsets.

De dynamica van een quadcopter

In de meest verkochte variant werken quadcopters voornamelijk als bijzonder stabiel vliegend platform. De toepassingen hiervoor lopen uiteen: luchtfotografie, landbouwinspecties, bewaking en nog veel meer. In tegenstelling tot vliegtuigen met vaste vleugels of helikopters met neigbare rotoren, zijn drones met meerdere vaste rotoren relatief simpel qua ontwerp en bouw, ook dankzij de ruime verkrijgbaarheid van kleine, efficiënte DC-motoren.

Dat deze drones zo mechanisch eenvoudig en aerodynamisch stabiel zijn, is te danken aan de gecoördineerde inzet van de rotorsets om de manoeuvres te beheersen. Dat is een groot verschil met vliegtuigen, die gebruik maken van vleugeloppervlakken, of helikopters met een hoofd- en staartrotor.

In een quadcopter draait het paar rotors dat diagonaal tegenover elkaar ligt in dezelfde richting, en in de tegenoverstelde richting van het andere paar rotors. Als alle rotorsets met dezelfde snelheid draaien, kan de drone stijgen, dalen of een bepaalde hoogte vasthouden. Als een diagonaal paar sneller draait dan het andere paar, zal de drone gieren: hij draait dan om zijn eigen zwaartepunt, maar blijft op hetzelfde horizontale vlak (afbeelding 1, links).

Afbeelding 1: Drones manoeuvreren door verschillende combinaties van rotorsnelheid in te zetten, bijvoorbeeld door de rotorsets in een diagonaal paar te versnellen (M2, M4) om te gieren (links) of één diagonale motor te versnellen (M2) terwijl de tegenoverliggende rotorset vertraagd wordt (M4), voor een complexere combinatie van stampen en rollen (rechts). (Bron afbeelding: STMicroelectronics)

Als de snelheid van de voorste (of achterste) rotorsets wordt aangepast, kantelt de drone naar boven of naar onderen, zoals een vliegtuig dat daalt of stijgt. Een soortgelijke aanpassing links of rechts laat de drone rollen, dus draaien om zijn lengteas. Drones kunnen makkelijk complexer vluchtgedrag vertonen (waarbij gieren, stampen en rollen worden gecombineerd) door de relatieve snelheden van de diagonale rotorparen of van één enkele rotorset aan te passen (afbeelding 1, rechts).

Het besturingssysteem van de drone past de snelheden van de benodigde rotorsets aan om het gewenste vluchtgedrag te verkrijgen en zo de ingevoerde manoeuvre uit te voeren.

In de praktijk moet het controlesysteem de snelheden continu aanpassen, niet alleen om bijvoorbeeld een draaiing uit te voeren, maar ook om wind, thermiek of turbulentie te compenseren en zo een stabiele baan te behouden. Zelfs voor een miniatuurdrone die binnenshuis wordt gevlogen, moet het besturingssysteem het verschil kunnen meten tussen de daadwerkelijke hoogte van de drone en de gewenste hoogte.

Voor een ingenieur is de correctie van de rotorsnelheden op basis van een foutsignaal een bekend probleem, dat kan worden opgelost met een PID-regelaar die de feedback in van een controlelus verwerkt. De laatste uitdaging qua concept is om een methode te vinden die de hoogte van de drone meet. Hiervoor worden intelligente precisiesensoren gebruikt, die gegevens leveren voor berekening van de Eulerhoeken.

Eulerhoeken vertegenwoordigen een XYZ-oriëntatievlak van een object relatief ten opzicht van een xyz-referentievlak, waarbij de twee vlakken elkaar snijden langs de lijn N (afbeelding 2). De Eulerhoeken worden als volgt gedefinieerd:

  • α, de hoek tussen de x-as en N
  • ß, de hoek tussen de z-as en de Z-as
  • γ, de hoek tussen de N-as en de X-as

Afbeelding 2: Eulerhoeken (α, ß, γ) beschrijven de relatieve oriëntatie van een geroteerd stelsel (XYZ) ten opzichte van een vast stelsel (xyz), waarbij de stelsels elkaar snijden in de knopenlijn N. (Bron afbeelding: Wikimedia Commons CC BY 3.0)

Voor een systeem van vluchtbesturing komen het objectvlak en het referentievlak direct overeen met de huidige oriëntatie (XYZ) van de drone en het gewenste gedrag (xyz). De Eulerhoeken geven vervolgens de benodigde asrotaties aan voor het gewenste vluchtgedrag van de drone. Mechanische gyroscopen hebben jarenlang de gegevens geleverd die gebruikt worden om de huidige oriëntatie te bepalen. Inmiddels zijn er echter bijzonder nauwkeurige versnellingsmeters en gyroscopen als micro-elektromechanische systemen (MEMS) verkrijgbaar, zodat deze methode ook kan worden toegepast in lichtgewicht drones.

Tegenwoordig wordt in allerlei soorten drones een zogeheten AHRS toegepast, het "attitude en heading reference system" dat op basis van sensormetingen de referentiewaarden voor het vluchtgedrag en de koers meet, waarmee vervolgens de Eulerhoeken worden berekend. Deze Eulerhoeken leveren het foutsignaal voor een PID-regelaar, die de motorsnelheden van de verschillende rotorsets zo aanstuurt dat de gewenste vluchtmanoeuvre wordt uitgevoerd. De uitdaging zit 'm erin om deze benadering te implementeren met software op een mobiel platform: die software moet namelijk snel en nauwkeurig genoeg zijn om de berekeningen en de benodigde motorcorrecties uit te voeren.

De STEVAL-DRONE01 kit van STMicroelectronics, met mini-drone en bijbehorende software, biedt een functionerend voorbeeld van deze benadering en is een uitstekende basis om de details van dronebesturingssystemen te leren kennen.

Vliegklare mini-dronekit

De STEVAL-DRONE01 kit bevat alle componenten om een kleine quadcopter te bouwen. De kit bevat een kunststof frame en vier 8520 kernloze DC-motoren van 8,5 x 20 mm met 3,7 V, die samen met de bijbehorende propellers van 65 mm ieder ongeveer 35 gram stuwkracht leveren. De motoren en propellers worden in twee paren geleverd, één paar voor rotatie met de klok mee en één tegen de klok in. Het brutogewicht van de volledig gemonteerde drone inclusief Lithium-ion-Polymeer (LiPo) batterij van 3,7 V, is minder dan 70 gram. Dit geeft de 2:1-ratio van stuwkracht ten opzichte van gewicht die voor quadcopters de voorkeur geniet.

Naast deze mechanische componenten bevat de kit ook het STEVAL-FCU001V1 FCU-board (de Flight Controller Unit) van STMicroelectronics en het bijbehorende softwarepakket. Samen leveren board & software de eerder genoemde capaciteiten van het vluchtbesturingssysteem. Het FCU-board is een efficiënt en energiezuinig systeem met meerdere sensoren, met een Bluetooth Low Energy (BLE) aansluiting (afbeelding 3).

Afbeelding 3: De STEVAL-FCU001V1 Flight Controller Unit van STMicroelectronics is een volledig multi-sensorsysteem op batterijen, met BLE-aansluiting en opties voor DC-motoraandrijving. (Bron afbeelding: STMicroelectronics)

Het board is opgebouwd rondom de 32-bits microcontroller STM32F401 op basis van Arm® Cortex®-M4 en bevat drie verschillende MEMS-sensoren om verschillende karakteristieken voor het positioneren en navigeren van de drone te meten, waaronder:

  • De LSM6DSL iNEMO Inertial Measurement Unit (IMU) van STMicroelectronics, met geïntegreerde versnellingsmeter en gyroscoop voor het AHRS-systeem
  • De LIS2MDL magnetometer van STMicroelectronics, die gegevens levert om de functies voor richtingsherkenning te implementeren
  • De LPS22HD druksensor van STMicroelectronics, die gegevens levert om de verticale positionering te bepalen met een resolutie van 8 cm

Aan de inputkant (sensoren) is de STM32F401 microcontroller van de Flight Controller Unit op iedere sensor aangesloten via een gedeelde SPI-bus Aan de outputkant (motoren) levert de TIM4-timer van de microcontroller het PWM-signaal dat wordt gebruikt om de gates van de STL6N3LLH6 MOSFET vermogenstransistoren te bedienen, die de DC-motoren van de drone aandrijven.

De FCU biedt twee opties om de commando's van de gebruiker te ontvangen. Ten eerste kunnen gebruikers de drone besturen vanaf een smartphone met een Bluetooth-verbinding via de ingebouwde SPBTLE-RF-module van STMicroelectronics, die is voorzien van de BlueNRG-MS-transceiver met een volledige zuinige Bluetooth-stack. Alternatief kunnen de piloten ook een standaard afstandsbedieningsconsole op PMW-basis gebruiken. Tot slot bevat het board voor het energiebeheer een STC4054 li-ionbatterijlader-IC en een low dropout (LDO) regelaar LD39015, ook weer van STMicroelectronics.

Zoals ook te zien is in afbeelding 3 ondersteunt de FCU ook een aansluiting op een elektronische snelheidscontroller (ESC), zoals de STEVAL-ESC001V1 van STMicroelectronics. Met een ESC kan een systeem gebruik maken van krachtigere driefasemotoren, zodat de FCU kan worden toegepast voor quadcopters met meer vermogen.

Om de voorbereiding voor de vlucht en de besturing tijdens de vlucht te vereenvoudigen, is de kit vooraf geconfigureerd voor de Bluetooth-optie met de Android-app STDrone van STMicroelectronics. De app is ontworpen als virtuele afstandsbediening en levert een eenvoudige gebruikersinterface, met pictogrammen en twee virtuele joysticks voor de besturing (afbeelding 4).

Afbeelding 4: De STMicroelectronics STDrone-app voor Android biedt gebruikers een virtuele afstandsbediening om de miniatuurdrone te bedienen die is gebouwd met de development kit STEVAL-DRONE01. (Bron afbeelding: STMicroelectronics)

Na de montage kan de dronepiloot de STDrone-app op de smartphone gebruiken om de quadcopter te laten opstijgen en hem te besturen. Voor het opstijgen moet de drone op een vlak oppervlak staan en moet de operator het kalibratiepictogram van de app aanraken, totdat dit groen wordt. Dat betekent dat de kalibratie is afgerond. Voor de veiligheid zijn de motoren van de drone in eerste instantie via de software geblokkeerd. De operator moet de drone startklaar maken door op een ander pictogram in de app te tikken. Vanaf dat moment werkt de gebruikersinterface van de app als een afstandsbediening: de gebruiker kan de virtuele joysticks bewegen om de rotorsnelheid en de hoogte van de drone aan te passen.

Dit ultralichte model van STMicroelectronics heeft niet voldoende massa en vermogen voor uitgebreid gebruik buitenshuis, maar toch moeten operators die de drone buiten willen gebruiken nagaan wat de geldende beperkingen zijn voor dronegebruik in het beoogde vluchtgebied. Het kan zijn dat voor de kleine drones in deze klasse geen registratie of pilotenlicentie vereist is. Dat neemt niet weg dat gebruikers aan alle overige vereisten moeten voldoen.

Enkele gangbare regels in Nederland: de drone moet binnen direct zicht blijven, mag maximaal op 120 meter vliegen en mag bijvoorbeeld niet worden ingezet zones met een vliegverbod (zoals binnen 5 km rondom luchthavens), boven autowegen en spoorbanen of boven mensenmassa's. In het buitenland kunnen bovendien andere regels gelden. Operators kunnen verschillende apps gebruiken die informatie bieden over de lokale beperkingen in het luchtruim op basis van de GPS-locatie van de app-gebruiker. In Nederland is er bijvoorbeeld Vlieg Veilig, in de Verenigde Staten B4UFLY van de Federal Aviation Administration, en in Groot-Brittannië Drone Assist van de National Air Traffic Agency.

Software voor de vluchtbesturing

Voor techneuten is de Flight Control Unit van de drone-kit van STMicroelectronics – met de bijbehorende software – een aantrekkelijk onderdeel van het pakket. STMicroelectronics biedt de software open-source aan op Github. De toepassing is gebouwd op het STM32Cube-framework van STMicroelectronics, gelaagd op een Bluetooth-stack met een onderliggende driverlaag. De driverlaag zorgt voor de details van de hardware-interactie, via de Hardware Abstraction Layer (HAL) STM32Cube en het board support package (BSP) STEVAL-FCU001V1, dat drivers bevat voor de FCU-boardapparatuur die hierboven is beschreven.

De softwarearchitectuur voor de toepassing is opgebouwd rondom drie aparte modules: voor afstandsbediening, positiebepaling en PID-regeling (afbeelding 5).

  • De module voor de afstandsbediening verwerkt input van de STDrone-app of van een radiografische afstandsbediening en verzamelt waarden van de app of de converteert de PWM-gegevens van de afstandsbediening. Vervolgens worden deze waarden vertaald naar Eulerhoeken voor de gewenste vluchthoogte.
  • De module voor positiebepaling verzamelt de gegevens van de versnellingsmeter en de gyroscoop van de LSM6DSL IMU voor de AHRS-positieschatting die nodig is om de Eulerhoeken en de huidige vluchthoogte van de drone te berekenen. De gegevens van de magnetometer LIS2MDL en de druksensor LPS22HD worden wel geregistreerd, maar in de softwareversies die momenteel beschikbaar zijn, worden ze niet gebruikt voor de berekeningen voor de vluchtbesturing.
  • De PID-regelmodule maakt de berekening van de positiefout af met het verschil tussen de Eulerhoeken van de daadwerkelijke hoogte en de gewenste hoogte. Met conventionele methoden voor PID-regeling gebruikt de module vervolgens dat foutsignaal om de snelheid van iedere motor aan te passen, totdat de drone op de gewenste hoogte komt.

Afbeelding 5: De software voor vluchtbesturing van de minidrone van STMicroelectronics is opgebouwd uit aparte modules om de input van de afstandsbediening te verwerken (blauwe componenten, gelabeld (1)), voor de positiebepaling (rood, (2)), en voor de PID-regeling (donkerblauw, (3)). De PID-regeling stuurt vervolgens de vier motoren van de quadcopter aan. (Bron afbeelding: STMicroelectronics)

Met deze functionele architectuur combineert de drone-toepassing de modules in de workflow die nodig is om de commando's van de operator voor bepaalde manoeuvres te vertalen naar de benodigde aanpassingen in motorsnelheid (afbeelding 6). De algehele functionaliteit is complex, maar de belangrijkste lus om de parameters voor vluchtbesturing te vernieuwen is relatief overzichtelijk.

Afbeelding 6: De software voor vluchtbesturing van de minidrone van STMicroelectronics werkt met een workflow die continu sensorgegevens uitleest om de huidige hoogte van de drone steeds opnieuw te bepalen en vervolgens de snelheid van de vier dronemotoren aan te passen om de gewenste combinatie van stuwkracht, kanteling, rotatie en giering te verkrijgen. (Bron afbeelding: STMicroelectronics)

Na een reeks calls om de hardware- en softwaresystemen te initialiseren komt de belangrijkste applicatieroutine, main.c, in een oneindige lus (1). In deze lus is het updateproces een reeks calls om de kernalgoritmes van de vluchtbesturing uit te voeren zoals die eerder zijn beschreven.

Copywhile (1) { . . .
        
    if (tim9_event_flag == 1) { // Timer9 event: frequency 800Hz tim9_event_flag = 0; . . .
           


      // AHRS update, quaternion & true gyro data are stored in ahrs ahrs_fusion_ag(&acc_ahrs, &gyro_ahrs, &ahrs); // Calculate euler angle drone QuaternionToEuler(&ahrs.q, &euler_ahrs); #ifdef REMOCON_BLE gRUD = (joydata[2]-128)*(-13); gTHR = joydata[3]*13; gAIL = (joydata[4]-128)*(-13); gELE = (joydata[5]-128)*13; /* joydata[6]: seek bar data*/ /* joydata[7]: additional button data first bit: Takeoff (0 = Land, 1 = Takeoff) second bit: Calibration When it changes status is active third bit: Arming (0 = Disarmed, 1 = Armed) */ gJoystick_status = joydata[7]; if ((gJoystick_status&0x04)==0x04){ rc_enable_motor = 1; fly_ready = 1; BSP_LED_On(LED2); } else { rc_enable_motor = 0; fly_ready = 0; } if (connected){ rc_connection_flag = 1; /* BLE Remocon connected flag for enabling motor output */ SendMotionData(); SendBattEnvData(); SendArmingData(); } else{ rc_connection_flag = 0; gTHR=0; rc_enable_motor = 0; fly_ready = 0; BSP_LED_Off(LED1); BSP_LED_Off(LED2); } if (joydata[7]&0x02){ rc_cal_flag = 1; BSP_LED_On(LED1); } #endif #ifdef REMOCON_PWM . . .
      #endif // Get target euler angle from remote control GetTargetEulerAngle(&euler_rc, &euler_ahrs); . . .
      
      FlightControlPID_OuterLoop(&euler_rc_fil, &euler_ahrs, &ahrs, &pid); . . .

    } . . .
  } 

Binnen deze lus werkt de TIM9-timer van de microcontroller als gebeurtenisvlag om de update rate aan te sturen. Als de gebeurtenis voor de update-timer optreedt, roept de hoofdlus de AHRS-updateroutine ahrs_fusion_ag() aan. Die gebruikt de meest recente gegevens van de versnellingsmeter (acc_ahrs) en gyroscoop (gyro_ahrs) om de sensorfusieberekeningen uit te voeren die nodig zijn voor de update. De gegevens die hieruit komen, in de vorm van quaternionen, worden vervolgens gebruikt door de routine QuaternionToEuler() om de Eulerhoeken te berekenen voor de huidige vlieghoogte van de drone.

Op dit punt in de hoofdlus verzamelt de toepassing gegevens over de gewenste vluchthoogte via Bluetooth (indien ingeschakeld, (#ifdef REMOCON_BLE) of via de externe afstandsbediening als die wordt gebruikt. Hier werkt de code vier variabelen bij die de conventionele afstandsbedieningsgegevens spiegelen: gRUD (rudder position – roerpositie voor giering), gAIL (aileron position – rolroerpositie voor rollen), gELE (elevator position – kanteling) en gTHR (throttle position – de stuwkracht). Na het verzamelen van die gegevens gebruikt de lus de routine GetTargetEulerAngle() om de Eulerhoeken te berekenen van de gewenste vluchthoogte, zoals ingevoerd door de operator of piloot van de drone. Voordat die berekening echter wordt uitgevoerd, zien we in dit gedeelte van de lus een functie die van essentieel belang is voor de operator. Als de Bluetooth-verbinding om wat voor reden dan ook faalt, schakelt de code de motoren uit. Natuurlijk betekent dat een onmiddellijke, ongecontroleerde daling van de drone. Een logische, maar niet onbelangrijke software-uitbreiding zou de gegevens van de magnetometer LIS2MDL en de druksensor LPS22HD kunnen gebruiken om de drone te laten terugkeren naar zijn beginpunt en gecontroleerd te laten landen, voordat de motoren worden uitgeschakeld.

De hoofdlus eindigt met een call naar FlightControlPID_OuterLoop(), die de doelwaarden voor de PID-regelaar bijwerkt. Los hiervan wordt FlightControlPID_innerLoop() uitgevoerd als onderdeel van een reeks operaties in een callback naar de onderbreking van de TIM9-timergebeurtenis, die is geprogrammeerd om te worden uitgevoerd met 800 Hertz (Hz). Bij iedere onderbreking leest de callback-routine de sensorgegevens uit, filtert de onbewerkte gegevens en werkt de FIFO-buffers bij van de variabelen acc_ahrs en gyro_ahrs, die eerder werden genoemd als onderdeel van de hoofdlus. Met deze bijgewerkte gegevens over de huidige hoogte van de drone activeert de callback-routine de FlightControlPID_innerLoop(), die voor iedere motor een nieuwe PMW-waarde berekent. De callback voltooit het updateproces door met een call naar set_motor_pwm(), dat de PMW-output voor de microcontroller instelt op de nieuwe waarden.

Als ontwikkelaar is het eenvoudig om alternatieve scenario's voor vluchtbesturing te verkennen, door het open-source pakket aan te passen met verschillende tool chains. Enkele voorbeelden: de IAR Embedded Workbench for ARM, de microcontroller dev kit van KEIL RealView voor de STM32, en STMicroelectronics' eigen gratis geïntegreerde ontwikkelingsomgeving voor Windows, System Workbench for STM32. Na het schrijven van de aangepaste code kan de firmware naar de FCU worden geladen met ST-LINK/V2, een debugger en programmer van STMicroelectronics die in het circuit is ingebouwd, of met STM32 Nucleo, een dev board dat wordt aangesloten op het JTAG Serial Wire Debug (SWD) adapter-board dat wordt meegeleverd met de dronekit.

Conclusie

Dankzij het eenvoudige mechanische design zijn multirotor-drones snel populair geworden voor luchtfotografie, landbouwinspecties, surveillance en nog veel andere toepassingen. Met behulp van besturingsalgoritmes die worden gevoed met gegevens van intelligente sensoren kunnen deze drones geavanceerde software voor de vluchtbesturing inzetten, voor een stabiele werking en onmiddellijke reacties op de commando's van de drone-operator.

Natuurlijk kunnen ontwikkelaars de benodigde mechanische, elektrische en softwarecomponenten zelf verzamelen, maar de volledige development kit met een minidrone van STMicroelectronics biedt een eenvoudigere inleiding in het ontwerp en de werking van miniatuurdrones. Door de bijbehorende open-source software voor vluchtbesturing te bekijken of zelfs aan te passen, kunnen ontwikkelaars snel ervaring opdoen met de vluchtdynamica en de algoritmes voor de aansturing van multirotor-drones.

DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Achtergrondinformatie over deze auteur

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk heeft meer dan 20 jaar ervaring in het schrijven voor en over de elektronicasector met betrekking tot heel wat onderwerpen, waaronder hardware, software, systemen en toepassingen zoals het IoT. Hij behaalde zijn filosofiediplomain neurowetenschappen over neuronale netwerken en werkte in de ruimtevaartsector op massaal verspreide veilige systemen en algoritmeversnellingsmethoden. Wanneer hij geen artikels over technologie en techniek schrijft, werkt hij aan toepassingen voor “deep learning” voor herkennings- en aanbevelingssystemen.

Over deze uitgever

De Noord-Amerikaanse redacteurs van DigiKey