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

rual
SergDoc:

угол =угол предыдущий+П *дт // управляющий вектор надо учесть

Где его надо учесть, в ИНС? Сомневаюсь, так получается дал ты стиком крен влево, и у тебя крен начал заваливаться ДАЖЕ если коптер на столе стоит. Неправильно это…

SergDoc
rual:

Где его надо учесть, в ИНС? Сомневаюсь, так получается дал ты стиком крен влево, и у тебя крен начал заваливаться ДАЖЕ если коптер на столе стоит. Неправильно это…

да получается, но это предсказатель шага, а дальше надо уже делать всё заново но с показаниями датчиков, могу расписать…
/**фильтр**/
/*предсказатель*/
П_угол =угол предыдущий+Д *дт // управляющий вектор надо учесть
/*вычислитель*/
угол предыдущий=угол
угол =угол предыдущий+угловая скорость *дт
угол =угол*(1-Д/(П-И)) + угол акселя*Д/(П-И) // в примере - допустим нет угловой скорости тогда И большое Д маленькое, Д/(П-И) - маленькое, есть угловая скорость Д большое И маленькое - практически получаем связку Д/П - больше доверия акселю…
/**регулятор**/
П=угол
Д= угловая скорость+сигнал управления
/*ошибка*/
И=угол-П_угол
//тогда всё сводится классически
П-Д+И

короче вчера дорисовался до двухступенчатого фильтра типа EKF и понял что ни то ни другое не исправит ситуацию, можно фильтронуть только белый шум, а тут он получается цветной причём всё время разный…

alexeykozin
SergDoc:

управляющий вектор надо учесть

кренпитч = комплексный угол исходя из крена и питча

управляющий вектор (длина проекции вектора в плоскости земли) = тяга создаваемая моторами * cos(кренпитч)

но тяга создаваема я моторами это даже на пвм на моторы умноженная на коэф. ибо батарея может иметь разный заряд. скорее потребляемый силовой установкой ток помноженный на кривую кпд

направление управляющего вектора должно совпадать с направлением комплексоного угла ролпитч

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

SergDoc
alexeykozin:

управляющий вектор = тяга создаваемая моторами * cos(кренпитч)

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

alexeykozin

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

SergDoc

Мы сейчас обсуждаем влияние гравитации Юпитера на экономику Зимбабве )))
всё управление надо брать от угловой скорости, вот ты в машине едешь - на газ жмёшь чтобы скорость увеличить? или у тебя прямая связь гашетки с расстоянием? нормально так надо 200 км проехать - значит полгаза, 400 - тапку в пол? ты же не забывай, что мы меряем изменения и пытаемся их “исправить”

alexeykozin:

будет нулевым в ситуации когда аппарат имеет нулевую тягу моторов но по ролу к примеру завален хоть на 90 градусов и наоборот при наборе высоты с ускорением 9G ускорение в плоскости земли будет двойным от ожидаемеого от косинуса ролпитч

сам смотри - при завале (мы имеем ввиду момент завала а не проспали его) угловая скорость будет дай бог, а если ты несёшься на 160 тонном х…абазе с ускорением 9G в плоскости планеты - то это магия и аксель у тебя будет показывать явную хрень - но при отсутствии угловой скорости, алгоритм будет править это несоответствие и ты не воткнёшься в планету…

alexeykozin
SergDoc:

сам смотри - при завале (мы имеем ввиду момент завала а не проспали его)

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

SergDoc
alexeykozin:

примере два крайних случая, в промежутке между которыми существует общее правило

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

alexeykozin

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

SergDoc
alexeykozin:

жидкость всегда в горизонте относительно краев

немного не так - “в горизонте” не по понятиям ))) в плоскости краёв - тут как раз действует центростремительное ускорение, не дающее возможность жидкости держаться в горизонте…

alexeykozin
SergDoc:

в плоскости краёв - тут как раз действует центростремительное ускорение, не дающее возможность жидкости держаться в горизонте…

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

можно даже так выразить.
если коптер в полете, газ в пределах троттл мин - троттл макс и сочетается с величиной вертикального ускорения (для ховера 1G а уск 9,8)
то можно принять аксель вертикального ускорения помноженный на синус кренпитча как тягу моторов для упрощенного расчета.
в идеале можно еще и сопоставлять с потребляемым током чтобы избежать непоняток в настольных тестах без подачи напряжения на регуляторы моторов

SergDoc

Ну так всё правильно - нет угловых скоростей меньше доверие акселю, но он доплывёт, больше угловая скорость - больше доверие акселю, но ты же не забывай, что самое большое доверие это в пределе 0.02… дабы сгладить/убрать ошибку ДУС…
я же формулу в общих чертах нарисовал, конечно нужны коэффициенты и пределы - которые надо подбирать имперически, иии… да здравствует мля EKF… с двумя наборами коэффициентов: собственный шум датчиков и собственный шум алгоритма 😦

alexeykozin

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

SergDoc
alexeykozin:

угловые скорости сильно шумная величина

не на столько шумные как ускорения

alexeykozin:

особенно если есть вибрации

да магия всё это, никто никуда не летит )))
ну сам подумай ты сейчас летаешь на комплиментарнике
угол=угол предыдущий +угловая скорость*дт
угол=угол*0.98+угол с акселя*0.02
и это догма, из-за которой, ты не в состоянии правильно отследить ускорения вдоль осей и построить приличную инерциалку потому, что для расчёта ты берёшь кривой угол с завалом которого нет!

alexeykozin
SergDoc:

да магия всё это, никто никуда не летит )))

я тут давеча трое суток потерял на одной очень тупой вещи.
в с++ ATAN2(y,x)
в vb, excel где я делал контроль ATAN2(x,y)

SergDoc

А это все потому, что ты ворочаешь не вокруг своей оси, а относительно левого верхнего угла экрана)))

rual
SergDoc:

если ты несёшься на 160 тонном х…абазе с ускорением 9G в плоскости планеты - то это магия и аксель у тебя будет показывать явную хрень - но при отсутствии угловой скорости, алгоритм будет править это несоответствие и ты не воткнёшься в планету…

Тут кабэ всё просто: если несёшься с ускорением 9G, то аксель покажет тебе направление вниз длинной 8G, оч. плохо когда -1g (свободное падение) и аксель кажет НУЛЬ. Вот НУЛЬ как не верти, понятней не станет )) Щас как раз виртуальную ракету гоняю.

alexeykozin:

угловые скорости сильно шумная величина особенно если есть вибрации

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

SergDoc
rual:

Тут кабэ всё просто: если несёшься с ускорением 9G, то аксель покажет тебе направление вниз длинной 8G, оч. плохо когда -1g (свободное падение) и аксель кажет НУЛЬ. Вот НУЛЬ как не верти, понятней не станет )) Щас как раз виртуальную ракету гоняю.

мы тут издевались над DCM алгоритмом и вот что получилось:
таскаю по столу вперёд - назад, влево - вправо
соответственно по тангажу и крену горизонт уходит - правый верхний экран:

rual
SergDoc:

мы тут издевались над DCM алгоритмом и вот что получилось:

не могу посмотреть

У Вас нет прав для просмотра этой страницы или для выполнения этого действия.

Хотя зарегистрировался(

SergDoc

мля сейчас:
мелкая
но тут ерунда ±1 градус, у Алексея на арду до 10 градусов уплывает…

rual

Мда… видимо вес акселя большой. И дус по Z тоже скачет