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

serj

Так не важно, какой вектор коррекции вы взяли. с GPS голым было бы то же самое ( считаем что вектор скорости параллелен продольной оси.) и с гравитацией также.

Конечно, коррекция работает ПО ВСЕМ ОСЯМ, если только проекции корректирующего вектора не оси не нулевые. Но вращение вектора вокруг оси измерить нечем.
Это НИКАК не преодолеть, нет информации. И компоненты вращения вокруг некорректируемой оси будут неизбежно “влезать” в описание вращения.

Для коррекции этого нужен второй вектор, например GPS. Проще объяснить у меня не получается.
Вы сами сказали - в вашем случае у вас ДВА вектора. (компас и GPS). Хорошо. на широте Москвы, Питера. или на северном полюсе - вообще хорошо. ( правда GPS плохо ловится там 😃)
На экваторе будет хуже, там компас почти параллельно земле.

Если добавить еще и гравитацию- будет еще точнее.

И не надейтесь, что датчики будут работать также идеально когда вы к ним приложите вибрацию 😃

Diman_Y
serj:

Конечно, коррекция работает ПО ВСЕМ ОСЯМ, если только проекции корректирующего вектора не оси не нулевые. Но вращение вектора вокруг оси измерить нечем.
Это НИКАК не преодолеть, нет информации. И компоненты вращения вокруг некорректируемой оси будут неизбежно “влезать” в описание вращения.

Сергей, Вы просто не поняли принцип, поэтому и возражаете. Суть в том, что имея траекторию точки и траекторию оценки, можно определить постоянную ошибку оценки.
Еще раз, другими словами:
Когда самолет летить идеально прямо, коррекция не работает, так как в этом случае действительно у нас недостаточно данных (одной оси не хватает). Как только самолет начинает маневрировать, так сразу можно определить постоянную ошибку.
Не верите, вот уравнение:
C[n] = D(a[n]-e1,b[n]-e2,c[n]-e3)*C[n-1];

распишите его, и все станет ясно. 😃

Я совершенно ответственно заявляю, что второго вектора для оценки ошибки гироскопа не нужно (в формуле никакого второго вектора нет). Нам нужно значение компаса x,y,z (точка, причем нормированная, т.е амплитуда компаса нам по барабану).
ГПС мной упоминался как коррекция компаса, которая к гироскопу отношения не имеет. Дальше я еще говорил, что коррекция гироскопа возможна даже имея просто угол компаса от ГПС.
Широта и проекция тут вообще непричем. Алгоритм одинакого хорошо будет работать как на экваторе, так и на Северном полюсе.
Коррекция возможна как абсолютная (компенсировать абсолютный угол), так и относительная (компенсировать уплыв за промежутки времени). 😃

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

Для коррекции при маневрировании акселерометр использовать нельзя.

msv

Ладно, пытаюсь по порядку разобраться в алгоритме… Непонимание с первой фразы:
"Суть в том, что имея траекторию точки (что имеется в виду? Истинная траектории полета ЛА? Откуда нам она известна?) траекторию оценки (тоже непонятно- что это за траектория?), можно определить постоянную ошибку оценки (оценки ошибки траектории? почему постоянную? как вообще соотнести траекторию полета с ориентацией ЛА?).
ЗЫ Пол сезона пытался сделать коррекцию пирогоризонта по скорости изменения курса GPS. Очевидная математика, все просто (почти) и однозначно… Отлично работает на бумаге и в симуляторе… Увы… неизбежное скольжение ЛА на вираже, ветер и др. сложно учитываемые факторы, сделали эту коррекцию бессмысленной. Пришлось признать, что от такой коррекции больше вреда, чем пользы… Из этого опыта, поверю в ваш алгоритм после его хотя бы пробного тестирования в реальном полете.

blade
msv:

пытался сделать коррекцию пирогоризонта

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

Diman_Y:

Когда самолет летить идеально прямо

Diman_Y:

так сразу можно определить постоянную ошибку.

Математики-народ романтичный, взять хотя бы две этих фразы…
По ним- два вопроса:
1-а как автопилот это узнаЁт? (В реале- только анализ быстрого ЖПС (курс-высота) может дать такую информацию).
2-“Ошибка” (дельта, то есть) определяется, как разница значений: истинного и требуемого…
А что такое “постоянная ошибка”, если самолёт меняет положение и скорость ежесекундно.
О каком “постоянстве” идёт речь?

msv

Да простит меня Дмитрий за офф, отвечу не совсем по его теме…

blade:

зачем делать коррекцию того, что и так никуда не уходит?

Сколько смотрел видео с OSD индикацией пирогоризонта, - ровный горизонт, совпадающий с визуальным, редкое исключение… Неравномерный нагрев самих сенсоров, деталей ЛА, попадающих в их сектор чувствительности, изменение облачности во время полета итд, итп. Другое дело что эти отклонения не фатальны, тк. ошибки не накапливаются и система стабилизации с ними обычно без проблем справляется… Долго и настойчиво пытался приблизиться к совершенству… тем более после каждого полета при анализе видео/логов казалось- “вот почти хорошо, еще только тут постоянную времени увеличить… тут только коэффициент изменю… тут фильтр поставлю…”… На том увлекательном занятии и прошло пол сезона… А когда все выкинул, оказалось работает лучше без всех этих наворотов… 😃

ЗЫ Дмитрий, надеюсь вы понимаете, что самолет может лететь с неизменным курсом при некотором крене и наоборот? То что он может менять высоту при нулевом тангаже и наоборот? Речь о совершенно “правильном”, триммированном ЛА…

blade
msv:

Неравномерный нагрев самих сенсоров

Ну, я то с Ко Пилотом довольно много полетал…
А то, что Вы описываете-отсутствует при правильной его установке 😃
А версия с вертикальной парой пиродатчиков-ёщё и самокалибруется в полёте.

Diman_Y

Отвечу по алгоритму коррекции. Все остально пока вторично.

И так, имеем слудующее.

Имеется 3Д компас, который выдает вектор магнотного поля. Сам по себе вектор - константа (север). Значение компаса изменяется только при именении положения сомолета в пространстве. С[n] - значение компаса в различные моменты времени.
Есть гироскоп, который выдает скорости вращения по осям a[n],b[n],c[n], но выдает с ошибкой E (e1,e2,e3).
Задача: как имея значения компаса C[n] в различные моменты времени, значения гироскопа a,b,c[n] в различные моменты времени, найти ошибку E.

Другими словами. У нас есть значения гироскопа в моменты времени. Эти значения содержат ошибку, т.е. a[n] = ИдеальнаяСкоростьХ[n] + e1, b[n] = ИдеальнаяСкоростьY[n] + e2, c[n] = ИдеальнаяСкоростьZ[n] + e3.
Нам надо найти e1,e2 и e3.

Все.
Как из имеющихся данных найти ошибки я уже написал выше.

msv:

что имеется в виду? Истинная траектории полета ЛА? Откуда нам она известна?

Я говорю сейчас только о коррекции гироскопа. Все. Траекторию, высоту, ГПС и все остальное будем обсуждать потом. Даже положение самолета в пространтсве сейчас не будем обсуждать.

Обсуждаем только ошибку гироскопа. 😃

Изначально я сказал что смогу написать алгоритм коррекции значений гироскопа на основинии значений компаса. Мне возразили, что это сделать невозможно.
Я этот алгоритм написал. 😃

msv:

Дмитрий, надеюсь вы понимаете, что самолет может лететь с неизменным курсом при некотором крене и наоборот? То что он может менять высоту при нулевом тангаже и наоборот? Речь о совершенно “правильном”, триммированном ЛА…

Да. Я это понимаю. Поэтому в формулах, нигде не упоминается значение крена и все остальные параметры. Я работаю сейчас только с показаниями датчиков. Как летит самолет, это тема для следующих обсуждений. 😃
Сейчас у меня есть “идеальный” гироскоп, который никуда не плывет, и компас. Следубщим этапом будет определение положения самолета в пространстве.

serj

Дмитрий, я понял идею коррекции так:

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

Правильно?

Diman_Y
serj:

ы сравниваете две оценки положения по “скоростям” - трехмерной производной положения, так сказать, по- гироскопам и по компасу, так?

Не совсем.
Я использую значение компаса чтобы найти ошибку гироскопов. Скорость вращения по компасу я не вычисляю. Я вычисляю только “постоянную” ошибку гироскопов. Постоянную, в смысле постоянную на интервале наблюдения, в нашем случае - три отсчета (хотя вообще 6). 😃

Frr
Diman_Y:

Поэтому в формулах, нигде не упоминается значение крена и все остальные параметры. Я работаю сейчас только с показаниями датчиков. Как летит самолет, это тема для следующих обсуждений. Сейчас у меня есть “идеальный” гироскоп, который никуда не плывет, и компас. Следубщим этапом будет определение положения самолета в пространстве.

Значит это только калибровка гиры (смещение нуля по каждой оси),
а не “Артему Силкину - привет”. 😃
А у магнитометра смещение нуля отсутствует ? (от него зависят e1, …)

alexeykozin

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

и как можно исключать из расчета “вероятного вектора” фактор “вероятности ошибки”

  • вектора пути медленно движущегося GPS
  • отклонившегося на магнит компаса
  • показаний “встряхнутого” - т.е. перегруженного гироскопа, компаса или акселя (а это в условиях вибрации [от мотора+от порывистого ветра+толчки от грунта при взлете] может случиться гораздо раньше чем в настольно-математической модели)

и еще пара мыслей про точное математическое моделирование и его отклонение от реала.
в однопроцессорной системе опрос датчиков происходит не одномоментно и замеры сделаны не на одном интервале величины (допустим траектории) примерно так пусть т=точки на оси времени, тогда:
т0 опрос гпс, т1 опрос 3д гироскопа (допустим цифровой и все три оси за один опрос), т2 аналоговый аксель ось x, т3 аналоговый аксель ось y, т4 аналоговый аксель ось z, т5 цифровой компас … тут еще десятки циклов без гпс … тN опрос гпс (самые продвинутые гпс обновляют данные порядка 10 раз в секунду, остальные датчики можно опрашивать существенно чаще)

собственно соответственно показания направления вектора траектории
по гироскопу на интервале т1-т6,
по компасу т5-т10
по жпс т1 - тN
в условиях когда отклонения равномерны ошибка при частой выборке будет небольшой, но если вибрация …

serj
Diman_Y:

Не совсем.
Скорость вращения по компасу я не вычисляю.

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

Фактически- вы реализовали часть фильтра Калмана - с точки зрения оценок. Но в “постобработке”, так сказать, то есть у вас все значения известны.

Теперь представьте, что самолет летит на север. Что магнитное поле направлено точно на север. Пускай самолет все время швыряет в воздухе, все время есть какие-то движения. Но вот по крен относительно направления севера из компаса никак не извлечь, не важно, под каким углом самолет к нему находится. (представьте, что компас- это идеальный не уходящий гироскоп-маховик с осью на север)

В этом смысле компас ничем не отличается от любого другого корректирующего вектора.

alexeykozin
serj:

Теперь представьте, что самолет летит на север. Что магнитное поле направлено точно на север. Пускай самолет все время швыряет в воздухе, все время есть какие-то движения. Но вот по крен относительно направления севера из компаса никак не извлечь, не важно, под каким углом самолет к нему находится. (представьте, что компас- это идеальный не уходящий гироскоп-маховик с осью на север)

В этом смысле компас ничем не отличается от любого другого корректирующего вектора.

вы опять про 1-Д компас? тот который показывает азимут в одной плоскости?
насколько я понял автор использует 3-д компас дающий азимуты к трем плоскостям стрелки находящейся в магитном горизонте и указывающей на север

serj
alexeykozin:

вы опять про 1-Д компас?

Алексей, при построении ИНС не удобно использовать понятия 3Д и 1Д компасов .😃
Компас- это ВЕКТОР (магнитного поля земли). И гравитация- ВЕКТОР. И GPS тоже ВЕКТОР.
Имеет направление и длину. гравитация- направлена к центру земли. Магнитное поле земли направлено на магнитный полюс.

На этом примере я хотел показать Дмитрию, что из ОДНОГО вектора НЕВОЗМОЖНО извлечь информацию о вращении его вокруг собственной оси - он ее просто не несет. И не не важно, двигается самолет относительно этого вектора или нет.

Кстати, движение с точки зрения датчиков есть всегда, даже в покое - т.к они имеют шум.

alexeykozin

ладно, спор какой то непродуктивный выходит…

Diman_Y
Frr:

Значит это только калибровка гиры (смещение нуля по каждой оси),
а не “Артему Силкину - привет”.

Нет. Именно “привет”. Просто надо надо другие три точки брать. 😉
А вообще это другая тема. Обсуждение этого еще предстоит.

serj:

Теперь представьте, что самолет летит на север. Что магнитное поле направлено точно на север. Пускай самолет все время швыряет в воздухе, все время есть какие-то движения. Но вот по крен относительно направления севера из компаса никак не извлечь, не важно, под каким углом самолет к нему находится. (представьте, что компас- это идеальный не уходящий гироскоп-маховик с осью на север)

В этом смысле компас ничем не отличается от любого другого корректирующего вектора.

