Делаю OSD, автопилот и инерциалку...

alexeykozin

кстати насчет коррекции, уплыть может и компас, поэтому надо оценивать комплексно все три сенсора и гпс
вот что подумалось если взять аксель - то в состоянии когда он не ускоряется (не падает, не взлетает, не меняет линейной скорости и летит брюхом вниз) то у него z=1G если вращается то x^2 + y^2 + z^2 =1G если рассматривать это вращение не в статическом виде а изменение за интервал измерения то получается гироскоп,
недостаток такого гироскопа что он не будет работать в условиях свободного падения ибо 0G и гиру в векторе G находится тоже не откорректируешь

Diman_Y
alexeykozin:

…если взять аксель…

Забудьте про аксель. 😃

Попытаюсь пояснить.

Значение акселя (вектор) А(t) = g(t) + a(t).
g(t) - это фактически и есть положение, которое постоянно меняет значение, хотя по модулю и константа.
a(t) - это как раз то, что нам в конечном итоге надо знать. Именно это значение будет использовано в маневрах.

Поиск углов положения самолета по гироскопу, как раз и ведется с целью определить a(t).
Проблема в том, что мы не знаем когда а(t)=0; В принципе нам именно этого и надо достичь. 😃
Т.е. мы ищем положение самолета, чтобы потом можно было нормально считать ускорения, скорости и метры. Использовать абсолютные скорости и метры с ГПС можно, потому что они абсолютны и известны, и мы их не ищем. А вот неизвестные вектора как раз и определяются исходя из положения самолета.

Именно по этому аксель использвать для определения положения нельзя. Алгоритм в котором положение определяется из учета что g(t) == g0, и значит самолет стоит ровно, мягко скажем ошибочен. Любой ветер, газ, или маневр сводит этот алгоритм на нет.

msv

ИМХО слишком категорично сказано… С акселем проблемы очевидны, но уже полно практических реализаций ИМУ. Качество работы у них, мягко скажем, разное… Тем не менее работают. Данные с компаса и GPS использую как дополнительные в наиболее продвинутых системах. Только с компасом и гирой… Дмитрий возможно будет первый…
ЗЫ Лично для меня его алгоритм (особенно его практической воплощение) остался непонятным… Слишком много ограничений и мест в логике/математике (как я ее понял) с возможностью накопить еще кучу ошибок.

Diman_Y

Всем привет!

Вчера вот доделал xBee приемник и передатчик. Осталось только это все дело в какой-нибудь корпус засунуть. Так что на выходных попробую улететь на несколько километров. А то у меня есть видеопередатчики 1 ватт на 1.2 ГГц, аж две штуки. На 2.4 один одноватник и еще есть 5.8 200 мВт. А улететь далеко не получалось, так как моя аппа (Eurgle) дальше 500 метров не хочет с 1.2 и 2.4 летать. А 5.8 отстой, так как слишком сильно от положения зависит. 😃

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

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

На официальном сайте Digi последняя версия для xBee Pro 868 - 1061. Косяк этой версии в том, что она не хочет работать стабильно.
Поэтому надо параметр DD со значения по умолчанию 6000 изменить на 0.
После этого все начинает работь замечательно даже в комнате при максимальной мощности передатчика. 😃

Сейчас меня очень занимает вопрос: а зачем народ городит разного рода RLS системы, когда можно использовать xBee?
Либо я что-то упускаю, либо одно из двух. 😃

Musgravehill
Diman_Y:

Это шум сначало надо убрать и только потом, когда ошибка будет менее 0.1 градуса, можно говорить о коррекции.

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

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

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

Diman_Y:

децимация

С этим согласен на 100%.

Diman_Y
msv:

ИМХО слишком категорично сказано… С акселем проблемы очевидны, но уже полно практических реализаций ИМУ. Качество работы у них, мягко скажем, разное… Тем не менее работают.

