Assemblare, lanciare, esplorare e sviluppare mini droni utilizzando un kit completo

Di Stephen Evanczuk

Contributo di Editori nordamericani di DigiKey

I droni a quattro rotori, o quadricotteri, hanno ruoli sempre più importanti in numerose applicazioni, ma la loro progettazione è un lavoro complesso che richiede la conoscenza dei sottosistemi meccanici, elettronici e software. Anche se i progettisti possono benissimo imparare quanto necessario, un kit di sviluppo può offrire un enorme vantaggio, in quanto comprende tutti gli elementi necessari per maturare esperienza nella teoria e nella pratica del volo dei droni.

Questo articolo descrive un kit di sviluppo di STMicroelectronics che offre agli sviluppatori un mini drone quadricottero semplice da montare ma utile per dimostrare compiutamente i complessi sistemi di controllo di volo alla base di qualsiasi veicolo aereo a più rotori.

La dinamica dei quadricotteri

Nella loro forma più diffusa, i quadricotteri offrono una piattaforma particolarmente stabile per numerose applicazioni, fra cui fotografia aerea, rilievi sul territorio, sorveglianza, e altre ancora. A differenza dei velivoli ad ala fissa o anche degli elicotteri con rotori a passo variabile, i droni multirotore a passo fisso sono relativamente semplici da progettare e facili da costruire grazie all'ampia disponibilità di piccoli ed efficienti motori c.c.

La semplicità meccanica e la stabilità aerodinamica di questi droni sono dovute all'uso coordinato dei loro rotori per controllare le manovre, piuttosto che alle superfici di volo dei velivoli ad ala fissa o a una combinazione di rotore principale e rotore di coda degli elicotteri.

In un quadricottero la coppia di motori posizionati sulla diagonale della struttura gira nella stessa direzione ma nella direzione opposta rispetto agli altri due motori. Se tutti e quattro i motori girano alla stessa velocità, il drone può salire, scendere o rimanere in volo livellato. Se la coppia sulla diagonale gira più velocemente dell'altra, il drone si imbarda, ruotando intorno al suo baricentro e rimanendo sullo stesso piano orizzontale (Figura 1, a sinistra).

Figura 1: Per le manovre, i droni utilizzano diverse combinazioni di velocità del rotore. Ad esempio accelerano entrambi i motori in una coppia diagonale (M2, M4) in una manovra di imbardata (a sinistra) o accelerano un motore sulla diagonale (M2) e rallentano contemporaneamente la sua controparte sulla diagonale (M4) per completare una manovra più complessa di beccheggio-rollio (a destra). (Immagine per gentile concessione di STMicroelectronics)

Se si cambia la velocità dei rotori di testa (o di coda), il drone punta in alto o in basso come un velivolo ad ala fissa che cabra o picchia. Una regolazione simile della coppia di sinistra o di destra causerà il rollio del drone, facendolo ruotare intorno al suo asse. I droni possono facilmente mettersi in assetti di volo più complessi (combinazioni di beccheggio, imbardata e rollio) regolando le rispettive velocità di una coppia di motori sulla diagonale o di un singolo motore (Figura 1, a destra).

Spetta al sistema di controllo di volo del drone cambiare la velocità dei rotori appropriati per ottenere l'assetto di volo richiesto per completare la manovra desiderata.

In pratica, il sistema di controllo deve regolare costantemente la velocità dei rotori non solo durante una virata, ma anche durante il volo livellato per apportare correzioni a seguito di una forza perturbante come il vento, le termiche o una turbolenza. Anche nel caso di un mini drone che opera al chiuso, un sistema di controllo di volo deve poter misurare la differenza tra il suo assetto effettivo e quello desiderato.

Per un ingegnere, la correzione delle velocità dei rotori in base a un segnale di errore è un problema comune di feedback dell'anello di controllo che viene risolto con un controller proporzionale, integrale, derivativo (PID). Rimane un'unica sfida concettuale: trovare un metodo per misurare l'assetto del drone. In questo caso la soluzione viene dall'uso di sensori intelligenti ad alta precisione che forniscono i dati necessari a calcolare gli angoli di Eulero.

