Проект Мегапират на самик!

LeonVS
ukkr:

Я тут тоже маленько выложу линку на шоу-версию альтернативной ГУЙни

Ну а что, мега супер, хорошее начало 😃 Осталось гугль мапс прицепить или что нить похожее 😃
К стати, очень бы не помешал “прибор” силуэта самолета поворачивающимися управляющими плоскостями, очень удобно для понятия что творит АП, ну и для чтения логов будет очень полезен. Даже можно два таких прибора, один то что на входе с RC управления, второй то что уже непосредственно идет на сервы с АП.

AlexSneg:

Вот, сделал логи DCM в сравнении с EKF

Время выполнения смотрю в 3 раза различается…
К стати а в чем причина что мы не используем более мощные процики? Сложней програмить? Не думаю… Больше жрет? да то же вроде не на много… В чем причина? Почему не юзаем тот же STM?

Syberian
LeonVS:

Траблы продолжаются

LeonVS:

бяда бяда

LeonVS:

весело бегут

LeonVS:

не смог…

LeonVS:

Заработало

Глядя на этот mind flow, делаю вывод, что, пока я спал, проблема решена и совет не требуется 😃

LeonVS:

Олег а откуда беруться данные? С акселей или с гироскопов? Смотрю и ось YAW уже есть, компас или гирик?

гира и аксель на 16G диапазоне

ukkr:

Пока только общий концепт

Вот это красота!!!
Я буквально вчера пытался нарисовать гуйню на жаве, весь день протр**ся, пытаясь запустить javax.comm и gnu.io, плюнул и написал на С++ builder.

LeonVS:

а в чем причина что мы не используем более мощные процики?

потомушта аффтар порта в них не разбирается и не хочет, вот и весь сказ. Могу писать на TI DSP 6700-й серии, но это такая огромная “лепешка” с потреблением под 1А…

AlexSneg:

сделал логи DCM в сравнении с EKF

из этой ряби цифр я понял только t - время выполнения. Графиками было бы нагляднее.
Вы можете на пальцах показать место фильтра калмана в AHRS? Это типа “черный ящик”, в который кладется гира и аксель и на выходе имеется roll-pitch-yaw, или это всего лишь фильтр с предсказанием, стоящий между гироскопом и обычным инерциальным алгоритмом?
Только без формул, у меня по матану в универе было 3 с минусом 😁

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

AlexSneg
Syberian:

из этой ряби цифр я понял только t - время выполнения. Графиками было бы нагляднее.

Ну r - roll смотри, это просто отклонение от плоскости влево-вправо. Влево с минусом угол, вправо с плюсом. Смотри разницу при тех же входных усорвиях: строчка DCM это алгоритм с направляющими косинусами, EKF - это Extended Khalman.
На днях сделаю визуализацию, покажу в картинках как все выглядит.

Syberian:

Вы можете на пальцах показать место фильтра калмана в AHRS?

Кальман это по сути фильтр с предсказанием. Только не все так просто. Он как бы самообучаемый в процессе. Он учится корректировать ошибку на основании истории поведения. А на сколько хорошо он обучаем зависит от математической модели предсказания, которая в свою очередь может так же на ходу корректироваться и подстраиваться. Вот в этом месте наступает основная проблема - подбор коэффициентов модели поведения. Каждый из коэффициентов этой модели может в свою очередь быть достаточно сложными функциями. Как раз обычно на этом месте энтузиазм начинающих заканчивается. Так как любые С классы заготовки хотят чтобы их как раз снабдили такими математическими моделями. В этом месте начинаются диссертации на тему… К счастью есть полно открытых проектов по определению attitude тела в пространстве откуда можно брать и сопоставлять, анализировать. Амеры и япы написали полно работ и диссертаций. Я не считаю себя тормознутым, вариант фильтра кальмана для одномерных линейных моделей типа расстояние = скорость * время + error понял довольно быстро (спустя пару недель), так как математическая модель проста. Однако для трех и четырех мерных пространств нужно иметь ну очень много энтузиазма. Я реально этим полгода занимался и то, я вот понимаю как работает моя конкретная реализация, которую я фактически скомпоновал из найденного, готового полу-материала, который бродит в буржуйской сети и которую я отдебажил и посмотрел в графиках разные оси в разных контрольных точках кода, подавая заранее сформированные тестовые воздействия. Попроси меня рассказать, как другой Кальман устроен, то я вряд ли смогу это сделать.