Если у меня Cz[n] = Cz[n-1] = Cz[n-2] = 0, в этом случае я действительно не могу извлечь информацию о крене (могу только по x и y). Но меня это не сильно бескопоет, так как, как только у меня получится Cz[n] != Cz[n-1] != Cz[n-2] (самолет хотябы чуть-чуть изменит курс с срого не север, на север + 1 градус), я сразу крен смогу откорректировать.
Если Cz[n] = Cz[n-1] = Cz[n-2] = , это значит что самолет и так летит ровно и крен откорректирован. Зачем мне еще что-то менять? 😃

serj:

В этом смысле компас ничем не отличается от любого другого корректирующего вектора.

Он отличается только тем, что он есть, и в отличии от акселерометра, компас - константа. Он есть, и его направление не меняется. Меняется толко положение самолета.

serj:

На этом примере я хотел показать Дмитрию, что из ОДНОГО вектора НЕВОЗМОЖНО извлечь информацию о вращении его вокруг собственной оси - он ее просто не несет.

Я с Вами полностью согласен!
Другими словами: если вектор константа (C[n] = C[n-1] = C[n-2]…). то мы не можем сказать, вращается система координать вокруг оси вектора или нет.
Это было сказано сразу. Что для определения ошибки мне нужно чтобы

Cx[n] != Cx[n-1] != Cx[n-2]
Cy[n] != Cy[n-1] != Cy[n-2]
Cz[n] != Cz[n-1] != Cz[n-2]

serj

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

Поменяйте вектор компаса на вектор гравитации, она всегда направлена к центру Земли. И независимо от крена и тангажа через некоторое время поплывет курс.

Musgravehill
alexeykozin:

ошибка при частой выборке

Компас имеет доверительный интервал, в лучшем случае, ±2 градуса, а то и все 4. Поэтому нет смысла проводить коррекцию ДУС каждые 3 считывания. Немного похоже на Калмана или альфа-бета фильтр: пусть у вас ДУС считываются с частотой 1 000 Гц. Так вот, за 1\333 секунды самолет не уплывет на 2 градуса, а компас легко покажет приращение в 2 градуса.

ДУС надо корректировать, когда уплывание горизонта по ним может достичь 2-4 градусов. Это вопрос секунд, поэтому компас можно опрашивать раз в * сек. Т.е. вы заранее закладываете в модель адекватность. (классический пример: вы начинаете разгоняться на старой машине, спидометр показывает 100км\ч, но вы знаете, что машина не может так быстро разогнаться. Поэтому не корректируете свои действия по показаниям спидометра, пока они не станут адекватными)

По этой причине страшно летать только по компасу=) Хотя проекция вектора маг.поля в большинстве случаев будет ненулевой на все 3 оси. Кстати, эти проекции нелинейно меняются.

Diman_Y
serj:

Дмитрий! Речь о том , что система будет вращаться вокруг оси вектора коррекции , независимо от того, под каким углом она к этому вектору расположена.

Сергей, Вы не понимаете о чем говорите. Все формулы я написал.

Musgravehill:

Компас имеет доверительный интервал, в лучшем случае, ±2 градуса, а то и все 4. Поэтому нет смысла проводить коррекцию ДУС каждые 3 считывания.

Есть такое понятее как децимация. Это означает, что расчеты и вычисления не обязательно проводить на той-же частоте что и отсчеты сенсоров. К тому-же, как Вы правильно написали, у компаса есть шум, значение которого в лучшем случае ± 2 градуса. Это шум сначало надо убрать и только потом, когда ошибка будет менее 0.1 градуса, можно говорить о коррекции.
У меня коррекция гироскопа происходит раз в секунду, раз в 30 секунд и еще абсолютная коррекция. Корректировать каждые 10 мС просто не нужно.

Musgravehill:

ДУС надо корректировать, когда уплывание горизонта по ним может достичь 2-4 градусов.

Это нелинейная коррекция (if/else). Ее время еще не пришло. Еще не все сделано с линейной.

Musgravehill:

По этой причине страшно летать только по компасу

Летать вообще страшно. 😃
Я уже писал, что коррекция по магнитометру это только первый контур коррекции гироскопа. Гироскоп это не истина в последней инстанции.

PS. Вчера вечером подсоединил xBee к пульту управления (без писишки). Теперь с одной стороны мой автопилот вместе с xBee, а с другой обычный пульт.
Может быть на следующих выходных пойду полетаю и опробую свою xBee. За одно и дальность связи по этому xBee проверю. 😃

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, и значит самолет стоит ровно, мягко скажем ошибочен. Любой ветер, газ, или маневр сводит этот алгоритм на нет.