Я согласен, что сделать определение положения и корректировку гироскопа по акселерометру возможно.
Весь вопрос в области приминимости данного алгоритма. Есди надо определить примерное положение, то да (это как раз тот случай когда вектор примерно равен g). Алгоритм будет работать.
Если же говорить об алгоритме “максимум из возможного”, то данный алгоритм никак нельзя отнести к этой категории. Коррекция гироскопа и определение положения по акселерометру это вообще не коррекция строго говоря. Это нелинейный алгоритм с очень узким диапазоном рабочих параметров.

Musgravehill
Diman_Y:

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

Любительские полеты укладываются в эти рамки. Точнее, обязаны укладываться.

Diman_Y
Musgravehill:

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

Я не зря написал про децимацию. Мне кажется Вы немного не в теме. Я поясню, но сначала пожалуйста ответьте мне на вопрос:
можно ли имея АЦП 10 бит и 1 милиВольт на разряд, измерять сигнал 1 микроволь?
И при каких условиях это возможно.
Другими словами: как имея АЦП с 60 дБ сигнал/шум сделать из него АЦП с 90 дБ сигнал/шум или 120 дБ сигнал/шум?

Musgravehill:

Любительские полеты укладываются в эти рамки. Точнее, обязаны укладываться.

Правильно. Но алгоритм либо универсален либо специфичен.
Я вывел универсальный алгоритм. Ему все равно, любительский это полет или какой другой.

Musgravehill
Diman_Y:

Другими словами: как имея АЦП с 60 дБ сигнал/шум сделать из него АЦП с 90 дБ сигнал/шум или 120 дБ сигнал/шум?

Никак.

Diman_Y:

Я не зря написал про децимацию. Мне кажется Вы немного не в теме.

Снижение частоты дискретизации сделает прецизионный АЦП из копеешного или снизит погрешность первичного преобразователя?

Ошибка компаса обычно +_2 градуса. Изменить ее невозможно, только купить более точный компас. Погрешности средств измерений определяются при помощи образцового прибора, который точнее поверяемого прибора хотя бы в 3 раза. Поэтому без “крутого” лабораторного компаса сказать, что в данный момент наш любительский компас (hmc5883L, например) врет на 2 градуса, на 0.1 или еще на сколько-то - невозможно.

Diman_Y
Musgravehill:

Никак.

Ответ неверный! Это типичная ошибка. Сейчас я ее поясню.

Musgravehill:

Снижение частоты дискретизации сделает прецизионный АЦП из копеешного или снизит погрешность первичного преобразователя?

Да.
Итак, есть АЦП с с/ш 60 дБ (10 бит). Частота дискретизации 1024 кГц. Нам нужен сигнал в полосе 0…100 Гц.
Что такое шум дискретизации АЦП? Да это просто шум, который у нас есть на входе. Фактически, выход АЦП мы можем представить как сигнал + шум.
Мум дискретизации это обычный белый шум, равномерно распределенный по частоте.
А тепер внимание!
Как изменится мощность шума, если мы поставим ФНЧ с частотой среза 256 кГц (изначальная полоса - 512 кГц)? Правильно. Мощьность шума уменьшится вдвое. Т.е. на 3 дБ. А что будет если я поставлю фильтр 512 Гц, т.е. в 1024 раза меньше изначальной частоты?
Правильно! Мощность шума уменьшится в 1000 раз, или на 30 дБ.
В итоге, пропустив сигнал АЦП через фильтр я увеличил с/ш на 30 дБ (примерно).
Теперь я беру и делаю децимацию в 1000 раз, так как лишние отсчеты все равно не несут информацию.
Как так? Да очень просто.
АЦП у нас 10 бит, а фильтр у нас 16 бит, или вообще float. Вот так и получаем, что если изначально шум был 1 милливольт, то потом шум стал 30 микровольт. Здесь мы размениваем частоту дискретизации на динамический диапазон. Если интересны детали, то почитайте как работают сигма-дельта АЦП. Да и вообще все кодеки именно так и устроены. Это дешевле чем городить честные 16 битные АЦП. 😃

