Создание собственной системы стабилизации

oleg70
rual:

может кто логами богат…

Аж самому стало интересно (😃), уже вот включил и смотрю, : высота по гуглю у меня 160 метров…, модуль при 10 спутниках (под крышей ж/б дома) показывает разброс +/- 15 метров, Но блин точно вокруг 160 (!), прыжки происходят при захвате/потере очередного спутника… двигаю модуль вверх/вниз - эффект странный: опускаю - высота растёт, поднимаю - падает… короче лажа (наверно переотражение и т.д.)
Вывод - не всё так плохо…(беру свои слова обратно:)) Только надо учитывать что я на свои платки ставлю дополнительный LPF (чтоб не забивался от видео 1.3 Ггц), может это влияет на общую картину… ды и такие эксперименты надо проводить долго в течение суток чтоб был адекватный результат, а так везде пишут что точность по высоте в несколько раз меньше точности по горизонтали…

alexeykozin

с ракетой жпс может и фикс потерять математика там не любит резких ускорений

rual
alexeykozin:

с ракетой жпс может и фикс потерять математика там не любит резких ускорений

Возможно, всё нужно проверять. Видимо сначала придётся делать “спускаемый аппарат” , поднимать на коптере и скидывать с тормозной ленточкой, писать логи. Зимой как раз удобно, внизу снег, не разобьётся. Стартовое ускорение мне мешать не будет, активный участок начинается с невесомости - верхней точки полёта.
Сам алгоритм руления отлажу в виртуале.

rual

Проверил на виртуалке полёт без компаса, на ровных участках полета есть небольшой увод, при выполнении правой спирали (разворота) рыск сводится к реальному, при левом - уходит на 90гр…

alexeykozin

нашел в ардукоптере одну печальку. поскольку арду изначальн описался под самоль - там нет алгоритма расчета воздушной скорости (силы воздействия ветра)

полагая что ожидаемое ускорение мультироторного аппарата в плоскости горизонта можно описать как G * косинус угла наклона ( питч и крен) разделенное на массу аппарата
полагая что ускорение от внешнего воздействия также может быть описано a = f/m

немного поразмыслив если методом калибровки найти пропорцию kff определяющую неточность измерений между
тягамоторов * COS(кренпитч) = ускорение_в_горизонтальной плоскости * kff то любые внешние воздействия на аппарат будут эквивалентны вычисляемой величине. исходя из константы веса аппарата и получаемой экспериментально парусности можно будет вычислить даже скорость ветра

тяга моторов = сумма векторов акселерометров

тоесть сила внешнего воздействия = сумма векторов акселерометров * COS(кренпитч) - ускорение_в_горизонтальной плоскости * kff

как правило для внутрених целей стабилизации полета точное вычисления скорости воздушного потока не требуется. достаточно знать силу внешнего воздействия для того чтобы ее моментально компенсировать

oleg70
alexeykozin:

тяга моторов = сумма векторов акселерометров

Это как ? И вообще, поделитесь секретом - как вычисляется линейное ускорение коптера по осям ? (никогда не копался в готовых кодах), есть подозрение что вещь эта довольно “шумная” и для расчетов непригодная…

alexeykozin

проекция акселей на плоскость горизонта?
github.com/diydrones/ardupilot/…/AP_AHRS_DCM.cpp#L…

_accel_ef[i] = _dcm_matrix * _ins.get_accel(i);
_accel_ef[i] - это 3д вектор где
_accel_ef[i].x - ускорение на север
_accel_ef[i].y - ускорение на восток
_accel_ef[i].z - ускорение вверх

_dcm_matrix - матрица поворотов (горизонт коптера)
_ins.get_accel(i) - конкретный акселерометр с номером i

или как читают регистры мпу чтобы получить значения гир и акселей?

oleg70:

есть подозрение что вещь эта довольно “шумная” и для расчетов непригодная…

в мпу6000 есть функционал встроенного фильтра, фильтрует неплохо. точность конечно желает лучшего но на нашем уровне пока в эту цену ничего лучшего нет

oleg70
alexeykozin:

или как читают регистры мпу чтобы получить значения гир и акселей?

Нет, это всё ясно, (у меня рабочая, в плане стабилизации, собственная прошивка)), и в плане линейного ускорения понятно - что надо просто вычесть из “сырого” показания акселя текущую проекцию силы тяжести, вопрос в том что:
1.оси акселя офигенно шумят, просто сами, и от внешних вибраций…
2.всегда присутствует разброс у конкретного акселя по осям, т.е. надо кропотливо откалибровать каждую ось (возможно ли это вообще ? на практике)
3.показания уплывают при нагреве/остывании, (с этим ещё сложнее, в “назе” например аж внешний подогрев сделали)
4.(самое неприятное) вычитаемое значение проекции G (у меня кватернионы) имеет естественное запаздывание от реалтайма, в связи с этим происходят “выбросы” ускорения, которые непонятно как убирать…
Как можно вообще такие показания интегрировать, для получения скажем скорости, и уж того больше, расстояния ?? как эти трудности решаются в известных проектах ?

SergDoc
oleg70:

1.оси акселя офигенно шумят, просто сами, и от внешних вибраций…

фильтр датчика + программный фильтр

oleg70:

2.всегда присутствует разброс у конкретного акселя по осям, т.е. надо кропотливо откалибровать каждую ось (возможно ли это вообще ? на практике)

калибровка всех осей причём в обе стороны

oleg70:

показания уплывают при нагреве/остывании, (с этим ещё сложнее, в “назе” например аж внешний подогрев сделали)

