OSD на ATmega1281

Vlado
msv:

Похоже, но вроде бы не совсем…
ЗЫ Кстати, после заземления корпуса кварца, вроде бы все барабашки у меня исчезли. Кварц от старой сетевой платы 10мбт, и был конечно там заземлен.
ЗЫЫ По ЛУТ платку такой сложности можно сделать за один вечер…

Да не совсем, счас отойду чуток соориентируюсь. Враги похоже сожгли родной лаптоп😁. Перестал узнавать мышку (оборзел ) и флаш и потом зависает.
9000 тыщ км проехали, это вам не хухры мухры.

msv

С возвращением! 😃 Очень интересно узнать (думаю не только мне) о Ваших успехах и впечатлениях по этому проекту. Но торопиться не надо… 😃

Dikoy
AndyBig:

Вам нужно буквально описать? Пожалуйста: заметит начало сноса

Во-1 не заметит, во-2 выявить именно снос из его сигнала всё равно невозможно, в-3 это рассуждения из серии “приделать к табуретке крылья”. Я вам дал ссылки, при желании можете сами нагуглить. Принципов работы БИС и БСО в инете море. В вашем исходном посте каша из понятий и принципов. Не сочтите за наезд, я бы и не вклинился, но вы же этим других учите… В итоге народ потратит время и деньги ради пары-тройки морковок.
Вывод номер раз: стабилизация только на акселерометрах невозможна. Почему - читать ссылки.
Вывод номер два: основным источником нарастающей со временем погрешности БСО на микромеханике являются именно алгоритмы интегрирования, а не шумы гиро. Я вам по секрету скажу, что при использовании большинства видов ФК наличие шумов идёт даже на пользу и в некоторых системах их искусственно смешивают с сигналом гиро, дабы повысить шумность. А шумность самого гиро очень мала, да ещё хорошо давится этими же алгоритмами интегрирования, как бесплатное приложение. Шум гиро примерно в 100 раз меньше шума пирометров в среднюю погоду. Я уже постил когда-то этот график:

Жёлтый - пиро, чёрный - гиро. Синий - комплексированный сигнал.
По чёрному графику виден уход гиро по времени. Точнее не гиро, который ДУС (оторвать бы яйки американским маркетологам, введшим понятие гиро для МЕМС), а того самого интегрирования. В ДУСЕ же уходить нечему. По крайней мере порядок собственного дрейфа у него значительно меньше дрейфа математики и определяется, прежде всего, дрейфом температуры.
А вот чтобы гиро не уходил, надо его (точнее опять же математику) корректировать по другому датчику. И вот тут уже простор для инженеров огромный. Однако, все решения пока половинчаты. Они лишь оттягивают критический уход, но не избавляют от него полностью.

AndyBig:

И если величина ускорения лежит в пределах шумов на выходе датчика, то виновато интегрирование?

В этом случае погрешностей вообще не будет.
Кстати, способ борьбы с погрешностями интегрирования - установить изначально неисправные датчики! В этом случае действительно, интегрирование на качество системы не скажется. Патентуйте 😃

msv
Dikoy:

основным источником нарастающей со временем погрешности БСО на микромеханике являются именно алгоритмы интегрирования

Что Вы имеете в виду под погрешностью от “алгоримом интегрирования”? Мне известна только два варианта дискретного интегрирования- метод прямоугольников и трапеций (второе- по сути совмещение собственно интегрирования с примитивным сглаживанием). И оба варианта (тем-более в целочисленке) никаких погрешностей давать не могут. Есть проблема неточности квантования, неизбежных ошибок дискретизации (при которой непрерывная функция условно считается не изменяет значения на время дискретизации). Но основная накапливающаяся ошибка после интегратора имхо именно из-за неидеальности ДУС (несимметричного шума, сдвига нуля). Вопрос о необходимости и вариантах коррекции постоянной составляющей после интегратора, как бы собственно к интегратору и не относится, он парень простой- складывает все что дали…
ЗЫ Кстати на графике не понятно, черная линия- это плывет ноль с гиры или ошибка после интегратора? И почему она никак не меняется при изменении угла?

Diman_Y
Dikoy:

основным источником нарастающей со временем погрешности БСО на микромеханике являются именно алгоритмы интегрирования, а не шумы гиро

Или это опечатка, или одно из двух. 😃

Как уже заметил msv, алгоритмы сами по себе не могут вносить никаких погрешностей. Вот я могу интегрировать в double (это 64 бита плавающая запятая). Погрешность самого алгоритма у меня вообще не будет, но при этом уход значения угла у меня то-же наблюдается если не делать дополнительной коррекции. 😃

Основная проблема при интегрировании, не только мемсов, а вообще интегрирования, это наличие постоянной составляющей в сигнале. Наличие этой постоянной составляющей и дает постоянный уход сигнала при интегрировании.
Природа этой постоянной составляющей это ADC offset, или постоянная ошибка АЦП. Вот чтобы компенсировать эту ошибку и используют разные методы.

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

В любом случае, ошибка алгоритма тут не причем. Если вы используете 16 бит, то при правильном использовании можно добиться постоянной ошибки в 96 dB. Причем постоянной составляющей шума не будет вообще. Я использую 32 бита плавучку и у меня ошибка не больше 144 дБ.

targetorsk

Пробежался по теме. Очень интересно. Но не нашел программы или готового HEX файла для этого супер девайса.

msv

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

Vlado

msv:

С возвращением! 😃 Очень интересно узнать (думаю не только мне) о Ваших успехах 😃

Вот вернулся и плата поспела видео передатчика 5.8GHz с антенной. Типично люди гибнут за металл а тут за FR4. Вес 12 гр усиление антенны до 10dBi ну и мощность Китайская, написано 23 а померил до 20dBm. Походу посмотрим, если понадобиться прикрутим драйвер, пока потребление 100мА от 12V.
Приемная часть пач антенна где то 110 на 110мм так шта прикрутим к пульту. С запуском не скоро как будет результат что нить покажу а на мои просьбы прошу любить и жаловать.

msv

На выходном полетал на новом месте. Не самый удачный день.
В первых почему-то раза два подвирала высота GPS. Значение обновлялось на 1-2 м с большим отставанием, потом резко менялось сразу метров на 50, показывая действительную высоту. Самолет каждый раз в попытках достичь целевую высоту уходил в крутое пике, приходилось отключать RTH и переходить на режим стабилизации. Не знаю связано ли это с особенностями рельефа (какие-нибудь переотражения) или просто неудачное время. Задумываюсь о дополнительном контроле по бародатчику…
Во вторых во время полета солнце зашло за тучку, воздух прохладный и заметно уменьшился температурный градиент. Поэтому в авто-режимах при резких сменах целевого курса самолет вместо аккуратных виражей пытался лететь на ноже. Для исключения возможности этой проблемы есть мысль сделать контроль и ограничение скорости изменения курса. Принцип то понятен, как-то от этой скорости уменьшать целевой крен, но вот какой конкретный алгоритм для этого сделать, пока не соображу… Может у кого есть какие мысли?..

Иван

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

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 за сенсор не найти… 😃
ЗЫ Вспомнил, драгоценную голову из самой америки почтовики просто бросили в почтовый ящик… За неделю до этого мелкий пакет, тоже без оценки, из ГК категорически не стали отдавать жене по моему паспорту…