roboforum.ru

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

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

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

Сообщение mandigit » 23 авг 2009, 13:18

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

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

Аватара пользователя
mandigit
 
Сообщения: 583
Зарегистрирован: 28 ноя 2005, 12:05
Откуда: Москва

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

Сообщение Duhas » 23 авг 2009, 13:38

мило работает )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение MiBBiM » 23 авг 2009, 13:51

не отображена стабилизация только гироскопом
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

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

Сообщение executer » 24 авг 2009, 17:24

Лучшеб сорц каконить...
Ато в учебнике слишком вумно написано. :sorry:
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

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 КиБ) Просмотров: 14499
LPF7.png
LPF7.png (3.19 КиБ) Просмотров: 14625
Когда я слышу слова "Первый закон робототехники", я вспоминаю анекдот про ноусэров.
GlassEagle
 
Сообщения: 160
Зарегистрирован: 14 окт 2009, 11:46
Откуда: Самара

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

Сообщение =DeaD= » 10 авг 2010, 07:36

Значит вы так и не поняли смысл фильтра Калмана :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение Ворон » 11 авг 2010, 16:58

устойчиво все же калман отфильтровывает случайные положения мне понравилось) :good:
Ворон
 
Сообщения: 1054
Зарегистрирован: 24 ноя 2008, 19:43
Откуда: Казань

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;
}
Когда я слышу слова "Первый закон робототехники", я вспоминаю анекдот про ноусэров.
GlassEagle
 
Сообщения: 160
Зарегистрирован: 14 окт 2009, 11:46
Откуда: Самара

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

Сообщение NorthStar » 23 мар 2011, 14:15

А где бы почитать по этот фильтр? Исходник - это хорошо, но для меня пока черный ящик (
NorthStar
 
Сообщения: 317
Зарегистрирован: 13 сен 2010, 12:47

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

Сообщение =DeaD= » 23 мар 2011, 21:05

В вики робофорума я переводил статью. Да и в целом в рунете есть инфа.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение DrSergey » 09 авг 2011, 11:54

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

Вдруг где есть ссылочка с примером(где расписаны пара итераций, и описанием вывода формул(описание получения модели)) применения ФК с акселерометрами, будет просто супер =)
DrSergey
 
Сообщения: 18
Зарегистрирован: 10 июл 2011, 17:08

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

Сообщение Виталий » 09 авг 2011, 12:14

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

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

Эти два предложения несовместимы.
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

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

Сообщение DrSergey » 09 авг 2011, 12:35

Все по моему совместимо, может я недопонимаю, в чем несовместимость ?? Возможен ответ без отсылки на перечитывание материала(неоднократно уже делал), по сути вопроса только :) ??
DrSergey
 
Сообщения: 18
Зарегистрирован: 10 июл 2011, 17:08

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

Сообщение =DeaD= » 09 авг 2011, 12:46

Сдаётся мне, что по сути вопроса можно только заново всего Калмана рассказывать.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение DrSergey » 09 авг 2011, 12:58

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

След.

Вернуться в Сенсорика

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2