Ho tre valori di giroscopio, beccheggio, rollio e imbardata. Vorrei aggiungere il filtro Kalman per ottenere valori più accurati. Ho trovato la libreria opencv, che implementa un filtro di Kalman, ma non riesco a capirlo come funziona davvero.Filtro OpenCV Kalman
Potrebbe darmi qualche aiuto che possa aiutarmi? Non ho trovato argomenti correlati su internet.
Ho provato a farlo funzionare per un asse.
const float A[] = { 1, 1, 0, 1 };
CvKalman* kalman;
CvMat* state = NULL;
CvMat* measurement;
void kalman_filter(float FoE_x, float prev_x)
{
const CvMat* prediction = cvKalmanPredict(kalman, 0);
printf("KALMAN: %f %f %f\n" , prev_x, prediction->data.fl[0] , prediction->data.fl[1]);
measurement->data.fl[0] = FoE_x;
cvKalmanCorrect(kalman, measurement);
}
nel principale
kalman = cvCreateKalman(2, 1, 0);
state = cvCreateMat(2, 1, CV_32FC1);
measurement = cvCreateMat(1, 1, CV_32FC1);
cvSetIdentity(kalman->measurement_matrix,cvRealScalar(1));
memcpy(kalman->transition_matrix->data.fl, A, sizeof(A));
cvSetIdentity(kalman->process_noise_cov, cvRealScalar(2.0));
cvSetIdentity(kalman->measurement_noise_cov, cvRealScalar(3.0));
cvSetIdentity(kalman->error_cov_post, cvRealScalar(1222));
kalman->state_post->data.fl[0] = 0;
E io chiamo questo ogni volta, quando ricevo dati dal giroscopio:
kalman_filter(prevr, mpe->getGyrosDegrees().roll);
ho pensato in kalman_filter il primo parametro è il valore precedente e la seconda è il valore del curriculum. Io non sono e questo codice non funziona ... So che ho molto lavoro con esso, ma non so come continuare, cosa cambiare ...
È possibile che si desideri porre una domanda più specifica. Hai difficoltà a capire il filtro Kalman o la sua implementazione? –
a dire il vero, non capisco ancora il filtro di Kalman. Ho trovato alcuni articoli a riguardo, ma questo contiene una matematica molto alta ... Ho provato a implementare qualcosa per un asse del giroscopio, ma non lo so, per quale variabile è la cosa giusta. Aggiungo del codice alla domanda momento –
@Gabriel Schreiber: ho aggiunto del codice alla domanda. Grazie dell'aiuto! –