Come possiamo usare l'accelerometro per la stima dell'altitudine?


9

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.

inserisci qui la descrizione dell'immagine

  • 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:


Come stai calcolando l'offset gravitazionale? Che accelerometro è? Puoi collegare una scheda tecnica?
Chuck

1
l'oscillazione significa che devi smorzare !!!
holmeski,

1
Ricorda che durante lo scambio di stack, è meglio modificare la domanda per aggiungere le informazioni richieste nei commenti, piuttosto che aggiungere altri commenti. I commenti aiutano a migliorare le domande e le risposte e sono fonte di distrazione, quindi cerchiamo di mantenerli al minimo. Se al suo interno sono contenute tutte le informazioni necessarie per rispondere alla domanda, i commenti possono essere riordinati (eliminati).
Mark Booth

@Chuck Ho modificato il post con le informazioni pertinenti :)
user123456098

Sto lavorando allo stesso progetto, attualmente, sto implementando il controller PID Cascade per stabilizzare l'atteggiamento del quadricoptero usando Arduino, ora voglio lavorare in quota. Lo stai implementando senza la stima della velocità? E ho una domanda: devo stimare la trasformazione del telaio da terra a corpo o posso implementarla senza la trasformazione
SALAM ALBARADIE

Risposte:


10

Il barometro portato sul pixhawk ha una risoluzione in altitudine di 10 cm. Se ciò non bastasse, è possibile scrivere un filtro Kalman che utilizza i dati dell'accelerometro nella fase di previsione e il sensore a ultrasuoni e / o il barometro nella fase di correzione.

Ma non vedo questo risolvere il tuo problema. Una misurazione accurata dell'altitudine a 20 Hz dovrebbe essere sufficiente se tutto ciò che stai cercando di fare è mantenere l'altitudine.

Qual è la costante di tempo / frequenza naturale e lo smorzamento sul controller?

Immagino di non aver finito di leggere la tua domanda questa mattina (era prima del mio caffè). L'accelerazione dall'imu è la misura dell'accelerazione più la gravità. Per ottenere l'accelerazione inerziale dell'imu, sottrarre il vettore di gravità dalla misurazione. Non sarai mai in grado di controllare le misure di accelerazione integrate. Le misurazioni sono corrotte dal rumore e non hai modo di correggerlo.

--- risposta per controllare parte della domanda

Supponiamo che tutto ciò che stai cercando di fare sia mantenere un'altitudine e non ti preoccupi di mantenere una posizione per ora (anche se questo approccio funzionerà anche per quello). E supponendo che tu possa comandare qualsiasi spinta tu voglia (entro limiti ragionevoli), allora questo diventa un problema facile.

Sembra un primo passo alla dinamica del sistema

z¨=um-g

dove positivo zè su. Aggiungiamo un componente hover al nostro acceleratore che si occupa della gravità. Così

u=ufB+uhover

Le nostre nuove dinamiche sembrano

z¨=ufB+uhoverm-g=ufBm

Freddo! Ora progettiamo una legge di controllo in modo da poter virare sull'altitudine desiderata.

Il nostro sistema di controllo sarà una molla virtuale e un ammortizzatore tra il nostro quad e l'altitudine desiderata (questo è un controller pd).

z¨=Kp(zdeS-z)+Kd(z˙deS-z˙)

Il sistema ora dovrebbe comportarsi come un sistema del secondo ordine. Kp e Kd può essere scelto per ottenere il rapporto di smorzamento e la frequenza naturale che stai cercando.

A questo punto vorrei ribadire che l'integrazione dei dati dell'accelerometro non è un buon metodo per generare stime di stato. Se vuoi davvero hackerare qualcosa insieme velocemente, inserisci le misure del sonar attraverso un filtro passa-basso con una frequenza di drop-off appropriata. Il tuo veicolo non oscillerà a 20Hz, quindi controllare solo i dati del sonar andrà bene.


1
Grazie, ho appena finito di implementarlo 4 giorni fa e ha funzionato con oscillazioni molto minime + -2 cm
user123456098

felice di sentirlo! dovresti essere in grado di uccidere le oscillazioni aumentando kd supponendo di avere una buona stima della velocità :)
holmeski
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.