Делаю OSD, автопилот и инерциалку...
Всем привет!
Данная версия еще не доделана, но есть вопросы по следующей. 😃
Короче, насколько будет востребована связь с моделью по средствам сотовой связи.
Я думаю будет очень постребовано. Тем более если подключение будет опциональным. т.е. без модуля сотовой связи все остальное работатает по прежнему.
И я бы взглянул не на GSM-GPRS - а на 3G (USB модем).
выше скорость - т.е. можно даже какое-нибудь видео с телеметрией передавать, и если с задержкой - слать картинки в высоком разрешении(было б очень удобно).
из минусов - наверно сложнее будет прицепить к вашей плате.
PS: Это желание, возможно не до конца хорошо продуманое в плане реализации.
Я думаю будет очень постребовано. Тем более если подключение будет опциональным. т.е. без модуля сотовой связи все остальное работатает по прежнему.
Спасибо.
Восприму это как требование: опциональное наличие канала управления через GSM.
И я бы взглянул не на GSM-GPRS - а на 3G (USB модем).
3G это точно не в этой версии. Это просто другой уровень сложности разработки. Скайп вон до сих пор с видео мучается. А скайп это не один разработчик, даже не средняя фирма. 😃
Канал передачи видео это отдельная тема.
Но, возможность летать по приборам и иметь отображение самолета на 3D карте - будет. 😃
Всем привет!
Давно меня небыло.
Вот тут математикой занимаюсь, решил спросить. 😃
Сейчас пытаюсь определить положение самолета по датчикам. Все датчики 3D. Есть аксель (вектор А), компас (вектор С) и гироскоп (скорости поворота G).
Q - положение самолета в пространстве.
Компас это вектор. Гироскоп - это матрица поворота.
Сейчас надо определить положение самолета по значениям гироскопа и компаса. Основная задача, это скорректировать ошибку показаний гироскопа с помощью компаса.
Пока все выглядет вот как: есть значение положения самолета полученные после интегрирования гироскопа. Из-за наличия постоянной составляющей в сигнале гироскопа, значение после интегрирования постоянно “плывет”, причем с разной скоростью.
Задача сейчас стоит в том, чтобы скорректировать этот уплыв.
Вот так сейчас выглядет процесс моделирования:
Итак, с гироскопа е меня есть данные положения самолета (вектора xyz). Эти данные надо как-то спроецировать на вектор компаса и скорректировать уплыв. Здесь не надо окорректоровать константу. Надо скорректировать только динамическую ошибку.
Итак, как это сделать? 😃
Итак, как это сделать?
Я бы сначала начал корректировать положение по акселям в моменты, когда перегрузки ~ G. А потом уже проецировать вектор магнитного поля на полученную повернутую плоскость.
Посмотрите DCM.cpp в АрдуКоптере.
Из-за наличия постоянной составляющей в сигнале гироскопа, значение после интегрирования постоянно “плывет”
Я думал, что это накапливается ошибка во время интегрирования… Постоянную составляющую нужно вычитать.
Я бы сначала начал корректировать положение по акселям в моменты, когда перегрузки ~ G. А потом уже проецировать вектор магнитного поля на полученную повернутую плоскость.
Думал я про аксель. Не годится он. Использовать аксель можно только как второй контур коррекции.
Вектор, который выдает аксель: А = g + а; g - векторо силы тяжести, a - комбинированный вектор дополнительной силы ( маневр, ветер, двигатель и т.д.), |g| - 9.8.
Из этих данный положение самолета определить невозможно. Простой пример:
Вектор A в покое будет равно А когда самолет делает петлю с перегрузкой 2g.
Короче, аксель использовать можно, но только как вспомогательный инструмент.
Я думал, что это накапливается ошибка во время интегрирования… Постоянную составляющую нужно вычитать.
Проблема в том, что эта постоянная составляющая не такая уж и постоянная. 😃 Она плывает сама по себе. В определенном диапазоне конечно, но все равно плывет. Понятное дело что я вычитаю ее до интегрирования, но этого недостаточно.
Вообще, задача с коррекцией гироскопа мне очень напоминает задачу АПЧ на основе коррекции честоты (есть еще на основе коррекции фазы).
Думал я про аксель. Не годится он. Использовать аксель можно только как второй контур коррекции.
Вектор, который выдает аксель: А = g + а; g - векторо силы тяжести, a - комбинированный вектор дополнительной силы ( маневр, ветер, двигатель и т.д.), |g| - 9.8.
В АрдуКоптере корректировка по акселю происходит, когда а = достаточно мал (по мнению эксперта). Не всегда же летим быстро и по дуге. При полете блинчиком коррекция срабатывает постоянно.
В АрдуКоптере корректировка по акселю происходит, когда а = достаточно мал (по мнению эксперта). Не всегда же летим быстро и по дуге. При полете блинчиком коррекция срабатывает постоянно.
Все верно. Это и есть второй контур коррекции. Аксель будет использоваться потом, для коррекции как компаса так и гироскопа.
Т.е. аксель будет использоваться для маневров как аксель, и для корреции в прямолинейном полете.
Тут только что придумал как делать коррекцию гироскопа по компасу.
- Измеряем компас.
- Измеряем положение по гироскопу D’
- Проецируем положение на вектор
- Корректируем проекции
- На основе корреций, корректируем вектор.
В худшем случае мы не сможем корректировать один из векторов положения, когда вектор изменение положения будет в плоскости перпендикулярной вектору компаса.
- Измеряем компас.
- Измеряем положение по гироскопу 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 офсет. 😃
Как-то так. 😃