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?