в МПУ практически не плывут, ну если перепад не слишком большой ±15 градусов за пару секунд, где-то тут в ветке я когда-то экспериментировал с лсм - подсовывал под кулер ноута - как пьяный был, с мпу такого не наблюдается, в крайнем случае в датчике есть температурный датчик - можно пользовать его, конечно зависимость не совсем линейна - но похожа на правду

oleg70:

4.(самое неприятное) вычитаемое значение проекции G (у меня кватернионы) имеет естественное запаздывание от реалтайма, в связи с этим происходят “выбросы” ускорения, которые непонятно как убирать…

инерциалка не работает как иму, а раза в 4 медленней… можно и нужно фильтронуть дополнительно значения…

oleg70
SergDoc:

можно и нужно фильтронуть дополнительно значения…

Вопрос как ?
Тут делема: увеличиваешь “вес” акселя - реакция ускоряется (хорошо вроде), но как следствие на горизонт больше влияет центробежные ускорения (совсем не хорошо)… и как “фильтронуть” то ?

alexeykozin
oleg70:

Тут делема: увеличиваешь “вес” акселя - реакция ускоряется (хорошо вроде), но как следствие на горизонт больше влияет центробежные ускорения (совсем не хорошо)… и как “фильтронуть” то ?

Динамически менять подтяг в зависимости от условий полета
или… попробовать вычитать горизонтальную проекцию ускорений - но тут тоже есть риск получить барона мюнхаузена который пытается себя вытащить за волосы из болота.

  • 3д вектор компаса. он почти всегда может по двум точкам определить плоскость горизонта. т.е. не даст ось лишь при соосности питча или рола четко на магнитный север, нужно учитывать манитное на клонение и перекосы в установке

  • крен питч у коптера постоянно меняется и можно сравнивать ожидаемое от изменения крена ускорение с реальным (но тут немного будет мешать сила воздействия ветра) т.е зная что при крене 5град имеем ускорение тяга * cos(угол) - при этом дельта этого выражения с реальным ускорением либо внешний толчок либо ветер либо ошибка горизонта

oleg70
alexeykozin:

Динамически менять подтяг в зависимости от условий полета

Опять “мюнхаузен”… - в “условиях полета” опять засел аксель… А ведь это самый каверзный вопрос вообще в системах стабилизации на основе акселерометра (😃) - как отделить чистое ускорение от направления силы тяжести если физически для датчика это одно и то-же… если б не это, то вопрос удержания позиции в точке вообще бы не стоял… (нужели Калману звонить?)))

rual
oleg70:

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

очень просто, посчитать по ГНСС и барику линейное ускорение, добавить +9.8м/с2 по вертикали и сравнить с акселем, результатом сравнения крутить своё представление о ориентации в пространстве.

oleg70
rual:

очень просто,

Есть реальные результаты ?

rual:

посчитать по ГНСС и барику линейное ускорение

Даже если и можно с них “выдернуть” ускорение, то только в длительном промежутке времени… (о точности я вообще молчу, только вот обсуждали…), а для интегрирования ускорения в пройденный путь пошустрей надо работать…
Я как то скептически смотрю на всю эту “математическую алхимию”… (могу сильно ошибаться, готов к критике…)

rual
oleg70:

Есть реальные результаты ?

Олег, можешь сам проверить - установить мою “виртуалку”, если нет ф4дисковери, могу под твою плату с Ф4 выводы переделать. Собственно там нужны только два с половиной усарта. В реале продемонстрировать пока не могу, если времени сегодня-завтра хватит залить в F4BY, покажу тест на “карусельке”.

oleg70:

Даже если и можно с них “выдернуть” ускорение, то только в длительном промежутке времени… (о точности я вообще молчу, только вот обсуждали…), а для интегрирования ускорения в пройденный путь пошустрей надо работать…

Так я ж схему рассказывал на этой ветке - нужно сравнивать проинтегрированное до пути ускорение с ГНСС. Методичку тоже давал и ещё

rual
rual:

В реале продемонстрировать пока не могу

Уже могу, но нужно “партнера” для сравнения. Граждане одноветочники, поделитесь дфу-файлом самолетной прошивки Арду для F4BY, зашивка через планер зело напрягает (дефицит бубнофф у мну))). Надеюсь, что планер через блюпуп тоже без бубнов зацепится.

oleg70
rual:

Олег, можешь сам проверить

Буду поверять всё однозначно… (только вот раму закончу переделывать после очередной проверки, уже четвертую, наверно… 😃)

rual:

установить мою “виртуалку”

Виртуалка твоя - “тема”…, задумка у меня приблизительно такая же есть - для смелых идей с математикой сделать одновременный реалтайм-вывод на экран (под управлением питона) графиков показаний датчиков /результатов расчета, короче чем больше тем лучше, пока только прикидываю как всё это обустроить… мешает что с питоном пока “на вы”…

rual
oleg70:

задумка у меня приблизительно такая же есть - для смелых идей с математикой сделать одновременный реалтайм-вывод на экран (под управлением питона) графиков показаний датчиков /результатов расчета, короче чем больше тем лучше, пока только прикидываю как всё это обустроить… мешает что с питоном пока “на вы”…

Ну да, его “особость” много доставляет ) Зато когда вникнешь, получишь добротный и гибкий инструмент. Пиши, спрашивай, что смогу отвечу. Кста если сам захочешь к “виртуалке” подключиться, дам код без проблем

SergDoc
rual:

Арду для F4BY, зашивка через планер зело напрягает (дефицит бубнофф у мну))).

в папке планнера есть px4uploader.exe, всё остальное возьми у Алексея )))

rual
SergDoc:

в папке планнера есть px4uploader.exe, всё остальное возьми у Алексея )))

А через кнопки планера не работает?

rual

Зашил трикоптер. Как записать логи на F4BY? Вдруг что интересное будет?