Gli angoli di Eulero rappresentano l'orientamento sul piano XYZ di un oggetto rispetto a un piano di riferimento xyz, in cui i due piani si intersecano lungo una linea N (Figura 2). Gli angoli di Eulero vengono quindi definiti come segue:

  • α, l'angolo tra l'asse x e N
  • ß, l'angolo tra gli assi z e Z
  • γ, l'angolo tra N e l'asse X

Figura 2: Gli angoli di Eulero (α, ß, γ) descrivono l'orientamento relativo di un sistema ruotato (XYZ) rispetto a uno di riferimento fisso (xyz) che si intersecano nella linea N. (Immagine per gentile concessione di Wikimedia Commons CC BY 3.0)

Per un sistema di controllo di volo, il piano dell'oggetto e il piano di riferimento corrispondono direttamente all'orientamento corrente (XYZ) del drone e al suo assetto desiderato (xyz). Da parte loro, gli angoli di Eulero indicano le rotazioni assiali richieste per portare il drone nell'assetto desiderato. Sebbene i giroscopi meccanici abbiano fornito per anni i dati grezzi utilizzati per determinare l'orientamento corrente, la disponibilità di accelerometri e giroscopi MEMS (sistema microelettromeccanico) ad alta precisione ha permesso di applicare questo metodo anche a mini droni leggeri.

Oggi, i droni di qualsiasi forma e dimensioni si affidano a un sistema di riferimento di rotta e di assetto (AHRS) basato su sensori che immette le informazioni di posizione nei calcoli degli angoli di Eulero. Gli angoli di Eulero vengono a loro volta utilizzati per creare il segnale di errore per un controller PID che gestisce le velocità dei motori per ottenere la manovra di volo desiderata. La sfida consiste nell'applicare questo approccio con un software su una piattaforma mobile in grado di eseguire i calcoli e le correzioni dei motori con la velocità e la precisione richieste.

Il kit mini drone STEVAL-DRONE01 di STMicroelectronics e il relativo software forniscono un esempio pratico di questo approccio e servono da base per entrare nei dettagli dei sistemi di controllo di volo dei droni.

Kit mini drone pronto per il volo

Il kit STEVAL-DRONE01 contiene tutti i componenti necessari per costruire un piccolo quadricottero. Oltre a un telaio in plastica, il kit comprende quattro motori c.c. senza nucleo 8520 di 8,5x20 mm, da 3,7 V, ognuno dei quali ha una capacità di spinta di circa 35 grammi con le eliche di 65 mm incluse. I motori e le eliche sono forniti in due coppie configurate per la rotazione in senso orario e antiorario. Quando è interamente assemblato con la batteria ai polimeri di litio (LiPo) da 3,7 V, il peso lordo del drone, o peso totale (AUW), è inferiore a 70 grammi e offre approssimativamente il rapporto spinta-peso di 2:1, ottimale per il suo funzionamento.

A parte i componenti meccanici, tuttavia, il pezzo più importante del kit è costituito dalla scheda FCU (centralina di volo) STEVAL-FCU001V1 di STMicroelectronics e dal relativo pacchetto software, a cui si devono le capacità del sistema di controllo di volo ricordate sopra. La scheda FCU è un sofisticato sistema multisensore ad alta efficienza energetica con connettività Bluetooth Low Energy (BLE) (Figura 3).

Figura 3: L'unità di controllo di volo STEVAL-FCU001V1 di STMicroelectronics è un sistema multisensore completo alimentato a batteria con connettività BLE e azionamento di motori c.c. (Immagine per gentile concessione di STMicroelectronics)

Realizzata attorno al microcontroller STM32F401 di STMicroelectronics basato su Arm® Cortex®-M4 a 32 bit, la scheda comprende tre diversi sensori MEMS per misurare le diverse caratteristiche relative al posizionamento e alla navigazione dei droni, tra cui:

  • L'unità di misurazione inerziale (IMU) iNEMO LSM6DSL di STMicroelectronics integra un accelerometro e un giroscopio necessari per la funzionalità AHRS
  • Il magnetometro LIS2MDL di STMicroelectronics fornisce i dati per implementare le funzioni di rilevamento della direzione
  • Il sensore di pressione LPS22HD di STMicroelectronics fornisce i dati per determinare il posizionamento verticale con una risoluzione di 8 cm

