Зарегистрирован: 28 ноя 2005, 12:05 Сообщения: 583 Откуда: Москва
Наверное в этот раздел имеет смысл поместить видео о том, как работает пара гироскоп (измеритель угловой скорости)+акселерометр, информация от которых прошла через фильтр кальмана
Зарегистрирован: 15 сен 2007, 13:03 Сообщения: 6338 Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
мило работает )
_________________ «Как сердцу выразить себя? … Мысль изреченная есть ложь!» В этом мире меня подводит доброта и порядочность... "двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Зарегистрирован: 14 окт 2009, 11:46 Сообщения: 160 Откуда: Самара
Думается, сорцев мы не дождёмся...
В связи с чем вопрос - а какая вообще сверхзадача возлагается в робототехнике на фильтр Камлана? Только фильтрация данных? Может тогда проще (в том числе и для микроконтроллера) какой-нить менее вумный алгоритм взять (зато и без корреляционных мать их матриц) - какую-нить тупую низкочастотную фильтрацию???
И вот элементарная (до примитивности) дискретная низкочастотная (нерекуррентная, заметьте) т.н. "скользящим окном" (ну, тупая до безобразия) фильтрация с размером окна 7 отсчётов (т.е. текущий, и +-3 в каждую сторону).
Если сравнивать правый вариант фильтра Калмана, то, как гритца, найдите 10 отличий (ну, конечно, присутствуют краевые эффекты, но во-1-х, их парировать надо только там, где их присутствие может быть критичным, и во-2-х, их парирование - это вам не расчёт корреляционных, ковариационных и прочих матьриц).
# 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
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()) - похоже, рисование тех картинок, которые показаны на сайте (т.е. к самому вычислению эти куски отношения не имеют).
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("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; }
_________________ Когда я слышу слова "Первый закон робототехники", я вспоминаю анекдот про ноусэров.
Доброго времени суток. Тут есть хоть один человек осиливший реализацию ФК ? Есть пара вопросов. Мне понятна в принципе работа ФК если мы получаем данные с акселерометра(ов)(они зашумлены, значения пляшут и т.д.), все это калман нам отфильтровывает и выдает уже нормальное значение, которое можно использовать для дальнейших вычислений, мне не понятен принцип введения в ФК гироскопа, что ФК будет фильтровать от гироскопа(не понятно что мы получим от этого, для чего нужно пропускать "гироскоп" через ФК)????. Возможно гироскоп вводится только как компонент модели системы, но тут тоже непонятка - у него постоянно ползет ошибка, что нам дает введение гироскопа в модель(это возможно осмысленно если мы еще введем модель уползания гироскопа - но все равно в конце концов уползет).... ???
Вдруг где есть ссылочка с примером(где расписаны пара итераций, и описанием вывода формул(описание получения модели)) применения ФК с акселерометрами, будет просто супер =)
Все по моему совместимо, может я недопонимаю, в чем несовместимость ?? Возможен ответ без отсылки на перечитывание материала(неоднократно уже делал), по сути вопроса только ??
при ответе на вопрос "Тут есть хоть один человек осиливший реализацию ФК ?" - да, Я. Пересказывания не потребуется, а только указания того ключевого момента(по мнению Виталия) в коем моё утверждение расходится с сутью ФК. Да и вопросов я задал более одного(именно по сути того что непонятно).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения