OSD на ATmega1281

Иван

может аксель ещё добавить? если с него не было инфы о смене крен - значит врёт пира?

Dikoy
msv:

Есть проблема неточности квантования, неизбежных ошибок дискретизации (при которой непрерывная функция условно считается не изменяет значения на время дискретизации).

Это первая большая составляющая погрешности.

msv:

Но основная накапливающаяся ошибка после интегратора имхо именно из-за неидеальности ДУС (несимметричного шума, сдвига нуля). Вопрос о необходимости и вариантах коррекции постоянной составляющей после интегратора, как бы собственно к интегратору и не относится, он парень простой- складывает все что дали…

А это - вторая. Каждый раз сложение идёт с некоторой ошибкой. И эта ошибка накапливается по мере складывания.
Источник этой погрешности, конечно же, и в шумах ДУС, и в шумах АЦП, но их порядок довольно мал. В моих фильтрах шум пирометра эффективно давился именно при помощи ДУС, как менее шумного прибора. А вот наибольшую погрешность вызывают как раз ошибки дискретизации. Причём в статике они больше, чем в динамике.

Diman_Y:

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

Ну дык! Если её не давить, остальные погрешности можно вообще не упоминать. Уход будет диким. Я предполагал, что эта погрешность как раз подавлена калманом или т.п. способом. Например, ТЕКНОЛ применяет термостатирование и отбор сенсоров по параметрам. Тогда основным источником погрешности становятся ошибки дискретизации и линеаризации, которые никак не спрогнозируешь и не подавишь. А это именно ошибки алгоритма. О чём я и говорил.
Опять же, на сколько систематически уходит ДУС? Ну, 0,1-0,5% от шкалы при обычном дрейфе температуры. Это фигня. В фильтрах, корректирующих пиро я вообще на это внимания не обращаю.
Не фигнёй это становится, когда интегратор начинает эти 0,5% многократно суммировать. И именно сбросом интегратора мы добиваемся коррекции, а не ударом по гиро, как было с когерером 😃
Опять виноват интегратор. В алгоритмах, где его нет, и ошибок не накапливается.

Иван:

может аксель ещё добавить? если с него не было инфы о смене крен - значит врёт пира?

Дельная идея, кстати. Только не аксель, а дус. В этом случае систематика ДУС вообще побоку, т.к. нет интегратора.

msv

Спорить можно бесконечно, думаю мы все говорим об одном и том-же, вопрос терминологии…

Иван:

может аксель ещё добавить? если с него не было инфы о смене крен - значит врёт пира?

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

Diman_Y
Dikoy:

Тогда основным источником погрешности становятся ошибки дискретизации и линеаризации, которые никак не спрогнозируешь и не подавишь. А это именно ошибки алгоритма. О чём я и говорил.

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

Еще раз по поводу ошибки алгоритма.
Вот есть у меня DSP, где я использую плавующую запятую. На входе у меня приходит сигнал с шумом. Отношение сигнал/шум на входе 50 дБ. Т.е. собственный уровень шума у меня -50 дБ.
Уровень шума алгоритма у меня -192 дБ. Это в 10^-7 раз меньше чем шум на входе.
Если этого не достаточно, то я могу использовать двойную точность и у меня шумы алгоритма будут -384 дБ, это будет 10^-17.

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

Ну а если я не прав, то вот мне правда интересно, а какие еще есть погрешности в алгоритме, которые надо упоминать?

msv

Дмитрий, имхо не стоит спорить по мелочам, что значения углов посчитанных по ДУС плывут и причина этого понятна уже каждому “школьнику”… Лучше поподробнее расскажите про:

Diman_Y:

Компенсировать эту ошибку можно разными методами. Вот некоторые предлагают использовать данные темпиратуры для этого. Я на пример использую оценку постоянной составляющей во времени фильтром 8-го порядка. И т.д.

Честно говоря ничего не понял… Подразумевается, что усредняя за большой период времени скажем крен должен быть нулевым и от этого коррекция? но в реальных полетах это не так… 😦

Diman_Y
msv:

Честно говоря ничего не понял… Подразумевается, что усредняя за большой период времени скажем крен должен быть нулевым и от этого коррекция? но в реальных полетах это не так…

Да. Коррекция от этого, но не совсем в лоб. 😃
Вообще, я до самолета еще не добрался. Во думаю завтра-послезавтра в машине повозить а в выходные на самолете полетать и накопить данные сенсоров. Но на данный момент, на столе это работает так:
Есть данные начальной оценки. Т.е. сначала первые несколько секунд все спокойно, и я могу просто накопить ошибку. Эта ошибка и есть начальная оценка.
Потом включается следующий алгоритм:
ФНЧ (тот который 8-го порядка) включается тогда, когда изменения гиро - минимальные (а еще я подключу аксель и компас и буду считать изменения векторов гиро, компаса и акселя. Не их амплитуды, а их направления). Но с акселем там есть засада со знаком…
Так вот, вот когда изменения меньше пороговых, вот тогда все и считается.
Я конечно понимаю что это нелинейно, но кому сейчас легко. 😃
Все работает нормально если после долгой тряски на некоторое время будут спокойные промежутки.

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

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

Да еще.
У меня еще есть замечательный компас. Он работает не так быстро как другие устройства, но работает хорошо. Начальное направление держит очень прилично, как ни крути. Да и у акселя уход минимальный.
Так что за авиагоризонт лично я не волнуюсь. Вот расчет абсолютных координат это да. Вот там надо будет думать… 😃

msv

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

Dikoy
Diman_Y:

Дискретизацию всю жизнь все считали шумовой составляющей

И как это противоречит моим “Тогда основным источником погрешности становятся ошибки дискретизации и линеаризации”?

Diman_Y:

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

Гладко было на бумаге…

Diman_Y:

Вообще я не понимаю что Вы понимаете под понятием линеаризации.

Линеаризацией всегда называлось упрощённое представление функции в ограниченных условиях. Если мы рассматриваем функцию, а не мгновенное изменение параметра, то мы всегда имеем линеаризацию в АП. Я так понял, Калмана вы не используете, значит и значение линеаризации для вас не так велико.

Diman_Y:

Короче, то что Вы называете ошибками алгоритма, ошибками самого алгоритма не является.

Да это не я называю, это терминология такая, сложившаяся. Во всех статьях и патентах, что я видел. Вы зациклились на ошибках матаппарата и сводите их к ошибкам алгоритма, не выводя алгоритм за пределы программы. Вот, шум вычисления в double зачем-то посчитали… Я же понимаю это в более широком смысле, называя алгоритмом весь процесс работы АП. Откажитесь от интегрирования, используйте только угловую скорость, и вы обнаружите что даже на дрейф нуля можно забить. Не говоря про офсеты АЦП. Накопление ошибки образуется только при вводе интегрирования, и называются они ошибками интегрирования. А интегрирование - неотъемлимая часть алгоритма работы с ДУС.
Если же, как вы, рассматривать АП по кусочкам, а не единой системой, то перспективы раскрываются весьма радужные.

Diman_Y:

а какие еще есть погрешности в алгоритме, которые надо упоминать?

Большинство я вам описал. Не забудьте ещё про вибрацию двигателя и раскачку самолёта ветром на полосе, когда вы будете накапливать “начальную оценку”. А так же то, что эта оценка на столе и в полёте будет разная 😃 Причём в полёте всё будет немного лучше.
Короче, полетайте, позаписывайте параметры. Тогда и видно будет, что и где шумит. Тогда и поспорим в отдельной ветке 😃 А тут с оффом надо завязывать.
Скажу лишь, что коррекция акселем на ровных участках, в итоге, оказалась у нас самой эффективной. Все новомодные фичи, вроде GPS, компасов и пиро по совокупности работают хуже. Хотя, каждый из способов имеет свои преимущества в опр. условиях.

msv

Полевые испытания алгоритма #441 прошли вполне успешно. Этот, в некотором смысле, PID, вывернутый наизнанку (да простят меня спецы ТАУ), отлично справляется с торможением, дает минимальное перерегулирование, ну и более безопасен для устойчивости самолета даже при неточном горизонте, тк. ограничивает в явном виде скорость поворота. Подобного эффекта я долго надеялся получить от Д-ветки обычного ПИД-а, и в принципе эффект торможения она (Д-ветка) давала, но несравнимо хуже и как бы плохо предсказуемый… Теперь думаю, может такой же алгоритм применить для определения “целевая высота->целевой тангаж”?
ЗЫ Был атакован стаей каких-то больших птиц, их 15 штук собралось… Летали косяком за самолетом, периодически одна вырывалась нападала… Но все обошлось… 😃 Жаль только не установлена камера “заднего вида”, были бы отличные кадры…

Vlado

Интерсно пляшут девки. Птицы большие и не опознаны, это как то не по нашенски😵 Надо сказать у меня материал в ноутбуке тоже пропал, вот в прострации буду делать вскрытие. А софт чувствуется обретает все более зримые контуры ( мой шкурный интерес вполне логичен😒 надеюсь договориться) Меня тоже стали часто атоковывать птицы в последнее время. С точки зрения статистики, довольно аномально. Хорошо что не бабочки а то эти энтомологи, в душе и по сути
очень сеньтиментальны. Бабочек собирать…для науки. А то еще и чебурашку покажут, походу.

Dikoy
msv:

Полевые испытания алгоритма #441 прошли вполне успешно.

А можно посмотреть это в виде кода? По блок-схеме не очень понятно.

msv

Ок, плс:


#define MAX_SPEED_ROTATION (180/4)  //180grad for 4 sec=45g/s
//---------------------------------------------------------------------------
s_int CalcRollFromCourse(s_int new_course)
{
s_int e, c;

e=(new_course-g_course); if(e<0) e+=360;
if(gRollHysteresis>0) { if(e>(180+gRollHysteresis)) gRollHysteresis=-gAP.CourseDirHyst; }
else { if(e<(180+gRollHysteresis)) gRollHysteresis=gAP.CourseDirHyst; }
if(gRollHysteresis<0) e-=360;
//-- target speed of rotation -----------
e*=MAX_SPEED_ROTATION; e/=90;
if(e>MAX_SPEED_ROTATION) e=MAX_SPEED_ROTATION;
else if(e<-MAX_SPEED_ROTATION) e=-MAX_SPEED_ROTATION;
//-- current speed of rotation --
c=(g_course-g_course1);
g_course1=g_course;
if(c<0) c+=360;
if(c>180) c-=360;
c*=50; //grad/sec
//------------------
e=IIR_Filter(&gIIR_CourseRoll, e-c);
e*=gRoll.MaxAngle; e/=MAX_SPEED_ROTATION; //MAX_SPEED_ROTATION->gRoll.MaxAngle;
e=PID_Work(&gPID_CourseRoll, e);
return e;
}

Код не оптимизирован, но зато более понятен… (мне во всяком случае… 😃)

Игорь_Лытнев

Что то не могу на fmadirect отдельно голову найти только вместе с co-pilotом , плохо ищу или их там уже нет, если не трудно киньте ссылочку где можно купить отдельно голову или может где отдельно датчики появились ?

И еще, может кому пригодится.
Для вывода изоражения я обычно использую модуль SPI. В PIC24 просто песня , 16 битный SPI c восьмиуровневым FIFO прямо готовая видеокарта , восемь 16 битных слов в буфер кинул (128 пикселей) и пошел заниматься своим делом. процессор почти не напрягается.

msv

Увы …revolectrix.com/…/Co-Pilot-CPD4-Sensor-Unit Out of Stock… Боюсь и не появится. Зато цены заметно упали… Почти за те день которые я только за голову заплатил, можно готовый пилот взять …revolectrix.com/…/Co-Pilot-CPD4-2-Channel-Flight-…. Есть шанс, что это тоже остатки…
Я бы тоже взял вертикальную пару для экспериментов, поэтому присоединяюсь к вопросу- может подскажут где по дешевке модуль готовый взять или хотя бы сенсоры?

SPI с аппаратным FIFO это здорово… В меге даже буферный регистр для SPI поленились сделать… 😦

msv

Цена (тогда она была под 50) меня начала радовать, когда понял, что в розницу отдельно пиродатчики меньше чем 20 за сенсор не найти… 😃
ЗЫ Вспомнил, драгоценную голову из самой америки почтовики просто бросили в почтовый ящик… За неделю до этого мелкий пакет, тоже без оценки, из ГК категорически не стали отдавать жене по моему паспорту…

Игорь_Лытнев

40$ голова, 55$ co-pilot с головой , брать отдельно вроде как смысла нет , а если возьму целиком , то свою стабилизацию точно делать не буду 😦

msv

Это pyroelectric… Не пойдет… 😦 Надо thermopile.

Игорь_Лытнев:

если возьму целиком , то свою стабилизацию точно делать не буду

Во первых- уверены, что удовлетворит все Ваши возрастающие потребности?.. А во вторых- насколько интересно в каждом полете проверять воплощение своих очередных идей!.. Все остальные свои самолеты похоже окончательно забросил, не интересно… Ну летают, ну и что…

blade
msv:

Это pyroelectric… Не пойдет… Надо thermopile.

И это- правильно: пироэлектрик содержит внутри буферный транзистор, что делает его абсолютно непригодным для наших применений. А вот термофил- то, что надо…
Термобатарейка с диапазоном чувствительности 5-14 нМ 😃
Только фирма Декстер, которая их раньше запросто продавала по 10$- теперь на сайте пишет “введите паспортные данные, тогда поговорим” 😦

Игорь_Лытнев
msv:

Во первых- уверены, что удовлетворит все Ваши возрастающие потребности?.

Даже точно знаю что не удовлетворит

msv:

А во вторых- насколько интересно в каждом полете проверять воплощение своих очередных идей!.. Все остальные свои самолеты похоже окончательно забросил, не интересно… Ну летают, ну и что…

Именно! Но есть еще лень матушка , особенно когда под рукой что то готовое и почти удовлетворяющее 😦
Хотя задача довольно интересная и возможно переборет лень , но пока не буду рисковать, поищу датчики отдельно и покапаю в сторону видеогоризонта.