Attualmente sto implementando un quadricottero autonomo che di recente ho fatto volare e che era stabile, ma non è in grado di correggersi in presenza di significativi disturbi esterni. Presumo che ciò sia dovuto a guadagni PID non sufficientemente sintonizzati che devono essere ulteriormente modificati in volo.
Progresso corrente:
- Ho escluso un barometro poiché lo scopo della mia ricerca è solo il volo indoor e il barometro ha una deviazione di + -5 metri secondo il mio collega.
- Attualmente sto usando un sensore a ultrasuoni (HC-SR04) per la stima dell'altitudine che ha una risoluzione di 0,3 cm. Tuttavia, ho scoperto che la frequenza di aggiornamento del sensore a ultrasuoni di 20Hz è troppo lenta per ottenere una risposta abbastanza veloce per la correzione dell'altitudine.
- Ho cercato di utilizzare le accelerazioni sull'asse Z dall'accelerometro per ottenere i dati di altezza integrando l'accelerazione per ottenere la velocità da utilizzare per il PID di velocità in uno schema di controller pid in cascata. L'attuale implementazione per il controller PID di altitudine è un controller pid a loop singolo che utilizza un controller P con l'ingresso di posizione dal sensore a ultrasuoni.
- Avevo preso in considerazione le misure di accelerazione negativa dovute alla gravità, ma non importa quanto calcoli l'offset, esiste ancora l'esistenza di un'accelerazione negativa (ad es. -0.0034). Ho calcolato l'offset gravitazionale impostando il quadricottero su una superficie piana, quindi raccogliendo 20.000 campioni dall'asse z dell'accelerometro da calcolare in media per ottenere lo "offset" che viene memorizzato come variabile costante. Questa variabile viene quindi sottratta dall'uscita dell'asse z dell'accelerometro per rimuovere l'offset e portarlo a "zero" se non sta accelerando. Come detto nella domanda, esiste ancora l'esistenza di un'accelerazione negativa (ad es. -0,0034). Il mio quad procede quindi a salire costantemente in quota. Con solo il controller P del sensore a ultrasuoni, il mio quad oscilla di 50 cm.
In che modo è possibile gestire efficacemente questa lettura coerente dell'accelerazione negativa?
Possibile soluzione : sto pianificando di eseguire un controllo PID a cascata per il mantenimento dell'altitudine con il ciclo interno (controller PID) utilizzando l'accelerometro e il circuito esterno (controller P) utilizzando il sensore sonar. Il mio consulente ha detto che anche un solo controller P ad anello singolo è sufficiente per far sì che il quadricottero mantenga la sua altitudine anche con un sensore lento. È abbastanza? Ho notato che con solo il guadagno P, il quadricoptero avrebbe superato la sua altitudine.
Leaky Integrator: ho trovato questo articolo che spiega come ha gestito le accelerazioni negative utilizzando un integratore che perde, ma ho un po 'di problemi a capire perché dovrebbe funzionare poiché penso che l'errore negativo si trasformerebbe in un errore positivo non risolvendo il problema. Non sono molto sicuro. http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
Controller PD a loop singolo con solo il sensore a ultrasuoni: è possibile utilizzare il feedback di un sensore lento?
fonti:
LSM303DLHC Datasheet: http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf
Integratore che perde: http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
Ciclo PID ArduPilot: http://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg