roboforum.ru

Технический форум по робототехнике.

Кальмана алгоритм (ссылка видео)

Кальмана алгоритм (ссылка видео)

mandigit » 23 авг 2009, 13:18

Наверное в этот раздел имеет смысл поместить видео о том, как работает пара гироскоп (измеритель угловой скорости)+акселерометр, информация от которых прошла через фильтр кальмана

http://www.youtube.com/watch?v=AWAFFZ7r ... r_embedded


Re: Кальмана алгоритм (ссылка видео)

Duhas » 23 авг 2009, 13:38

мило работает )

Re: Кальмана алгоритм (ссылка видео)

MiBBiM » 23 авг 2009, 13:51

не отображена стабилизация только гироскопом

Re: Кальмана алгоритм (ссылка видео)

executer » 24 авг 2009, 17:24

Лучшеб сорц каконить...
Ато в учебнике слишком вумно написано. :sorry:

Re: Кальмана алгоритм (ссылка видео)

GlassEagle » 10 авг 2010, 00:14

Думается, сорцев мы не дождёмся...

В связи с чем вопрос - а какая вообще сверхзадача возлагается в робототехнике на фильтр Камлана? Только фильтрация данных? Может тогда проще (в том числе и для микроконтроллера) какой-нить менее вумный алгоритм взять (зато и без корреляционных мать их матриц) - какую-нить тупую низкочастотную фильтрацию???

Вот картинка (верхняя) с сайта http://www.basegroup.ru/library/cleaning/kalmanfilter/ иллюстрирующая калмановскую фильтрацию.

И вот элементарная (до примитивности) дискретная низкочастотная (нерекуррентная, заметьте) т.н. "скользящим окном" (ну, тупая до безобразия) фильтрация с размером окна 7 отсчётов (т.е. текущий, и +-3 в каждую сторону).

Если сравнивать правый вариант фильтра Калмана, то, как гритца, найдите 10 отличий (ну, конечно, присутствуют краевые эффекты, но во-1-х, их парировать надо только там, где их присутствие может быть критичным, и во-2-х, их парирование - это вам не расчёт корреляционных, ковариационных и прочих матьриц).
Вложения
Kalman_example.gif
Kalman_example.gif (3.47 КиБ) Просмотров: 14749
LPF7.png
LPF7.png (3.19 КиБ) Просмотров: 14874

Re: Кальмана алгоритм (ссылка видео)

=DeaD= » 10 авг 2010, 07:36

Значит вы так и не поняли смысл фильтра Калмана :)

Re: Кальмана алгоритм (ссылка видео)

Ворон » 11 авг 2010, 16:58

устойчиво все же калман отфильтровывает случайные положения мне понравилось) :good:

Re: Кальмана алгоритм (ссылка видео)

GlassEagle » 12 авг 2010, 00:49

Вот примеры из библиотеки MRPT (на английском), на Си++, с шаблонами (ессесно с объектным программированием): http://www.mrpt.org/Kalman_Filters

И ещё ссылка оттуда же
http://browse-code.mrpt.org/stable/samp ... nTracking/

И там (http://browse-code.mrpt.org/stable/) ещё если полазить, то есть SLAM на фильтре Калмана.
------------------------

Добавлено 2010/aug/12:
Пример на Питоне с http://www.scipy.org/Cookbook/KalmanFiltering

Код: Выделить всёРазвернуть
# Kalman filter example demo in Python

# A Python implementation of the example given in pages 11-15 of "An
# Introduction to the Kalman Filter" by Greg Welch and Gary Bishop,
# University of North Carolina at Chapel Hill, Department of Computer
# Science, TR 95-041,
# http://www.cs.unc.edu/~welch/kalman/kalmanIntro.html

# by Andrew D. Straw

import numpy
import pylab

# intial parameters
n_iter = 50
sz = (n_iter,) # size of array
x = -0.37727 # truth value (typo in example at top of p. 13 calls this z)
z = numpy.random.normal(x,0.1,size=sz) # observations (normal about x, sigma=0.1)

Q = 1e-5 # process variance

# allocate space for arrays
xhat=numpy.zeros(sz)      # a posteri estimate of x
P=numpy.zeros(sz)         # a posteri error estimate
xhatminus=numpy.zeros(sz) # a priori estimate of x
Pminus=numpy.zeros(sz)    # a priori error estimate
K=numpy.zeros(sz)         # gain or blending factor

R = 0.1**2 # estimate of measurement variance, change to see effect

# intial guesses
xhat[0] = 0.0
P[0] = 1.0

for k in range(1,n_iter):
    # time update
    xhatminus[k] = xhat[k-1]
    Pminus[k] = P[k-1]+Q

    # measurement update
    K[k] = Pminus[k]/( Pminus[k]+R )
    xhat[k] = xhatminus[k]+K[k]*(z[k]-xhatminus[k])
    P[k] = (1-K[k])*Pminus[k]

pylab.figure()
pylab.plot(z,'k+',label='noisy measurements')
pylab.plot(xhat,'b-',label='a posteri estimate')
pylab.axhline(x,color='g',label='truth value')
pylab.legend()
pylab.xlabel('Iteration')
pylab.ylabel('Voltage')

pylab.figure()
valid_iter = range(1,n_iter) # Pminus not valid at step 0
pylab.plot(valid_iter,Pminus[valid_iter],label='a priori error estimate')
pylab.xlabel('Iteration')
pylab.ylabel('$(Voltage)^2$')
pylab.setp(pylab.gca(),'ylim',[0,.01])
pylab.show()

Нижние два фрагмента (начиная с pylab.figure()) - похоже, рисование тех картинок, которые показаны на сайте (т.е. к самому вычислению эти куски отношения не имеют).

Ещё библиотека есть на http://kalman.sourceforge.net/ - "Free C++ Extended Kalman Filter Library"

Ещё пример на Си (не ++ :)): http://snippets.dzone.com/posts/show/11215 "Simple Kalman Filter in C"

Код: Выделить всёРазвернуть
/** A simple kalman filter example by Adrian Boeing 
www.adrianboeing.com
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double frand() {
    return 2*((rand()/(double)RAND_MAX) - 0.5);
}

int main() {

    //initial values for the kalman filter
    float x_est_last = 0;
    float P_last = 0;
    //the noise in the system
    float Q = 0.022;
    float R = 0.617;
   
    float K;
    float P;
    float P_temp;
    float x_temp_est;
    float x_est;
    float z_measured; //the 'noisy' value we measured
    float z_real = 0.5; //the ideal value we wish to measure
   
    srand(0);
   
    //initialize with a measurement
    x_est_last = z_real + frand()*0.09;
   
    float sum_error_kalman = 0;
    float sum_error_measure = 0;
   
    for (int i=0;i<30;i++) {
        //do a prediction
        x_temp_est = x_est_last;
        P_temp = P_last + Q;
        //calculate the Kalman gain
        K = P_temp * (1.0/(P_temp + R));
        //measure
        z_measured = z_real + frand()*0.09; //the real measurement plus noise
        //correct
        x_est = x_temp_est + K * (z_measured - x_temp_est);
        P = (1- K) * P_temp;
        //we have our new system
       
        printf("Ideal    position: %6.3f \n",z_real);
        printf("Mesaured position: %6.3f [diff:%.3f]\n",z_measured,fabs(z_real-z_measured));
        printf("Kalman   position: %6.3f [diff:%.3f]\n",x_est,fabs(z_real - x_est));
       
        sum_error_kalman += fabs(z_real - x_est);
        sum_error_measure += fabs(z_real-z_measured);
       
        //update our last's
        P_last = P;
        x_est_last = x_est;
    }
   
    printf("Total error if using raw measured:  %f\n",sum_error_measure);
    printf("Total error if using kalman filter: %f\n",sum_error_kalman);
    printf("Reduction in error: %d%% \n",100-(int)((sum_error_kalman/sum_error_measure)*100));
   
    return 0;
}

Re: Кальмана алгоритм (ссылка видео)

NorthStar » 23 мар 2011, 14:15

А где бы почитать по этот фильтр? Исходник - это хорошо, но для меня пока черный ящик (

Re: Кальмана алгоритм (ссылка видео)

=DeaD= » 23 мар 2011, 21:05

В вики робофорума я переводил статью. Да и в целом в рунете есть инфа.

Re: Кальмана алгоритм (ссылка видео)

DrSergey » 09 авг 2011, 11:54

Доброго времени суток.
Тут есть хоть один человек осиливший реализацию ФК ?
Есть пара вопросов. Мне понятна в принципе работа ФК если мы получаем данные с акселерометра(ов)(они зашумлены, значения пляшут и т.д.), все это калман нам отфильтровывает и выдает уже нормальное значение, которое можно использовать для дальнейших вычислений, мне не понятен принцип введения в ФК гироскопа, что ФК будет фильтровать от гироскопа(не понятно что мы получим от этого, для чего нужно пропускать "гироскоп" через ФК)????. Возможно гироскоп вводится только как компонент модели системы, но тут тоже непонятка - у него постоянно ползет ошибка, что нам дает введение гироскопа в модель(это возможно осмысленно если мы еще введем модель уползания гироскопа - но все равно в конце концов уползет).... ??? :shock:

Вдруг где есть ссылочка с примером(где расписаны пара итераций, и описанием вывода формул(описание получения модели)) применения ФК с акселерометрами, будет просто супер =)

Re: Кальмана алгоритм (ссылка видео)

Виталий » 09 авг 2011, 12:14

Мне понятна в принципе работа ФК

все это калман нам отфильтровывает и выдает уже нормальное значение

Эти два предложения несовместимы.

Re: Кальмана алгоритм (ссылка видео)

DrSergey » 09 авг 2011, 12:35

Все по моему совместимо, может я недопонимаю, в чем несовместимость ?? Возможен ответ без отсылки на перечитывание материала(неоднократно уже делал), по сути вопроса только :) ??

Re: Кальмана алгоритм (ссылка видео)

=DeaD= » 09 авг 2011, 12:46

Сдаётся мне, что по сути вопроса можно только заново всего Калмана рассказывать.

Re: Кальмана алгоритм (ссылка видео)

DrSergey » 09 авг 2011, 12:58

при ответе на вопрос "Тут есть хоть один человек осиливший реализацию ФК ?" - да, Я. Пересказывания не потребуется, а только указания того ключевого момента(по мнению Виталия) в коем моё утверждение расходится с сутью ФК.
Да и вопросов я задал более одного(именно по сути того что непонятно).


cron
Rambler\'s Top100 Mail.ru counter