Sul lato di ingresso dei sensori, il microcontroller STM32F401 della FCU si collega con tutti i sensori attraverso un bus SPI condiviso. Sul lato di uscita dei motori, il timer per uso generale TIM4 del microcontroller fornisce il segnale modulato in larghezza di impulso (PWM) utilizzato per controllare i gate dei transistor di potenza MOSFET STL6N3LLH6 di STMicroelectronics che pilotano i motori c.c. del drone.

Per ricevere i comandi di controllo utente, la FCU offre due opzioni: gli utenti possono controllare il drone da uno smartphone con una connessione Bluetooth utilizzando il modulo su scheda SPBTLE-RF di STMicroelectronics che include il transceiver BlueNRG-MS della società con uno stack Bluetooth completo con ottimizzazione della potenza. In alternativa, possono utilizzare una console di controllo remoto (remocon) standard basata su PWM di controllo radio (RC). Da ultimo, per la gestione del consumo energetico e della batteria, la scheda include il CI di un caricabatterie agli ioni di litio STC4054 di STMicroelectronics e un regolatore a bassa caduta di tensione (LDO) LD39015.

Come indicato nella Figura 3, la FCU supporta anche il collegamento a un controller elettronico esterno (ESC) della velocità, ad esempio STEVAL-ESC001V1 di STMicroelectronics. Un ESC consente a un sistema di pilotare motori trifase più potenti, permettendo di usare la FCU in progetti di quadricotteri più performanti.

Per semplificare la preparazione e il controllo di volo, il kit viene fornito preconfigurato per utilizzare l'opzione di connessione Bluetooth tramite l'app per cellulari Android STDrone di STMicroelectronics. Progettata come una console remocon virtuale, l'app fornisce agli utenti un'interfaccia di controllo di volo semplice, con icone di controllo e due joystick virtuali (Figura 4).

Figura 4: L'app per cellulari Android STDrone di STMicroelectronics fornisce agli utenti una console di controllo remoto virtuale per pilotare un mini drone costruito con il kit di sviluppo STEVAL-DRONE01 della società. (Immagine per gentile concessione di STMicroelectronics)

Una volta assemblato il drone, l'operatore può utilizzare l'app STDrone per lanciarlo e controllarlo con il proprio dispositivo mobile. Prima del decollo, deve posizionare il drone su una superficie piana e toccare l'icona di calibrazione dell'app finché non diventa verde, segno che la calibrazione è stata completata. Per motivi di sicurezza, i motori del drone vengono inizialmente disabilitati tramite software; per "abilitare" il drone l'utente deve premere un'altra icona dell'app. A questo punto, l'interfaccia utente dell'app funziona come una console remocon, permettendo all'utente di muovere i joystick virtuali per regolare la velocità dei rotori del drone e l'assetto di volo.

Sebbene all'ultraleggero di STMicroelectronics manchino la massa e la potenza necessarie per un uso prolungato all'esterno, gli operatori devono essere consapevoli delle limitazioni di volo dei droni nell'area operativa prevista. Agli operatori di mini droni potrebbe non essere richiesto il possesso di un licenza o la registrazione di droni molto piccoli di questa classe. In ogni caso, sono tenuti al rispetto dei requisiti.

I requisiti di volo includono il mantenimento della linea di vista, un'altitudine massima di 120 metri e il non ingresso in zone di interdizione al volo, ad esempio entro 8 km da un aeroporto in Italia, evitando di volare in prossimità di eventi sportivi o vicino a operazioni di emergenza, e non solo. Gli operatori di droni possono utilizzare app per cellulari quali B4UFLY della Federal Aviation Administration negli Stati Uniti o Drone Assist della National Air Traffic Agency (NATS) nel Regno Unito. Entrambe forniscono informazioni sulle limitazioni dello spazio aereo locale in base alla posizione GPS dell'utente.

Software di controllo di volo

Per gli ingegneri, una caratteristica interessante della FCU del kit del drone di STMicroelectronics è il suo pacchetto software, che STMicroelectronics tiene in un repository github open-source. Basata sulla struttura del tool STM32Cube di STMicroelectronics, l'applicazione poggia sullo stack Bluetooth middleware e su un driver sottostante. Il livello del driver gestisce i dettagli dell'interazione hardware utilizzando il livello di astrazione hardware di STM32Cube (HAL) e il BSP (Board Support Package) STEVAL-FCU001V1, che include i driver per i dispositivi della scheda FCU descritti prima.

