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

LeonVS

Кто подскажет где кусок кода отвечающий за выполнение условия прохождения точки? Хочу туда добавить обязательное условие “высоты полета”, сейчас АП пофиг, хоть там 500м стоит, нужные координаты пролетел, и считает что точка пройдена…

static bool verify_nav_wp()
{
hold_course = -1;
update_crosstrack();
if ((wp_distance > 0) && (wp_distance <= g.waypoint_radius)) {
gcs_send_text_fmt(PSTR(“Reached Waypoint #%i”),nav_command_index);
return true;
}
// add in a more complex case
// Doug to do
if(loiter_sum > 300){
gcs_send_text_P(SEVERITY_MEDIUM,PSTR(“Missed WP”));
return true;
}
return false;
}

Оно?

AlexSneg

Сделал порт DCM алгоритма от Мегапирата в свой проект на STM32. Поисследовал результаты в графиках и цифрах. Когда плавно изменяю положения платформы, то вообщем-то вопросов нет. Однако если взять плату потрясти поделать восьмерок в воздухе с переворотами и перегрузками, а потом резко положить в горизонт, то возникает однозначно воспроизводимая жопская картина. Горизонт сбит градусов на 30 и медленно ползет к нулю, затем уходит в другую сторону градусов на 20 затем медленно идет назад но до нуля никогда не доходит. чтобы заставить встать горизонт на место нужно слегка покачать плату, тогда горизонт медленно приходит в ноль. После прохождения дебаггером и отслеживания значений переменных я вижу почему такое происходит.

Олег (или кто-то, кто близко к исходникам), скажи, ты код компиляешь для реальных полетов именно с такими коэффициентами коррекции, как в исходниках установлены ???

#define Kp_ROLLPITCH 0.05967
#define Ki_ROLLPITCH 0.00001278

Оно же с такими значениями не дает алгоритму по акселю нормально откорректироваться. А может оно для вертолетов такое выставлено? Для коптеров, когда необходимо висеть и плавно двигаться, оно как раз в тему.
Я вот поигрался всяко разно и пришел к варианту:

#define Kp_ROLLPITCH 0.85967
#define Ki_ROLLPITCH 0.01001278

Оно по крайней мере дает алгортму в течение первой секунды горизонт поставить на место с погрешностью до 15 градусов по окончании любых расколбасов платформы. Да возникает эффект Roll раскачки, но он СУЩЕСТВЕННО меньше, чем при дефолтных коэффициентах и проходит в течение второй секунды, а дальше четко в ноль встает.

Есть еще вариант интегральный коэффициент вообще отключить.

Собственно, если сможешь проясни ситуацию, а я пока Кальмана реализую для живого сравнения с DCM.

alex-ber
AlexSneg:

Однако если взять плату потрясти поделать восьмерок в воздухе с переворотами и перегрузками, а потом резко положить в горизонт, то возникает однозначно воспроизводимая жопская картина. Горизонт сбит градусов на 30 и медленно ползет к нулю, затем уходит в другую сторону градусов на 20 затем медленно идет назад но до нуля никогда не доходит. чтобы заставить встать горизонт на место нужно слегка покачать плату, тогда горизонт медленно приходит в ноль

Вот - вот!
Такой эффект я и наблюдал два раза на полетах: если летать блинчиком и без порывов ветра - све работало отлично… Но стоило “покалбасится” в борьбе за модель - горизонт уплывал безбожно !
Я тогда еще писал об этом и версия была в том, что превыщены перегрузки для акселя… оказывается что и код мог быть виной!

LeonVS

В FPV надо летать медленно и печально рассматривая сверху интересности, а не крутить 3Д 😃 Хотя на 26 прошивке при ветре почти равной скорости самолета, у меня не чего ни куда не уплывало, самуль вполне не плохо держался 😃

Syberian
AlexSneg:

но же с такими значениями не дает алгоритму по акселю нормально откорректироваться. А может оно для вертолетов такое выставлено?

Медленное выравнивание для того и задумано, чтобы не давать акселю сильно косячить на центробежных перегрузках. Помимо этого, имеется треугольная функция - корректировка “веса” акселерометра, если длина его вектора отличается от 1G.
“дикая колбасня” обязательно собъет горизонт в том случае, если он несколько раз проскочит через точки gimbal lock - сингулярность (или полюс), где один из компонентов матрицы лезет в бесконечность.
А вот уходить в другую сторону после корректировки он не должен. Возможно, интегральный в твоей реализации надо действительно отключить.

Как показывают полеты на “реальном” самике, оптимальной является конвергенция от 5 до 7 секунд с углом ошибки 90 град по любой из осей. При этом динамический вес акселя линейно сводится к нулю при изменении длины вектора на 35-40% в любую сторону.

А еще надо аксель на 16G переводить, т.к. 3G в оригинале - даже муху не отгонишь.
И еще, раз у тебя STM и тактов валом, выставь скорость обновления гиры 1 кГц.

Покажешь потом код IMU калмана? 😉

AlexSneg
Syberian:

И еще, раз у тебя STM и тактов валом, выставь скорость обновления гиры 1 кГц.

сейчас 400Hz частота итераций. Выше смысла нет, я пробовал на 800Hz ставить. Улучшений не много получил. 400 это примерно оптимально.

Syberian:

“дикая колбасня” обязательно собъет горизонт в том случае, если он несколько раз проскочит через точки gimbal lock - сингулярность (или полюс), где один из компонентов матрицы лезет в бесконечность.

Я, когда с EKF закончу, поставлю брейкпоинтов в этом месте в DCM, чтобы убедиться. Но насколько помню, ни разу туда не заваливался алгоритм, хотя целенаправленно я не мониторил это место.

Syberian:

Возможно, интегральный в твоей реализации надо действительно отключить.

Вот-вот. Я так понимаю 400 Гц это достаточно быстро. Поэтому такие задержки сходимости приводят как раз к отрицательному эффекту. Совсем выключать интегральную составляющую, тоже как-то не очень, там тогда другие интересные краевые эффекты наблюдаю. Ну ладно, я к этому еще вернусь. Чуть позже, когда можно будет в риалтайме сравнить DCM и EKF.

Syberian:

А еще надо аксель на 16G переводить, т.к. 3G в оригинале - даже муху не отгонишь.

Сейчас я пока на 4G поставил, а максимум у меня 8G. Ну для экстрима на столе и 4G за глаза…

Syberian:

Покажешь потом код IMU калмана?

В личной переписке, когда реально отлажу и испытаю на стенде - да, покажу, но не для того чтобы выставить на всеобщее обозрение. Я слишком много времени на разбор физики происходящего потратил и на чтение буржуйских диссертаций, чтобы так просто слить наработанное. Я прикидывал можно ли такое всандалить под Мегу твою, но скорее всего - саляви 😦. Там очень много float перемножений. Для меня это решается подключением аппаратного FPU ядра и компилятор дальше сам строит правильный код, для тебя - даже не представляю, если только умножать все на 1000 и далее все int32_t.

alex-ber:

оказывается что и код мог быть виной!

Это не код виной. Это ограничения алгоритма. Он в принципе для спокойных полетов вполне себе годится.
Я вот еще вспомнил. Если очень быстро платформу верх-вниз швырять, то при смене направления вектора тяжести, оно переворачивает все вверх тормашками в тот момент, когда модуль вектора становится точно в окрестности 1G, причем поскольку коэффициенты я другие поставил, то я этого легко добиваюсь и мне не надо для этого прилагать много усилий. И дело тут не в перегрузке акселя, а совсем наоборот. Длинное время конвергенции в принципе и призвано сгладить такую фигню.

В принципе, как я уже сказал, позже вернусь к этому и табличные логи изменения углов с наглядной визуализацией выложу. Может даже Олегу пользу принесу исследованиями на эту тему.

LeonVS

Гы, походу поползновения в кодах ардупилота уже никому не интересны 😉))))))