Вот то-же самое я буду делать и с компасом.

Еще добавлю.
А что будет, если я свой сигнал с АЦП просто возьму и без бильтра продецимирую в 1000 раз? Какое будет с/ш?
А вот в этом случае, у меня с/ш юужеь всего 30 дБ вместо моих 60. Потому что все шумы вне полосы завернуться в мой рабочий диапазон.
Поэтому когда народ пытается обрабатывать значения сенсоров 10 раз в секунду при частоте 1 кГц без предварительной фильтрации, у меня всегда возникает вопрос в адекватности показаний этих сенсоров.
Именно поэтому мной и был выбран нормальный ДСП, а не микроконтроллер.

Musgravehill
Diman_Y:

Итак, есть АЦП с с/ш 60 дБ (10 бит). Частота дискретизации 1024 кГц. Нам нужен сигнал в полосе 0…100 Гц.

Не понял. В компасе HMC5883L стоит 12-битный АЦП (с\ш 72дБ), точность датчика 2 градуса. Максимальная частота дискретизации 160Гц.

Diman_Y:

Что такое шум дискретизации АЦП? Да это просто шум, который у нас есть на входе.

Я говорю про шум исходного сигнала от датчика, а не про шум квантования. Шум от датчика никак не убрать (гистерезис, межосевая чувствительность, нелинейности).

Повысить качество так: дискретизация с высокой частотой (уменьшается шум квантования, но мощность входных шумов растет за счет расширения спектра). А потом отфильтровываем шумы при помощи ФНЧ. Таким образом, получаем минимальный шум квантования и высокую частоту выборки. - только для HMC5883 это все внутри вшито.

Diman_Y
Musgravehill:

Я говорю про шум исходного сигнала от датчика, а не про шум квантования. Шум от датчика никак не убрать.

А чем этот шум отличается от шума квантования? Судя по тому что я видел - обычный белый шум. У меня он прекрасно фильтруется.

Musgravehill:

Повысить качество так: дискретизация с высокой частотой (уменьшается шум квантования, но мощность входных шумов растет за счет расширения спектра).

Поэтому перед использованием сигнал всегда надо фильтровать. Если собираетесь мерять компас раз в секунду, то зачем вам 160 Гц? Отфильтруйте до 1 Гц. Это уже шум в 40 раз меньше. Т.е. было 2 градуса, а стало 0,05. При условии конечно что шум равномерно распределен, а он именно равномерно распределен. Нужно раз в минуту измерять, фильтруйде до 0,01 Гц. И т.д.

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

Musgravehill
Diman_Y:

Т.е. было 2 градуса, а стало 0,05.

Мне кажется, что тут физические ограничения. Сам датчик “заедает”, имеет гистерезис, несовершенство конструкции, наводки с одних своих линий на другие. То есть, выжать из него 0.05 градуса невозможно. Даже если его аналоговый сигнал подать на 64 битный АЦП, 1 ГГц дискретизацию, ФНЧ 1 Гц.

Diman_Y
Musgravehill:

Мне кажется, что тут физические ограничения.

Это не вопрос веры. Это просто математика и обработка сигналов. 😃

Musgravehill:

Сам датчик “заедает”, имеет гистерезис,

Это нелинейные искажения. О них я не еще не говорил.

Musgravehill:

несовершенство конструкции, наводки с одних своих линий на другие. То есть, выжать из него 0.05 градуса невозможно. Даже если его аналоговый сигнал подать на 64 битный АЦП, 1 ГГц дискретизацию, ФНЧ 1 Гц.

Пример с АЦП я привел просто чтобы пояснить как фильтровать шумы. В случае с компасом я уже фильтрую шумы самого компаса, т.е. те самые наводки, несовершенства и т.д. И отфильтровать я могу что угодно, если шум лежит за пределами нужной мне полосы пропускания. В нашем случае, если мне нужны отсчеты компаса раз в секунду, то я фильтрую фильтром с полосой 1 Гц.