L'architettura software per l'applicazione è costruita attorno a tre moduli separati: uno per il controllo remoto, uno per la determinazione della posizione e uno per il controllo PID (Figura 5):

  • Il modulo di controllo remoto gestisce l'input dall'app per cellulari STDrone o da una console remocon RC, raccogliendo i dati dall'app o convertendo quelli PWM remocon, prima di tradurne i valori in angoli di Eulero per l'assetto di volo desiderato.
  • Il modulo di determinazione della posizione raccoglie i dati dell'accelerometro e del giroscopio dall'IMU LSM6DSL per utilizzarli nella stima della posizione AHRS necessaria per calcolare gli angoli di Eulero per l'assetto di volo corrente del drone. Anche i dati del magnetometro LIS2MDL e del sensore di pressione LPS22HD vengono raccolti ma non sono utilizzati per i calcoli del controllo di volo dei droni nella versione software disponibile quando è stato scritto questo articolo.
  • Il modulo di controllo PID completa il calcolo dell'errore di posizione utilizzando la differenza tra gli angoli di Eulero per l'assetto desiderato rispetto a quello corrente. Servendosi di metodi di controllo PID convenzionali, questo modulo utilizza quel segnale di errore per regolare la velocità di ogni motore al fine di portare il drone all'assetto desiderato.

Figura 5: Le funzionalità del software di controllo di volo dei mini droni di STMicroelectronics poggiano su moduli separati per gestire l'ingresso per il controllo remoto (riquadri blu, etichettati (1)), determinare la posizione (riquadri rossi, (2)) e il controllo PID (riquadro blu scuro, (3)). Il controllo PID pilota i quattro motori del quadricottero. (Immagine per gentile concessione di STMicroelectronics)

Utilizzando questa architettura funzionale, l'applicazione del drone combina questi moduli nel flusso di lavoro necessario per tradurre i comandi utente per le manovre nelle regolazioni della velocità dei motori richieste per eseguirle (Figura 6). Malgrado una funzionalità generale complessa, l'anello principale per l'aggiornamento dei parametri di controllo di volo è relativamente semplice.

Figura 6: Il software di controllo di volo dei mini droni di STMicroelectronics implementa un flusso di lavoro che legge in modo continuo i dati dei sensori per aggiornare l'assetto di volo corrente del drone e regolare la velocità dei suoi quattro motori al fine di ottenere la combinazione di spinta, beccheggio, rollio e imbardata desiderata. (Immagine per gentile concessione di STMicroelectronics)

Dopo una serie di chiamate per inizializzare i sistemi hardware e software, la routine principale dell'applicazione, main.c, entra in un anello infinito (Listato 1). All'interno di questo anello principale, il processo di aggiornamento utilizza una serie di chiamate per eseguire gli algoritmi principali di controllo di volo descritti in precedenza.

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);
      
  . . .

    }
  . . .
  }

All'interno di questo anello, il timer TIM9 per uso generale del microcontroller funge da flag di evento per controllare la velocità di aggiornamento. Quando si verifica l'evento del timer di aggiornamento, l'anello principale chiama la routine di aggiornamento AHRS, ahrs_fusion_ag(), che utilizza gli ultimi dati dell'accelerometro (acc_ahrs) e del giroscopio (gyro_ahrs) per eseguire i calcoli della fusione dei sensori coinvolti nell'aggiornamento. I dati risultanti, che sono in forma di quaternione, vengono poi utilizzati dalla routine QuaternionToEuler() per calcolare gli angoli di Eulero per l'assetto di volo corrente del drone.