LeonVS
Syberian:

Глядя на этот mind flow, делаю вывод, что, пока я спал, проблема решена и совет не требуется

Гы, клевую подборку сделал 😃

Syberian:

потомушта аффтар порта в них не разбирается

От оно чо Михалыч 😃

Syberian
AlexSneg:

Только не все так просто.

Syberian:

место фильтра калмана в AHRS?

просил же попроще 😃 В конкретно вашей реализации. Предлагаю 3 варианта ответа: до, после или вместо?

И да, по быстродействию. Судя по всему, оно всего лишь в 2.2 раза тормознее DCM. То же самое перемножение флоатов в матрице. Учитывая возможность предсказывающего действия фильтра, лаг можно скомпенсировать хотя бы наполовину. Ощень интересно.

В чем измеряется t? если это миллисекунды - аж 19 штук, то какой-то тормозной ваш STM 😃 Будете пропускать резкие движения. У меня DCM въезжает в 4 мс вместе со всеми датчиками (но без компаса).
MARG 5 мс с обработкой всех датчиков (компас занулен)

Матан детектед!
www.chrobotics.com/index.php?main_page=page&id=3&z…
здесь валяется сурсе код 9dof AHRS с ЕКФ. Учитывая, что у меня есть почти мгновенные процедуры синуса-косинуса, дело стоит керосина.

AlexSneg
Syberian:

Предлагаю 3 варианта ответа: до, после или вместо?

Если под AHRS понимать именно систему определения положеия тела в пространстве, а под IMU чисто процедуры сбора первичных данных, то данная конкретная реализация как раз и есть AHRS. На выходе она предоставляет текущие roll-pitch-yaw в градусах относительно первоначально заданного референсного положения. Их можно брать и дальше уже принимать решение о рулежке сервомашинками.

Syberian:

2.2 раза тормознее DCM

Честно говоря, сам не ожидал. Но DCM я не оптимизировал, просто брал твой текущий код и нагло компилял под себя, подстраиваясь под свои начальные данные. Для меня например не очевидна степень оптимизации по быстродействию при работе с матрицами через темплейты. В EKF я просто ссылки на float массивы гоняю по матричным процедурам. И еще тригонометрия у меня есть оптимизированная от производителя STM и я ее предвычисленной держу. А вычислений тригонометрических в EKF раз в 10 больше, чем в DCM.

Drinker

Вставлюсь: у мну DCM на кортексеМ3 цикл 0.0003 с. EKF - 0.005 c.

Уточню - EKF 5мс. цикл с опросом датчегоф, сам фильтр, пиды и команды на сервы(моторы). Это на квадре 200гц.

А вот и результат расколбаса:
0.0050 102.12 -37.88 -29.34
0.0050 116.45 -36.21 -53.27
0.0050 112.69 -22.20 -53.76
0.0050 66.56 -27.50 -26.49
0.0050 14.08 -4.30 -11.58
0.0050 -6.63 16.25 -6.45
0.0050 -10.02 32.84 -2.47
0.0050 8.79 32.35 10.27
0.0050 43.39 13.27 21.50
0.0050 83.40 -14.55 6.66
0.0050 104.21 -29.72 -19.89
0.0050 122.26 -27.22 -44.64
0.0050 108.52 -27.60 -45.59
0.0050 50.75 -27.64 -16.26
0.0050 -8.55 3.67 -5.37
0.0050 3.85 15.51 -6.25
0.0050 12.48 14.81 -9.16
0.0050 8.15 10.61 -3.82
0.0050 10.10 13.66 -3.02
0.0050 -2.22 6.35 -9.47
0.0050 -0.86 4.79 -12.31
0.0050 0.83 4.17 -10.53
0.0050 1.30 3.81 -10.00
0.0050 1.45 3.60 -9.70
0.0050 1.57 3.41 -9.49
0.0050 1.68 3.20 -9.44
0.0050 1.72 3.07 -9.37
0.0050 1.78 2.93 -9.34
0.0050 1.97 2.71 -9.34
0.0050 1.48 2.84 -9.39
0.0050 1.99 2.51 -9.34
0.0050 1.80 2.48 -9.37
0.0050 1.50 2.50 -9.39
0.0050 1.57 2.41 -9.39
0.0050 1.37 2.36 -9.42
0.0050 1.55 2.23 -9.42
0.0050 1.79 2.05 -9.43
0.0050 1.77 1.99 -9.45
0.0050 1.84 1.91 -9.46
0.0050 1.98 1.77 -9.47
0.0050 2.10 1.67 -9.49

