Делаю OSD, автопилот и инерциалку...
- Измеряем компас.
- Измеряем положение по гироскопу D’
- Проецируем положение на вектор
- Корректируем проекции
- На основе корреций, корректируем вектор.
вы хотите корректировать гиры при помощи магнетометра? У mag точность +_ 2…4 градуса. Как первичная корректировка - может, и подойдет.
Обычно гиры корректируют по акселям. А YAW гиры (у акселя нет такого) по компасу.
У нас вектор магнитного поля под 70 градусов в землю, проекция на горизонт очень мала…
Итак, как это сделать?
Не просто, а очень просто: почитать #121.
Ещё, Вы как то совсем игнорируете в своих выводах силу Кориолиса 😦
А она - один из важнейших источников ошибки в ИМУ.
Причём, её вектор и величина- сильно меняются в зависимости от широты места и курса самолёта.
То есть, скомпенсировать её простым введением коэффициента - нельзя.
У mag точность +_ 2…4 градуса. Как первичная корректировка - может, и подойдет.
И Ето- прАвильно.
А в сумме с коррекцией по ЖПС- и получится то, что надо.
вы хотите корректировать гиры при помощи магнетометра? У mag точность +_ 2…4 градуса. Как первичная корректировка - может, и подойдет.
Это постоянная ошибка. Она не плывет во времени. Поэтому подойдет для коррекции скорости вращения. Да и точность 2 градуса это совсем не плохо. Остальное нужно будет ГПС корректировать.
У нас вектор магнитного поля под 70 градусов в землю, проекция на горизонт очень мала…
Главное что у нас есть вектор, и этот вектор не меняется во времени. По нему и будет проводиться коррекция.
Не просто, а очень просто: почитать #121.
ГПС оставим пока. Надо выжать максимум из того что есть.
То есть, скомпенсировать её простым введением коэффициента - нельзя.
Это понятно, что одним коэффициентом не обойтись. Поэтому и делается динамическая автоподстройка.
Ещё, Вы как то совсем игнорируете в своих выводах силу Кориолиса
А она - один из важнейших источников ошибки в ИМУ.
Она на акселерометры влияет. А по ним коррекцию проводить, если A ~ g. Хотя если коптер летит вниз и по дуге, то итоговая векторная сумма может дать длину вектора ~ g…А у нас нифига не прямолинейное движение.
Вообще, для коптера и так сойдет! Блинчиком полетали, пару кульбитов - и хватит!
по моему в начале темы был тезис что типа - большой комп и нет проблем? Чтобы не было проблем нужна крутая математика и прочие финтифлюшки …
по моему в начале темы был тезис что типа - большой комп и нет проблем? Чтобы не было проблем нужна крутая математика и прочие финтифлюшки …
А это Вы к чему?
Поэтому и делается динамическая автоподстройка.
Так а что мешает сделать сразу- по уму?
Просто из разговоров с отцами русского ДПЛА строения Чистяковым (“Новик XXI”) и Дроновым (“Текнол”)- я уяснил, что магнетометр и ЖПС- вполне достаточные условия для долгого и счастливого летания ИМУ по горизонтали, а не на боку или ещё каким извращённым образом 😃
Тем более, что из ЖПС данных надо знать всего два параметра: курс и высоту.
И сравнивать их изменение (ли отсутствие такового ) с тем, что идёт со связки гиры- аксели.
Так а что мешает сделать сразу- по уму?
Ничего не мешает. Просто до этого еще не дошло. 😃
По моим представлениям это будет выглядеть так:
Первый контур: гиро + компас
Второй контур: скорость + аксель + высота
Третий контур: ГПС курс + высота + скорость
Четвертый контур: координаты и т.д.
Аксель еще будет использоваться для определения начального положения.
Я не вижу смысла переходить к ГПС пока я не смог выжать все параметры из инерциалки.
В идеале все должно управляться инерциалкой без ГПС, или хотя бы ГПС но с частотой обновления раз в минуту. 😃
Это не просто прихоть. Для нормального руления самолетом нужна именно инерциалка, так как ГПС идет с большой задержкой и использоваться для руления не может.
Короче, как только будет определено положения самолета в пространстве на основе компаса и гироскопа, так сразу можно будет переходить к следующему контуру. 😃
На основе компаса и гироскопа не получится. Это еще Артем Силкин (ученик упомянутого выше дедушки Чистякова) в своем диссере доказал 11 лет назад примерно.
Нужна ПАРА или больше “как можно более порпендикулярных” векторов. Например акселерометр и магнитометр. Или gps и акселерометр.
На основе компаса и гироскопа не получится.
На одном отсчете не получится.
А если отсчетов несколько и компас (3-х осевой магнитометр) меняется ?
(самоль покачивается)
На основе компаса и гироскопа не получится. Это еще Артем Силкин (ученик упомянутого выше дедушки Чистякова) в своем диссере доказал 11 лет назад примерно.
Скорее всего там речь идет о моментальном определении положения. Вы не правильно интерпритируете выводы.
На одном отсчете не получится. А если отсчетов несколько и компас (3-х осевой магнитометр) меняется ?
Да. Так и есть.
Dir’ = Mxyz*Dir; Dit’ и Dir - известны. М надо найти.
Mxyz - это матрица поворота по углам Эйлера. Т.е. это просто функция трех переменных.
В итоге имеем три уравнения с тремя неизвестными. Да, там неудобно то, что придется выражать косинус через корень и квадрат синуса. И ограничения будут при углах близких к углам осей. Но в принципе задачка решаема.
Сейчас есть два пути решения задачи коррекции гироскопа.
- Я вычисляю оффсет АЦП и вычитаю его из каждой из коорданит гироскопа перед интегрированием. Этот метод аналогичен методу авто подстройци частоты по частоте. Недостатот в том, что ошибка будет накапливаться из-за скорости реакции. Теоретически ошибка должна быть нулевой. Но если количество левых поворотов будет больше чем правых, то гироскоп будет врать немного в право. 😃
- Вычитать из сигнала гироскопа полученный сигнал от компаса. Недостаток в том, что метод будет работать в определенном диапазоне углов. Тут ошибка будет кратковременной, или ошибка будет при определенных углах.
Вот так, пока короче. 😃
Сейчас вот сижу и икса гоняю по бумаге. 😃
На основе компаса и гироскопа не получится.
Еще забыл сказать.
Мы ищем и компенсируем ошибку гироскопа, а не пытаемся заменить гироскоп компасом. Заменить гироскоп компасом действительно невозможно, поэтому мои выкладки никак не опровергают дисер товарища Силкина, а наоборот его только подтверждают. 😃
Всем привет!
Сделал я короче коррекцию по компасу! А за одно и с гироскопом разобрался. 😃
Получилось очень интересно и красиво. Есть конечно ограничения, но отслеживает достаточно хорошо. 😃
Как это ни странно, но получился аналог фазовой коррекции, что означает что ошибка не будет накапливаться.
Осталось только оптимизировать и улучшить алгоритм слежения. 😃
PS. Пока реализовывал алгоритм, выяснил, что значения гироскопа надо интегрировать как матрицу поворота, что уже само по себе является достаточно энергоемкой задачей. Я не знаю как народ может что-то подобное без плавучки реализовать. 😃
Сделал я короче коррекцию по компасу! А за одно и с гироскопом разобрался.
А если- чуть подробнее?
Алгоритм, хотя бы “на пальцах”?
А если- чуть подробнее? Алгоритм, хотя бы “на пальцах”?
Там все просто.
Есть с[n] это значение компаса в n моменты времени.
Есть угол поворота в момент времени n - f[n], M(f[n]) - это матрица поворота.
Имеем:
C[n] = M(f[n])*С[n-1]
Дальше все просто. Методом подбора из комбинации 81 возможных 3Д углов (0, +a, -a для каждой оси) по трем осям определяем в какую сторону надо сдвигать C[n-1] чтобы в итоге приблизиться к С[n].
Т.е. получаем некий l[n]. Сдвигаем C[n-1] на этот угол и повторяем все снова (тут у меня еще ФНЧ стоит для этого угла). В итоге за определенное время мы приблизимся к необходимому нам f[n].
Сдвигаем вектор в эту сторону. Потом повторяем операцию. Вместе с компасом сдвигаем начальную матрицу [1,1,1] что есть наша система координат.
В итоге после всех этих опираций мы имеем реальное положение самолета определенное по компасу.
А дальше начинаются манимуляции с оценкой ошибки гироскопа и ее коррекцией. 😃
По идее, в данном случае мне гироскоп вообще не нужен, так как я уже знаю матрицу поворота и могу определить положение самолета. 😃
Но в связи с тем что значение компаса требует значительного усреднения и фильтрации, то оно может использоваться с очень низкой частотой и использовать его как показатель крена, тангажа и рысканья будет достаточно проблематично. Поэтому надо использовать гироскоп.
Недостаток данного метода один: он не корректирует постоянную составляющую гироскопа. Исходя из данного метода я могу корректировать результать интегрирования гироскопа, но никак не сам гироскоп.
Достоинство одно - ошибка оценки положения стремиться к нулю и не может быть больше чем заданное значение (у меня в модели это 0.01 градуса, в реале такое будет не нужно).
Сейчас я пытаюсь доделать алгоритм коррекции именно значения гироскопа, т.е. убрать ADC офсет. 😃
Как-то так. 😃
Еще забыл написать.
Коррекция матрицы поворота производится только когда вектор меняется.
Еще забыл написать.
Всё это хорошо, бумага- написана правильно 😃
Но может, чтобы не изобретать велосипед, поглядеть как это сделано у тех, у кого уже летает: diydrones.com/…/getting-the-most-out-of-your
Проект уже несколько лет существует, участвуют в нем множество народу со всего мира…
А я, не математик, ничего не понял… Ну узнаем мы поворот вектора магнитного поля в системе координат датчика (модели) за одну итерацию (по сути - скорость поворота этого вектора)… Но по нему все равно невозможно однозначно определить положение самой системы координат. Ибо вокруг одного вектора можно построить множество этих систем. И тут никакие математические уловки не помогут. Ну не изменится значения проекций вектора при повороте системы координат вокруг оси вектора, продифференцируй их хоть 100 раз…
А я, не математик, ничего не понял
Я- тоже.
Но поскольку я практический разработчик и всё- довожу “до железа”, то всегда стараюсь изучить наибольший объём информации по предмету и затем, отсеяв ненужное- получить продукт.
По моему убеждению, полноценно имитировать работу ИМУ “на столе”- нельзя.
Слишком много реальных возмущений не поддаётся моделированию. Либо-стоимость стенда будет=цене Шаттла 😃
И поэтому, сделать работающее устройство можно только в режиме : плата-программа-лётные испытания.
А поскольку АрдуПилот именно такое изделие, многократно испытанное многими людьми, я бы- работал именно в режиме модификации готового продукта.
Если Дима действительно толковый математик- нет причины, почему бы он не смог улучшить проект.
Ну не изменится значения проекций вектора при повороте системы координат вокруг оси вектора, продифференцируй их хоть 100 раз…
Все правильно. Так и есть. 😃
Поэтому это и является лишь коррекцией позволяющей убрать постоянную составляющую поворота.
Попытаюсь пересказать другими словами на простом примере.
Вот есть у нас ошибка АЦП в виде постоянной составляющей а на все три оси. В итоге, если мы находимся в покое, то получится что после интеграции все три оси будут вращаться вокруг вектора, а сам вектор будет находиться на месте (это как вращать зонтик вокруг ручки с определенной скоростью). И ту действительно ничего не сделаешь. 😃
Но…
Если отбросить аргумент что самолеты так не летают (это мы будем потом корректировать), то нам надо скорректировать постоянную А в моменты, когда вектор меняет положение и минимизировать вращение в моменты когда вектор постоянен.
Чтобы понять принцип коррекции нужно просто представить, что если вектор совпадает с осью Х и у нас есть его вращение по окружности в плоскости ХУ на данных гироскопа, а данные вектора компаса постоянны, то нам надо корректировать гироскоп по оси Х, а все остальные оси нас не интересуют. То-же самое делаем по другим осям. 😃
А использование матрицы и т.д. позволяет нам это делать не только в моменты когда Z=0, но и в других случаях.
Ибо вокруг одного вектора можно построить множество этих систем. И тут никакие математические уловки не помогут.
А если вдруг известно правило как изменяется угловая скорость в зависимости от ориентации ?
Например: при правом крене - угловая скорость по курсу увеличивается вправо, при левом - налево;
если нос вверх - то появляется(увеличивается) угловая скорость по тангажу, чтобы клюнул носом;
если нос смотрел вниз - то начинает задирать вверх
(нормальные самолетики, которые сами летают, вроде должны так себя вести).
Тогда штурман, видя: 1)магнитометр в пол(например) и 2)гира показывает(в следующем отсчете) увеличение угловой скорости вправо -
догадается, что: 1)правый крен и 2) летим на восток.
А если вдруг известно правило как изменяется угловая скорость в зависимости от ориентации ?
К сожалению не известно.
Нам нужна ориентация для управления, а не управление для ориентации. 😃
Хотя с другой стороны про штурмана все правильно написано. Но там задача другая.
Сейчас у меня задача - коррекция ошибки гироскопа с помощью показаний компаса. Если формулировать еще точнее, то - автоподстройка постоянной ошибки угловой скорости (ADC offset).