Üç jiroskop değerim, pitch, roll ve yaw var. Daha doğru değerler almak için Kalman filtresi eklemek istiyorum. Bir Kalman filtresi uygulayan opencv kütüphanesini buldum, fakat bunun nasıl olduğunu gerçekten anlayamıyorum.OpenCV Kalman filtresi
bana bana yardımcı olabilecek herhangi bir yardım verebilir misiniz? İnternette herhangi bir konu bulamadım.
Ben bir eksen için çalışmasını sağlamak için çalıştı.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);
}
ana
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;
yılında
Ve jiroskop verileri aldığınızda Ben, bu her şey aramak:
kalman_filter(prevr, mpe->getGyrosDegrees().roll);
ben kalman_filter düşünce Birinci parametre önceki değer ve ikinci akım değeridir. Ben değilim ve bu kod çalışmıyor ... Ben onunla bir sürü iş var biliyorum, ama devam etmek nasıl bilmiyorum, değiştirmek ne ...
Daha spesifik bir soru sormak isteyebilirsiniz. Kalman Filtresini veya uygulanmasını anlamakta sorun mu yaşıyorsunuz? –
dürüst olmak gerekirse, henüz Kalman filtresini anlamıyorum. Bu konuda bazı makaleler buldum, ama bu çok yüksek matematik içeriyor ... Ben jiroskopun bir ekseni için bir şey uygulamaya çalıştım, ama bilmiyorum, hangi değişkenin ne için olduğunu. Soruna bazı kodları ekliyorum. moment –
@Gabriel Schreiber: Sorunun bazı kodlarını ekledim. Yardım için teşekkürler! –