Frr
Syberian:

здесь валяется сурсе код 9dof AHRS с ЕКФ

ЕКФ-9dof не интересно получается, аналогично ДСМ или МАРГ - глюки при ускорениях и, в частности, при скоординированном повороте самоля (имхо: не смысла в ЕКФ если ограничится только 9dof).
Хочется прицепить ЖПС и (, следующий шаг) встроить сим(т.к. у ЖПСа маленькая частота отсчетов, заодно м.б. удастся фильтровать вибрации двигателя или флаттер).
Получится в мат.модели ЕКФ много переменных, здоровая матрица F, плюс обсчет сима

  • тут и tms320c67 или Кортех А8 с неоном не помешал бы.
    Делал голый 9dof, тема тут , клипчик тут , глюки видны.
Syberian
Frr:

ЕКФ-9dof не интересно получается, аналогично ДСМ или МАРГ - глюки при ускорениях

нашел ваш клипчик. Напоминает мой первый запуск MARG, когда 1) оси на гире попутаны, 2) рейт не выставлен, 3) еще и вес акселя огромный выставлен.

По поводу расколбаса, полагаю, это потому, что все дружно кладут х… на настройку датчиков.
МАРГ я настраивал так: сперва включена только гира, масштабирую gain, пока при повороте платы на 180 град не покажет ровно 180. И в дупу выкладки из даташитов, сколько бит на градус. Врут.
Затем включен только аксель. Вес настраивается так, чтобы при резком отклонении на 90 градусов полная конвергенция достигалась за 5-7 секунд. Аксель должен иметь симметричные показания по осям (а не как в ардуплейне, разбаланс на 30% и Z +1000 -700)
Затем все вместе с магнетометром. Проводится отстройка от железа и проверяются оси, чтобы при наклонах и кренах не плыл азимут.
Все.
То, что криво летало на ардупилоте, склонен винить неоднозначный алгоритм чтения датчиков, дурацкую родную калибровку акселя, его диапазон в 3G и дико неопределенный интервал опроса (от 4 до 25 мс)

Frr
Syberian:

Напоминает мой первый запуск MARG, когда 1) оси на гире попутаны, 2) рейт не выставлен, 3) еще и вес акселя огромный выставлен.

1 Это внимательно проверял, вроде все правильно.
2 Что такое рейт? Калибровка гиры?
(С калибровкой долго возился, нули и бит/величину выставил по 9 осям, датчики согласовал друг с другом.
С даташитами не сошлось. И нули у маг-а(от stm) тоже далеко, почти как у ТС.)
3 Да, была ошибка (в матрице ошибок измерении).

Musgravehill
Syberian:

MARG 5 мс с обработкой всех датчиков (компас занулен)

У меня MARG тоже 200Гц с ДУС+аскелерометр+компас.
Если сделать децимацию и опрашивать компас\аксель реже, то можно добиться 360Гц на Атмега 16МГц.

Frr:

ДСМ или МАРГ - глюки при ускорениях

С включенным компасом глюков почти не видно. Гонял плату горизонтально в вытянутой руке по кругу.
Повторяемость угла отличная. Можно ставить ИМУ вертикально и крутить.

Syberian:

дурацкую родную калибровку акселя

Тут целая задача: калибровка ДУС, акселя и магнетометра в стиле “поставьте на все ребра по очереди”.

AlexSneg

Вот записал видео со своей реализацией кальмана

Syberian:

В чем измеряется t? если это миллисекунды - аж 19 штук

t микросекуднах, я упоминал в первом посте об этом
сейчас и в этом видео у меня только гира+аксель. Компас я не подключал пока.

Frr:

глюки видны

Нда жестко колбасит. Я вот сейчас специально проверил, поставил на бок и тряс как у вас на клипе. Ну практически железобетонно стоит угол.

Syberian

Нехило у него в конце башню сорвало…

Я тоже могу снять такое видео. Но, вообще, сидеть перед монитором и трясти плату - занятие неблагодарное. Трясти ведь можно по-разному. Лучшая проверка - поставить на борт и в поле. А на OSD следить.

AlexSneg
Syberian:

Нехило у него в конце башню сорвало…