Я могу даже картинки с шумами и без показать. 😃

А вот собственно и пример фильтрации.
Синий график - фильтрованный сигнал, красный не фильтрованный. Значения одной из осей магнитометра в состоянии покоя.
Как горовится, результат фильтрации на лицо. 😃

Musgravehill
Diman_Y:

В случае с компасом я уже фильтрую шумы самого компаса, т.е. те самые наводки, несовершенства и т.д. И отфильтровать я могу что угодно, если шум лежит за пределами нужной мне полосы пропускания.

У меня ощущение, что говорим о разном.
Фильтрация в частотной области не сделает из г - пулю.
Температурные погрешности, деформации частей, ЭМИ, гистерезисы и прочее - неустранимы.

Diman_Y:

Я могу даже картинки с шумами и без показать.

Покажите лучше 2 выставленных в одном направлении компаса, закрепленных на поворотной платформе. Чтобы один был образцовым с погрешностью 0.1 градус. А второй - ваш “полетный”. Пусть оба показывают на Север. Если погрешность полетного компаса составит хотя бы 0.5 градуса - я сильно пожму руку!
И следующий эксперимент - повторяемость результатов. Прокрутить платформу, выставить указатель на Север по образцовому компасу. Насколько будет врать полетный компас.

Diman_Y
Musgravehill:

У меня ощущение, что говорим о разном. Фильтрация в частотной области не сделает из г - пулю.

Смотрите на картинку и читайте еще раз то, что я написал. Все уже давно доказано.
На картинке пример того, как 2 градуса превратились в 0.2.

Musgravehill
Diman_Y:

На картинке пример того, как 2 градуса превратились в 0.2.

Дмитрий, попробуй провести эксперимент: плату с компасом (или коробку) положи на стол, обведи карандашом. Подними, поболтай, положи снова на стол в карандашный контур. Какая разность будет между предыдущим показанием компаса и текущим???
Потом еще раз поболтай плату, положи на стол в границы контура. Насколько показания изменились???

Неужели на 0.2 градуса?? (направление всегда было неизменным, карандашный контур не сдвинулся).

Diman_Y:

Смотрите на картинку

Я тоже так фильтрую. Через ФНЧ прогоняю, рекурсивные фильтры 1,4 порядка, вейвлеты, скользящее окно. Только реальное положение дел отличается от результата фильтрации.

morion15

Зачем вы используете такую точность 10^-4, мало того что там только шумы, вы тратите время процессора на фильтрацию. Округлите до 10^-3, и шумы уйдут, покрайней мере если исходить из картинки выше.
Имхо у вас избыточная точность.

Diman_Y
Musgravehill:

Потом еще раз поболтай плату, положи на стол в границы контура. Насколько показания изменились???

Ладно.
Что-то мне лениво стало доказывать.
У меня получается 0.2 градуса. Закончим спор.

morion15:

Зачем вы используете такую точность 10^-4, мало того что там только шумы, вы тратите время процессора на фильтрацию. Округлите до 10^-3, и шумы уйдут, покрайней мере если исходить из картинки выше. Имхо у вас избыточная точность.

Это не градусы. Это значение магнитного поля измеренного в “попугаях”. (В попугаях это значит в неизвестных величинах измерения. Но в связи с тем что единицы измерения меня в этом случае не волнуют, то меня это внолне устраивает.
И еще. Если шумы есть, то они никуда не уходят. И их отсечением я от них не избавлюсь.

morion15

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

Diman_Y
morion15:

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

Во первых, округление в фиксированной точке, всегда добавляет дополнительную ошибку, и лучше стараться использовать максимально возможный диапазон значений.
А во вторых, у меня floating point DSP, поэтому мне вообще все равно сколько там разрядов. У меня все автоматом округляется. 😃