Progettazione dello stato meccanico

3

Voglio scrivere una libreria per la stima dello stato meccanico di un veicolo. Questo è, stimare le variabili come posizione, velocità e così via, usando le informazioni fornite da diverse misurazioni del sensore (GPS, IMU, ...).

Queste sono cose da tenere a mente:

  • Non sono un programmatore esperto.
  • L'algoritmo di stima sarà il filtro di Kalman.
  • La libreria è destinata ad essere utilizzata in sistemi in tempo reale.
  • Voglio scrivere la libreria in entrambi, C ++ e Java.
  • Penso che un design orientato agli oggetti possa essere d'aiuto, ma quello che voglio veramente è che il codice sia efficiente (aggiornamenti veloci, dato che potremmo volere che fosse eseguito in microcontrollori, come quelli in Arduino o Raspberry Pi Ci sono IMU in grado di fornire dati a 1000 Hz, ma il tasso di aggiornamento più veloce che ho raggiunto con Arduino è di circa 50 Hz).

Ho alcune considerazioni che l'implementazione dovrebbe soddisfare:

  • Lo stato stimato deve essere previsto utilizzando la nostra conoscenza del processo.
  • Lo stato stimato deve essere aggiornato fondendo le informazioni di un set di sensori.
  • Potremmo essere interessati a diverse stime di stato, ciascuna costruita da informazioni diverse (da diversi set di sensori, da misurazioni prese a frequenze diverse, ...).
  • Ogni sensore dà misurazioni che sono correlate in modo diverso con lo stato del sistema, quindi ogni sensore dovrebbe avere un metodo '' update () '' diverso.
  • Ogni sensore ha diversa posizione, orientamento, calibrazioni e caratteristiche.
  • Mi piacerebbe poter espandere la libreria aggiungendo tipi di sensori o variabili allo stato in modo semplice.

Ho delineato un progetto preliminare per la libreria:

Infine,ledomandesono:

  • Sapendochevogliounaccessovelocecomeposible,¿comepossoavereaccessodirettoallevariabilidistatodaimetodi''update()''diInformationSources?HolettocheperJavahopotutodefinirele2classinellostessopacchettoedefinirelevariabilicomeprotette.Conoscoanchelaparolachiave"amico" in C ++. Ma non so se queste sono buone pratiche.
  • Apprezzerei qualsiasi altra possibile idea, quindi, hai ideato qualche altro progetto?
posta pablo bernal 29.11.2016 - 13:55
fonte

2 risposte

3

Ricorda che un filtro Kalman generale richiede diverse moltiplicazioni e aggiunte di matrice e almeno un'inversione di matrice, su ogni ciclo di previsione / aggiornamento.

Anche se si arriva a un filtro scalare, in cui l'inversione della matrice si trasforma in una divisione semplice, si sta ancora facendo un bel po 'di matematica.

Non preoccuparti troppo dell'efficienza dell'accesso al tuo vettore di stato dall'esterno del tuo estimatore. A meno che non si scelga un modo davvero pratico per accedere, gli aggiornamenti del filtro di Kalman probabilmente domineranno la cronologia.

    
risposta data 30.11.2016 - 00:33
fonte
2

[H]ow can I have direct access to variables of State from ''update()'' methods of InformationSources?

Questo è quasi certamente un caso di ottimizzazione prematura .

Non è chiaro quali siano i tuoi requisiti di rendimento effettivi (dovresti pensare a definirli), ma è altamente improbabile che il sovraccarico di alcune chiamate di metodo possa fare la differenza se soddisfi tali requisiti.

Dovresti implementarlo normalmente, con metodi per ottenere le informazioni che ti servono.

Nell'improbabile caso che questo diventi un problema di prestazioni, puoi riscriverlo per funzionare in un altro modo (un requisito di prestazione sarebbe una giustificazione ragionevole per rompere la normale regola delle "buone pratiche" di non accedere direttamente alle variabili di classe. suggerirei che i metodi proposti siano soddisfacenti, nel caso in cui avessi bisogno di una soluzione).

    
risposta data 29.11.2016 - 15:23
fonte

Leggi altre domande sui tag