ukkr
LeonVS:

Гы, походу поползновения в кодах ардупилота уже никому не интересны ))))))

Лёнь, а откуда ж усё “грабится”. Видишь, человек даже на STM32 перенёс ДЦМку из пилота.
Ну а по теме – сорри, пока времени нету – на работе завалец случился, надо разобрать. 😦

Syberian

Вторая превьюшка. Составлен крайне быстрый бинарный пакетный протокол базовой станции и нарисована часть ее самой.
Прошу не ржать над попыткой сделать авиагоризонт 😃 Тем более, вращение текстур еще ниасилил.
Сама плата понимает команду “level”, в ответ шлет attitude и тайминг основного цикла.
Кому интересно, шить тем же бат-ником с avrdude.

По поводу возможностей протокола скажу, что те же данныe IMU можно отправлять со скоростью 50Hz через АРС на скорости 9600 (сейчас 5Гц), и при этом останется еще столько же полосы на полудуплекс обратно, т.е. джойстиком управлять уже не проблема. Если разбавлять данными GPS и навигации, то 25 Гц. Все равно практически реалтайм.
За основу взят протокол обмена с Megapirate OSD, переделанный на переменную длину. Сами команды выложу попозже.

dl.dropbox.com/u/63786348/mpx_preview2.rar