A questo punto dell'anello principale, l'applicazione raccoglie i dati sull'assetto di volo desiderato utilizzando i dati Bluetooth, se è abilitato Bluetooth (#ifdef REMOCON_BLE), o la console RC esterna se è abilitata questa console. A questo punto, il codice aggiorna quattro variabili che rispecchiano i dati convenzionali della console RC: gRUD (posizione del timone, o imbardata), gAIL (posizione dell'alettone, o rollio), gELE (posizione dell'elevatore, o beccheggio) e gTHR (posizione dell'acceleratore). Dopo aver raccolto questi dati, l'anello utilizza la routine GetTargetEulerAngle() per calcolare gli angoli di Eulero dell'assetto di volo desiderato, come comandato dall'operatore del drone. Prima di questo calcolo, però, questa sezione dell'anello dimostra una caratteristica che è di importanza critica per l'operatore del drone. Se, per un qualche motivo, la connessione Bluetooth si è interrotta, il codice spegne i motori, il che provoca ovviamente una picchiata incontrollata e immediata del drone. Un'estensione software ovvia ma di non scarso rilievo potrebbe utilizzare il magnetometro LIS2MDL e i dati del sensore di pressione LPS22HD per riportare il drone al suo punto di partenza e farlo atterrare con una discesa controllata prima di spegnere i motori.

L'anello principale si conclude con una chiamata a FlightControlPID_OuterLoop() che aggiorna i valori di destinazione per il controller PID. Separatamente, FlightControlPID_innerLoop() viene eseguito come parte di una sequenza di operazioni eseguite in un callback all'interrupt associato all'evento timer TIM9, programmato per funzionare a 800 Hz. A ogni interruzione, la routine di callback legge i sensori, filtra i dati grezzi e aggiorna i buffer first-in first-in first-out (FIFO) associati alle variabili acc_ahrs e gyro_ahrs ricordate in precedenza come parte dell'anello principale. Utilizzando questi dati aggiornati sull'assetto di volo corrente del drone, la routine di callback richiama FlightControlPID_innerLoop(), che calcola i nuovi valori PWM per ogni motore. Il callback completa il processo di aggiornamento richiamando set_motor_pwm(), che imposta le uscite PWM del microcontroller sui nuovi valori.

Gli sviluppatori possono facilmente esplorare scenari di controllo di volo alternativi modificando il pacchetto software open-source con una serie di catene di strumenti, tra cui IAR Embedded Workbench per ARM, il kit di sviluppo di microcontroller KEIL RealView per STM32 e l'ambiente di sviluppo integrato (IDE) gratuito System Workbench for STM32 basato su Windows di STMicroelectronics. Dopo aver compilato il codice modificato, gli sviluppatori possono caricare il proprio firmware nella FCU utilizzando un debugger in-circuit e un programmatore ST-LINK/V2 di STMicroelectronics oppure la scheda di sviluppo STM32 Nucleo di STMicroelectronics collegata alla scheda di espansione JTAG Serial Wire Debug (SWD) in dotazione con il kit.

Conclusione

Grazie alla semplicità della loro progettazione meccanica, i droni multirotore sono diventati una scelta molto diffusa per la fotografia aerea, i rilievi sul territorio, la sorveglianza e molte altre applicazioni. Utilizzando algoritmi di controllo alimentati da sensori intelligenti, questi droni impiegano sofisticati software di controllo di volo in grado di supportare operazioni stabili e di rispondere rapidamente ai comandi di manovra dell'operatore.

Gli sviluppatori possono trovare e assemblare da soli i componenti meccanici, elettrici e software necessari, ma il kit di sviluppo mini drone completo offerto da STMicroelectronics facilita la progettazione di mini droni e il loro funzionamento. Esplorando e modificando il software di controllo di volo open-source in dotazione col kit, gli sviluppatori possono maturare rapidamente esperienza sulla dinamica di volo dei droni multirotore e sugli algoritmi di controllo.

DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk ha più di 20 anni di esperienza come autore sull'industria elettronica e ha scritto su una vasta gamma di argomenti tra cui hardware, software, sistemi e applicazioni, incluso l'IoT. Ha ricevuto un Ph.D. in neuroscienze sulle reti neuronali e ha lavorato nel settore aerospaziale su sistemi di sicurezza ampiamente distribuiti e sui metodi di accelerazione algoritmica. Attualmente, quando non scrive articoli su tecnologia e ingegneria, lavora su applicazioni di deep learning per i sistemi di riconoscimento e di raccomandazione.

Informazioni su questo editore

Editori nordamericani di DigiKey