Где? У у меня вроде нет срывов. В конце я его слишком экстремально крутил с огромными перегрузками, затем резко выпрямил. Но даже после этого ошидки по pitch практичеки нет, roll повело на 15 градусов, затем медленно пополз к нулю. Расколбаса все равно в разные стороны не было. Но ты же понимаешь, что это запредельный стресс тест.
Сегодня найду крутящийся стул прицеплю к ноуту, поставлю все на стул. положу на край плату, дам угол и буду крутить. потом покажу как все работает. Сейчас сниму ролик как DCM себя ведет. Минут через 15 выложу. У меня только телефон для съемок, так что сорри за качество.

Вот DCM с моими коэффициентами
Четко виден расколбас после установки в горизонт. А если вертикальная перегрузка, то вообще башню срывает. Это скорее всего, то что наблюдал alex-ber, когда его на ветру колбасило

alex-ber
AlexSneg:

А если вертикальная перегрузка, то вообще башню срывает. Это скорее всего, то что наблюдал alex-ber, когда его на ветру колбасило

Да примерно то, что я и наблюдал - с 2.30…
Алекс попробуй еще один эксперимент - ненадо сильно трясти и курыжить - поставь плату под углом градусов 30 (крен) и градусов 10 (наклон) а затем пару раз в таком положении резко вверх вниз перемести - типа самик с левым (правым) креном идет на снижение и порывом ветра его пару раз вверх-вниз швырнуло…
Спасибо.

Syberian

Прикрутил РЦ-каналы и сервовыходы. Пока все напрямую. Также можно регулировать скорость передачи внутри потока.
Столкнулся с траблой: поток на базу никак не поднимается выше 2000bps. На 10Гц работает или IMU или радио или серво, хотя битые пакеты не обнаруживаются. Мну плакаль 😦 Надо крепко думать.
Леонид, проверь, у тебя лучше будет скорость?
dl.dropbox.com/u/63786348/MegaPirateX.zip

LeonVS

Прогресс на лицо! РЕСПЕКТ 😃
Такая же фигня, если ставить обновление 5 на горизонт и 5 на серво все тип топ, как только куда то больше появляются тупняки…
Обновление серв на 10Гц жрет где то 1600бпс, для 6 каналов совсем не много 😃 Интересно чем вызван барьер в 2000бпс??? Протокол обмена?

ukkr
Syberian:

Столкнулся с траблой: поток на базу никак не поднимается выше 2000bps. На 10Гц работает или IMU или радио или серво, хотя битые пакеты не обнаруживаются. Мну плакаль Надо крепко думать.

Олег, ты же в процедуре, что пишет в УАРТ

void putchar(char c)
{
while (tx_counter0 == TX_BUFFER_SIZE0);
#asm("cli")
.....

глобально запрещаешь прерывания. Может быть при определённом потоке данных в УАРТ прерывания (для руления каналами, опроса датчиков и т.д.) уже и не успевают вызываться из-за того, что процедура писания в УАРТ постоянно их запрещает?

Syberian
ukkr:

глобально запрещаешь прерывания.

Все-таки добил его. Все было тупее… В базовой станции при чтении буфера ком-порта обрабатывался только один пакет за вызов, независимо от длины полученных данных.
Теперь валит честные 30pps (все по 10Гц) на скорости 4160bps. Красота.
Леонид, каналов, кстати, не 6 а 8.

Syberian

Пришла еще одна дельная мысль. Если выдача инфы такая быстрая и узкий канал, ничего не мешает сделать тот же протокол на bvHUD и таким образом прокачивать даунлинк через видеопередатчик. Аплинк, соответственно, через радиомодуль пульта.

Прикол №2, если “ужаться” по AHI до 5 Гц и навигацию 1Гц , то скорость канала не превысит 1200бод. Что позволит втупую использовать даунлинк приемника FrSky, который D8R-II. Правда, с отдачей команд на борт будет уже сложнее.

LeonVS
Syberian:

Леонид, каналов, кстати, не 6 а 8.

У мну подключенно на данный момент 6, вот и дрыгал шестью 😃 На выходе в 7, бомболюк в автомате 😃

Syberian:

Все-таки добил его. Все было тупее…

Кидовай, заценимс 😃
Олег замути сразу данные что принимаются на наземку автоматом сохранялись в файл, чтоб далее можно было их подцепить на вход и посмотреть что происходило еще раз 😃

Syberian:

Теперь валит честные 30pps (все по 10Гц) на скорости 4160bps.

Может на данном этапе сразу ППМ_СУМ заложить? Думаю для многих будет актуально?