LeonVS
ukkr:

Ну а по теме – сорри, пока времени нету – на работе завалец случился, надо разобрать.

Бывает 😃
Да я вроде уже сам разобрался, код внедрил, вывел в планер вместо скорости “ошибку высоты” осталось только испытать 😃

Олег, в архив выкладывай сразу и библиотеки, при запуске пишет отсутствует BORLNDMM.DLL

LeonVS

Далее хочет еще cc3250mt.dll, ну и на последок грит что нет ему счастья без файла AH_bottom.bmp 😃

LeonVS

Авиагоризонт - круть 😉
Олег, выложи еще чем ты базовую станцию компилишь, влом мне перенастраивать блютус модуль, а он на скорости 115кбит 😃 Поменял бы циферу в коде чтоб тебя не мучать 😃

Да к стати в архиве еще батника не хватает для заливки в мозг хекса, так сказать уж до кучи чтоб было все вместе 😃

LeonVS

Пунятна 😃 ты вроде говорил про 9600 😃?
Траблы продолжаются, при попытке залить код в мегу… нужна библиотека libusb0.dll

Олег, бяда бяда страшная!!! 😃
Нашел твою первую прошивку чтоб извлечь от туда батник, ну и запустил сразу его для проверки, усе прошилось проверилось и тд тп, НО! Новым хексомо оно больше не шьется, да и старым в общем то то же…

C:\Users\Leon\Desktop\MegaPiratePlane2.26_new\MegaPirateX>avrdude -Cavrdude.conf
-patmega2560 -cstk500v1 -P\\.\COM6 -b57600 -D -Uflash:w:MegaPirateX.hex:i
avrdude: stk500_getsync(): not in sync: resp=0x00

Чито делать однако?

За то в терминале весело бегут цифери 😃

Не хочет он со мной больше разговаривать… Решил обнулить, залил обратно 26 прошивку, но как не бился залить пиратХ так и не смог…

Заработало 😃 Видимо подвисла библиотека… после перезагрузки усе залилось 😃
А что клевый такой горизонт вышел 😃 Забавно смотреть в терминале что шлет платко, клевая лесенка выходит 😃

LeonVS

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

ukkr

Я тут тоже маленько выложу линку на шоу-версию альтернативной ГУЙни настройки и управления различными(ха-ха) АП. Смотреть лучше в полном экране.

Пока только общий концепт и несколько доступных приборов-индикаторов. Приборы накиданы как попало, только для того, чтоб показать их возможности. Запущен сценарий-симулятор. В реальности планирую подсистему, которая позволит в визуальном режиме пользователю связывать различные данные от Автопилота с нужными для пользователя приборами-индикаторами.
Выкладывать смысла нет никакого, ибо доступна только реализация тестового протокола, да и нет ещё реализованной вышеупомянутой подсистемы для связи inbound данных с индикаторами.

AlexSneg

Вот, сделал логи DCM в сравнении с EKF
В логах сначала строка DCM, затем то же самое рассчитанное через EKF
r - roll, p - pitch, y - yaw , w - weight , h - health , t - время на расчет алгоритма в мкс
В самих логах по ходу дела мои комментарии, чтобы понятно было где, что происходило. Показания в градусах

ссылка на полный файл

$DCM: 00:16:15, r=-134.700 p=20.863 y=306.609 w=0.000 h=0.000 t=17
$EKF: 00:16:15, r=-1.140 p=-2.384 y=61.729 t=44
$DCM: 00:16:15, r=-139.583 p=18.483 y=305.001 w=0.835 h=0.040 t=19
$EKF: 00:16:15, r=-1.327 p=-1.529 y=61.920 t=44
$DCM: 00:16:15, r=-145.638 p=6.258 y=301.301 w=0.000 h=0.000 t=17
$EKF: 00:16:15, r=-1.627 p=8.681 y=68.464 t=43
$DCM: 00:16:15, r=-143.430 p=7.565 y=305.522 w=0.000 h=0.000 t=17
$EKF: 00:16:15, r=3.074 p=4.050 y=74.427 t=44
$DCM: 00:16:16, r=-148.464 p=11.549 y=306.300 w=0.000 h=0.000 t=17
$EKF: 00:16:16, r=5.921 p=-1.096 y=73.555 t=44
$DCM: 00:16:16, r=-148.566 p=18.351 y=301.250 w=0.385 h=0.000 t=18
$EKF: 00:16:16, r=3.962 p=-4.760 y=65.183 t=44
$DCM: 00:16:16, r=-151.547 p=17.924 y=295.212 w=0.843 h=0.053 t=19
$EKF: 00:16:16, r=1.946 p=-1.061 y=60.752 t=125
$DCM: 00:16:16, r=-145.644 p=12.759 y=290.826 w=0.000 h=0.435 t=18
$EKF: 00:16:16, r=-0.249 p=11.789 y=59.733 t=43
===== ПОЛОЖИЛ ПЛАТУ резко на стол, до этого момента был жесткий расколбас во все стороны сдвигом
====== в разные стороны и вврх-вниз ===================================
$DCM: 00:16:17, r=-128.518 p=24.700 y=294.548 w=0.959 h=1.000 t=18 <- считает, что плата вверх тормашками
$EKF: 00:16:17, r=0.540 p=9.455 y=54.864 t=44 <-- сразу в ноль ушел
$DCM: 00:16:17, r=-90.734 p=32.332 y=313.202 w=1.000 h=1.000 t=18 <-- пытается скомпенсировать угол
$EKF: 00:16:17, r=0.652 p=8.696 y=54.429 t=43
$DCM: 00:16:17, r=-37.360 p=23.213 y=339.549 w=0.967 h=1.000 t=18 <-- все равно еще большая ошибка
$EKF: 00:16:17, r=0.762 p=8.066 y=54.344 t=43
$DCM: 00:16:17, r=7.349 p=-1.158 y=348.584 w=0.887 h=1.000 t=18 <-- решило, что все таки не вверх ногами, но ошибка 7 градусов
$EKF: 00:16:17, r=0.891 p=7.441 y=54.185 t=44
$DCM: 00:16:18, r=43.012 p=-20.713 y=341.069 w=0.977 h=1.000 t=19 <-- здесь начинается раскачка
$EKF: 00:16:18, r=0.953 p=6.931 y=54.200 t=43
$DCM: 00:16:18, r=68.394 p=-28.330 y=329.851 w=0.989 h=1.000 t=19 <-- амплитуда нарастает
$EKF: 00:16:18, r=1.019 p=6.588 y=54.192 t=124
$DCM: 00:16:18, r=79.108 p=-29.538 y=323.956 w=0.957 h=1.000 t=18 <-- амплитуда нарастает, встали почти под 90 градусов
$EKF: 00:16:18, r=1.049 p=6.207 y=54.209 t=43
$DCM: 00:16:18, r=73.424 p=-27.856 y=325.846 w=0.943 h=1.000 t=18
$EKF: 00:16:18, r=1.128 p=5.873 y=54.221 t=43
$DCM: 00:16:19, r=53.870 p=-22.498 y=333.275 w=0.887 h=1.000 t=18 <-- в обратную сторону
$EKF: 00:16:19, r=1.151 p=5.487 y=54.235 t=44
$DCM: 00:16:19, r=27.598 p=-11.291 y=340.025 w=0.969 h=1.000 t=18
$EKF: 00:16:19, r=1.176 p=5.208 y=54.262 t=44
$DCM: 00:16:19, r=1.568 p=2.320 y=341.074 w=0.965 h=1.000 t=18 <-- дошли до нуля, вроде бы должны остановиться
$EKF: 00:16:19, r=1.242 p=4.871 y=54.258 t=44
$DCM: 00:16:19, r=-20.269 p=12.997 y=337.067 w=0.965 h=1.000 t=18 <-- но нет, пошла амплитуда в обратную сторону
$EKF: 00:16:19, r=1.251 p=4.645 y=54.282 t=44
$DCM: 00:16:20, r=-34.177 p=18.369 y=332.271 w=0.988 h=1.000 t=19
$EKF: 00:16:20, r=1.242 p=4.446 y=54.309 t=125
$DCM: 00:16:20, r=-38.493 p=19.620 y=329.852 w=0.969 h=1.000 t=19 <-- -40 градусов почти
$EKF: 00:16:20, r=1.183 p=4.266 y=54.328 t=44
$DCM: 00:16:20, r=-32.950 p=17.780 y=330.586 w=0.946 h=1.000 t=18 <-- опять к нулю пошло, а плата просто все это время лежит на столе
$EKF: 00:16:20, r=1.227 p=4.121 y=54.354 t=45 <-- EKF железобетонно держит ноль
$DCM: 00:16:20, r=-20.834 p=13.197 y=332.788 w=0.984 h=1.000 t=18
$EKF: 00:16:20, r=1.230 p=3.962 y=54.385 t=44
$DCM: 00:16:21, r=-6.197 p=6.993 y=334.363 w=0.968 h=1.000 t=18
$EKF: 00:16:21, r=1.247 p=3.835 y=54.384 t=43
$DCM: 00:16:21, r=7.485 p=0.778 y=334.272 w=0.984 h=1.000 t=18 <-- дошли до нуля, и опять в крен в противоположную сторону
$EKF: 00:16:21, r=1.334 p=3.739 y=54.410 t=43
$DCM: 00:16:21, r=17.601 p=-3.659 y=333.026 w=0.993 h=1.000 t=18
$EKF: 00:16:21, r=1.441 p=3.628 y=54.424 t=44
$DCM: 00:16:21, r=22.183 p=-5.648 y=331.672 w=0.983 h=1.000 t=18
$EKF: 00:16:21, r=1.401 p=3.541 y=54.437 t=125
$DCM: 00:16:22, r=21.662 p=-5.511 y=330.726 w=0.969 h=1.000 t=18
$EKF: 00:16:22, r=1.506 p=3.408 y=54.471 t=124
$DCM: 00:16:22, r=16.369 p=-3.560 y=330.171 w=0.949 h=1.000 t=18
$EKF: 00:16:22, r=1.406 p=3.359 y=54.497 t=44
$DCM: 00:16:22, r=8.684 p=-0.244 y=329.466 w=0.957 h=1.000 t=18
$EKF: 00:16:22, r=1.398 p=3.367 y=54.526 t=45
$DCM: 00:16:22, r=0.768 p=2.997 y=328.340 w=0.984 h=1.000 t=18
$EKF: 00:16:22, r=1.391 p=3.310 y=54.547 t=44
$DCM: 00:16:23, r=-5.811 p=5.522 y=326.910 w=0.973 h=1.000 t=18
$EKF: 00:16:23, r=1.338 p=3.261 y=54.568 t=43
$DCM: 00:16:23, r=-9.534 p=6.811 y=325.564 w=0.950 h=1.000 t=18
$EKF: 00:16:23, r=1.361 p=3.187 y=54.600 t=44
$DCM: 00:16:23, r=-10.205 p=6.906 y=324.541 w=0.985 h=1.000 t=18 <-- крен в отрицательную сторону, но амплитуда раскачки постепенно затухает
$EKF: 00:16:23, r=1.369 p=3.121 y=54.623 t=126
$DCM: 00:16:23, r=-8.228 p=6.139 y=323.811 w=0.973 h=1.000 t=18
$EKF: 00:16:23, r=1.294 p=3.077 y=54.647 t=126
$DCM: 00:16:24, r=-4.372 p=5.078 y=323.234 w=0.984 h=1.000 t=18
$EKF: 00:16:24, r=1.326 p=3.122 y=54.676 t=44
$DCM: 00:16:24, r=0.125 p=3.703 y=322.673 w=0.903 h=1.000 t=18
$EKF: 00:16:24, r=1.363 p=3.091 y=54.659 t=44
$DCM: 00:16:24, r=3.784 p=2.491 y=321.905 w=0.947 h=1.000 t=18
$EKF: 00:16:24, r=1.252 p=3.064 y=54.700 t=43
$DCM: 00:16:24, r=6.263 p=1.490 y=321.079 w=0.939 h=1.000 t=18
$EKF: 00:16:24, r=1.272 p=3.010 y=54.705 t=44
$DCM: 00:16:25, r=7.180 p=0.846 y=320.168 w=0.961 h=1.000 t=18
$EKF: 00:16:25, r=1.294 p=2.884 y=54.736 t=44
$DCM: 00:16:25, r=6.511 p=1.090 y=319.252 w=0.963 h=1.000 t=18
$EKF: 00:16:25, r=1.254 p=2.973 y=54.751 t=124
$DCM: 00:16:25, r=4.916 p=1.770 y=318.311 w=0.989 h=1.000 t=18
$EKF: 00:16:25, r=1.309 p=2.965 y=54.754 t=125
$DCM: 00:16:25, r=2.655 p=2.552 y=317.315 w=0.785 h=1.000 t=18
$EKF: 00:16:25, r=1.279 p=2.960 y=54.777 t=44
$DCM: 00:16:26, r=0.392 p=3.300 y=316.300 w=0.952 h=1.000 t=18
$EKF: 00:16:26, r=1.230 p=2.942 y=54.785 t=43
$DCM: 00:16:26, r=-1.432 p=3.871 y=315.273 w=0.984 h=1.000 t=20
$EKF: 00:16:26, r=1.136 p=2.964 y=54.800 t=44
$DCM: 00:16:26, r=-2.290 p=4.061 y=314.305 w=0.982 h=1.000 t=18
$EKF: 00:16:26, r=1.149 p=2.943 y=54.817 t=44
$DCM: 00:16:26, r=-2.439 p=3.989 y=313.361 w=0.977 h=1.000 t=18
$EKF: 00:16:26, r=1.046 p=2.924 y=54.858 t=44
$DCM: 00:16:27, r=-1.717 p=3.739 y=312.468 w=0.949 h=1.000 t=18 <-- вот место прекращения раскачки горизона
$EKF: 00:16:27, r=1.067 p=2.915 y=54.907 t=125
$DCM: 00:16:27, r=-0.409 p=3.359 y=311.626 w=0.952 h=1.000 t=18
$EKF: 00:16:27, r=1.072 p=2.894 y=54.928 t=125
$DCM: 00:16:27, r=0.818 p=2.895 y=310.776 w=0.978 h=1.000 t=18
$EKF: 00:16:27, r=1.029 p=2.872 y=54.952 t=44
$DCM: 00:16:27, r=1.968 p=2.567 y=309.907 w=0.967 h=1.000 t=18
$EKF: 00:16:27, r=1.049 p=2.855 y=54.983 t=44
$DCM: 00:16:28, r=2.948 p=2.431 y=309.034 w=0.938 h=1.000 t=18
$EKF: 00:16:28, r=1.135 p=2.856 y=54.997 t=43
$DCM: 00:16:28, r=3.414 p=2.512 y=308.126 w=0.969 h=1.000 t=18
$EKF: 00:16:28, r=1.165 p=2.858 y=55.028 t=45
$DCM: 00:16:28, r=3.064 p=2.736 y=307.190 w=0.952 h=1.000 t=18
$EKF: 00:16:28, r=1.115 p=2.866 y=55.051 t=43
$DCM: 00:16:28, r=2.594 p=2.941 y=306.211 w=0.972 h=1.000 t=18
$EKF: 00:16:28, r=1.175 p=2.845 y=55.099 t=44
$DCM: 00:16:29, r=2.080 p=3.156 y=305.274 w=0.951 h=1.000 t=18
$EKF: 00:16:29, r=1.253 p=2.843 y=55.110 t=125
$DCM: 00:16:29, r=1.383 p=3.324 y=304.315 w=0.983 h=1.000 t=19
$EKF: 00:16:29, r=1.229 p=2.842 y=55.130 t=43
$DCM: 00:16:29, r=0.922 p=3.317 y=303.362 w=0.973 h=1.000 t=18
$EKF: 00:16:29, r=1.258 p=2.811 y=55.150 t=45
$DCM: 00:16:29, r=0.627 p=3.148 y=302.424 w=0.889 h=1.000 t=18
$EKF: 00:16:29, r=1.242 p=2.752 y=55.171 t=44
$DCM: 00:16:30, r=0.784 p=3.028 y=301.491 w=0.794 h=1.000 t=18 <-- здесь уже совсем все успокоилось
$EKF: 00:16:30, r=1.315 p=2.770 y=55.210 t=44
$DCM: 00:16:30, r=1.125 p=2.931 y=300.591 w=0.968 h=1.000 t=18
$EKF: 00:16:30, r=1.381 p=2.778 y=55.226 t=45
$DCM: 00:16:30, r=1.454 p=2.792 y=299.653 w=0.950 h=1.000 t=18
$EKF: 00:16:30, r=1.347 p=2.770 y=55.270 t=44

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 с минусом 😁

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