Телеметрия (часть 1)

foxfly
Brandvik:

Вот, наткнулся о GPSах , надеюсь кому нти это будет тоже интересным. www.navigatorgps.ru/content/view/125/7/

Дело в том, что приемник GPS и GPS модуль- две очень разные вещи: приемник- это законченное устройство, с набором определенных потребительских функций и ограничений: например, точность определения места в приемнике- в несколько раз хуже, чем в модуле- это определяется законодательными моментами (не точнее30 метров)
Сами модули- также различаются, уже на стадии изготовителя- гражданские (обычно ограничена скорость обновления информации , максимальная высота и скорость движения) и военные- с частотой “обновления” до 30 гц. Поэтому реклама продавца бытовых GPS в данном форуме- абсолютно неинтересна, просто- не та тематика.

smalltim
Artie:

“Нипалучицца !”
Средняя высота" летящего самолета - примерно столь же ценная информация, как и средняя температура по больнице, и поскольку в процессе полета она изменяется в пределах, значительно (вернее, “как минимум, на порядок”) больших, нежели та ошибка, которую мы хотим скорректировать, то использовать это самое “среднее значение” (неважно за какой интервал) для повышения точности - достаточно бессмысленно.

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

Представьте себе две кривые на графике: одна - показания от ГПС, шумная, рваная, но при усредении большого количества отсчетов достаточно точно описывающая высоту. Вторая кривая - показания от барометрического датчика. Точно такая же по форме, но, во-первых, без шумов, а во-вторых, уползающая вниз-вверх при изменении атм. давления.

Ну так и кто мешает сдвигать показания барометрического датчика _постоянно_, основываясь на показания ГПС, несмотря на то, что средняя высота за последние три минуты не имеет смысла?

Artie
foxfly:

Мне кажется, тут должна последовать фраза из анекдота: “Дорогой, а с кем это ты сейчас говорил?”😃
Тем более, не полетавши на ДПЛА выдвигать какие-то ТТХ- занятие довольно бессмысленное, примерно- как бокс по переписке…

Я готов согласиться, что у меня - “не настоящий ДПЛА”. - Не буду спорить о терминологии. 😉
Но меня полеты на своем пепелаце вполне устраивают, равно как и моя реализация телеметрии. Не говоря уже о том, что оценку точности той или иной технолигии можно давать, вообще ни на чем не летая, - достаточно знать предметную область.

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

foxfly:

А азимут с точностью 10 градусов- это не курс, а направление:)
Прикиньте, где окажется аэроплан , летящий с удаления 5км с точностью 10грд.? Правильно- нэ в нашэм районе.

Ошибка в определении угла в прямоугольном треугольнике определения точностью задания его катетов и точностью вычисления арктангенса. Первое для одночастотного gps-приемника заведомо известно - это порядка 15м КВО, а второе выбирается, исходя из вычислительных ресурсов и решаемой задачи. Если Вы еще не забыли, то обсуждается не самолет-разведчик, отправляемый на территорию сопредельного государства, а чисто хоббийная примочка - just for fun, и исходя из этой задачи я и озвучил ошибку в 10 градусов, которая возможная на удалении порядка сотни-другой метров (ближе самолет уже точно видно глазом, равно как с него видна и ВПП). И тут вполне пригодно даже “направление”.
Если же вдруг предположить, что мы вдруг действительно улетели на 5 километров, и у нас при этом не пропал ни ап- ни даунлинк с моделью, то несложно прикинуть, что на таких удалениях угловая ошибка будет порядка четверти градуса, - то есть, значительно меньше того, что вообще имеет смысл отображать на экране…

Artie
smalltim:

А Вы подумайте хорошенько 😃

В данном случае - не буду спорить.

Если Вам удастся (например, на простейшей мат. модели, состоящей из трех графиков: а) некая “истинная” высота, б) “накладываемая” на нее ошибка gps-приемника и в) монотонно “уплывающая” ошибка барометрического высотомера) продемонстрировать работающий алгоритм, делающий из а+б и а+в “чистое” а (с точностью, лучшей, чем каждая из этих ошибок) - я с удовольствием признаю собственную неправоту в этом вопросе и возьму Ваш метод на вооружение…

smalltim:

Представьте себе две кривые на графике: одна - показания от ГПС, шумная, рваная, но при усредении большого количества отсчетов достаточно точно описывающая высоту.

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

smalltim
Artie:

В данном случае - не буду спорить.

Если Вам удастся (например, на простейшей мат. модели, состоящей из трех графиков: а) некая “истинная” высота, б) “накладываемая” на нее ошибка gps-приемника и в) монотонно “уплывающая” ошибка барометрического высотомера) продемонстрировать работающий алгоритм, делающий из а+б и а+в “чистое” а (с точностью, лучшей, чем каждая из этих ошибок) - я с удовольствием признаю собственную неправоту в этом вопросе и возьму Ваш метод на вооружение…

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

Проблемы видятся только в том случае, если истинная высота самолета сильно (сильнее уровня шумов) меняется с частотой выше, чем половина частоты опроса GPS. Ну, это понятно, происки Найквиста-Котельникова. Если самолет не шарахается вверх-вниз чаще чем раз в 2 секунды, всё должно быть хорошо 😃

Degreez

Ну вот, народ начинает вспоминать теорию автомачического регулирования. Время реакции по рассматриваемой оси = Т, соответственно инфу о этой оси нужно получать не реже чем Т/2 (по Найквисту)

serj

Для начала вам, товарищи спорщики нужно знать истинную высоту полета чтоб делать какие-то выводы. 😃
Иначе это будет спор чем один “фуфлометр” лучше другого…

барометр в спокойную погоду за час обычно уплывает на 5-12м. перед дождем- бывает и 20-30м, но редко.

Далее. ну посмотрите же наконец, на картинки, котрые я выкладывал. 😃
право же, не из пальца содержание, расположение и размер цифр высосаны.

smalltim

Мне еще далеко до такого уровня просветления. Да и не нужно.

Северный

Прочитал всю ветку…
Хочу высказать глубокое уважение к активистам данного вопроса!
Потихоньку изучаю этот вопрос. С pic дружу, тем паче есть хорошие помощники на работе.
Как продвигаются дела у
Artie

Куда деньги нести - признаться, не знаю. Свою версию как нечто коммерческое я не рассматриваю, бо делается оно крайне немудряще; - там не за что брать деньги. Выкладывать свои сорсы в public domain я пока не буду, бо за код стыдно (это, в общем, была поделка уровня “проект выходного дня”), но со временем - по мере причесывания и доведения до ума - вероятно, выложу.

Что посоветуете ‘на попробовать’ для начала?

smalltim
Северный:

Прочитал всю ветку…
Хочу высказать глубокое уважение к активистам данного вопроса!
Потихоньку изучаю этот вопрос. С pic дружу, тем паче есть хорошие помощники на работе.
Как продвигаются дела у
Artie
Что посоветуете ‘на попробовать’ для начала?

Я в скором времени всё выложу. Схему, ASM-код, прошивку, печатную плату в 2 вариантах. Только у меня не PIC, а Mega8. Artie дал добро на выкладывание своего собственного кода отрисовки в состеве моего безобразия, а всёго остального, что у меня понаписано, мне не жалко. Да и нет там каких-то уж особенных откровений.

Brandvik

Здорово! Буду ждать с нетерпением! А пока пенорезку буду заканчивать!

smalltim

Ура!
Сегодня собрал схемку на печатной плате в варианте для SMD, всё заработало, ошибок в разводке не обнаружилось 😃
На плате стоит MPX4115 вместо MPX5010D, завтра надо переписать в коде коэффициенты пересчета давления в высоту.

А начиналось всё очень интересно: только собрал плату, запустил, программирую, так обнаруживаю детеныша, увлеченно водящего жалом тестера по ногам меги8. А мега маленькая, SMDшная, тут ноги и коротнулись. Взгрустнул.
Отправил детеныша спать, впаял новую мегу, прошил - не пашет. Прошиваю заново - вообще не видится. Смотрю fuse-биты - мммааать… Биты поставлены на синхронизацию от внешнего генератора. Взгрустнул пуще прежнего, мега-то последняя, где в час ночи новую достанешь? Подумал. Достал старый вариант телеметрии, быстренько вшил в него простенькую программку, чтоб на видеовыход отсылался меандр, подключил к новой платке - ура, мега определилась. Вшил правильные fuse-биты, прошил - не работает. Прошил меандровую программу - вполне себе меандрит в видео. Сижу, думаю, разглядываю плату. Ага, в цепи ресета LM1881 вместо 680кОм на землю стоит 680Ом. Достал линейку резисторов, проданных в Чипе-Дипе - правда, 680 Ом. Однако!
Поковырялся в заначке, выпаял с какой-то платы 470кОм, впаял - заработала!

Все остальное завтра, а сейчас - отдыхаю 😃

foxfly
smalltim:

Ура!
Сегодня собрал схемку на печатной плате в варианте для SMD, всё заработало, ошибок в разводке не обнаружилось 😃
На плате стоит MPX4115 вместо MPX5010D, завтра надо переписать в коде коэффициенты пересчета давления в высоту.

А начиналось всё очень интересно: только собрал плату, запустил, программирую, так обнаруживаю детеныша, увлеченно водящего жалом тестера по ногам меги8. А мега маленькая, SMDшная, тут ноги и коротнулись. Взгрустнул.
Отправил детеныша спать, впаял новую мегу, прошил - не пашет. Прошиваю заново - вообще не видится. Смотрю fuse-биты - мммааать… Биты поставлены на синхронизацию от внешнего генератора. Взгрустнул пуще прежнего, мега-то последняя, где в час ночи новую достанешь? Подумал. Достал старый вариант телеметрии, быстренько вшил в него простенькую программку, чтоб на видеовыход отсылался меандр, подключил к новой платке - ура, мега определилась. Вшил правильные fuse-биты, прошил - не работает. Прошил меандровую программу - вполне себе меандрит в видео. Сижу, думаю, разглядываю плату. Ага, в цепи ресета LM1881 вместо 680кОм на землю стоит 680Ом. Достал линейку резисторов, проданных в Чипе-Дипе - правда, 680 Ом. Однако!
Поковырялся в заначке, выпаял с какой-то платы 470кОм, впаял - заработала!

Все остальное завтра, а сейчас - отдыхаю 😃

Ночью- надо спать!
А по поводу SMD процессоров Минздрав предупреждал: при отработке программы они крайне неудобны! Ну а в общем- поздравляю.
Только от детеныша паяльник прячь- хорошо, что он водил жалом (300 градусов!) не по своим или твоим ногам, а по “мегиным” 😃
А то у моего знакомого всей пятерней хватанул- тут уж стало не до пайки 😦

smalltim

Итак, на высоте 9-го этажа платка выдала ровно 24 метра. Потом в течение 5 минут MPX4115 медленно плыл, нагреваясь, и высота “подросла” до 26 метров. Учитывая разницу в 15-20 градусов между уличной температурой и температурой в квартире - неплохо. В полете такой разницы, конечно, не будет.
При неизменной температуре, т.е., в комнате, за 5 минут гуляние показаний датчика с моей обработкой оказалось 0.8 метра, т.е., меньше чем шаг альтиметра. В сэмплах это уплывание оказалось суммарно 6 сэмплов при усреднении 16 накоплений по 64 измерения родным 10-битным атмеговским ЦАПом.
Касание датчика пальцами, дышание на него и прочие пляски с бубном дают ± 2 сэмпла.
В общем, всё прекрасно, я даже удивлен 😃

Осталось только вставить отрезание отрицательных высот и обработку отрицательных температур от термодатчика - сейчас он фигню при минусе показывает - и всё, выкладываю всё на обозрение.

smalltim

Так, начинаем раздачу.
Видео старта телеметрии: первые 15 секунд - “разогрев датчиков”: инициализация нуля высоты и скорости в момент времени 5, 10 и 15 секунд.

ASM-код и прошивка телеметрии:

Схема и разводка печатной платы в Eagle:

Eagle доступен в бесплатной версии, проблем быть не должно

Фото вариантов печатных плат:

Фото телеметрии в сборе. Серый шлейф идет к разъему программирования, он будет отпаян. Плата после промывки перестанет пугать внешним видом:

ASM - код кое-где имеет комментарии, “чтоб сам не забыл”, так что проблем с пониманием как что работает, быть не должно.

Железка питается от 3S LiPo (соответственно, код заточен на показ трех напряжений), на плате стоит линейный стабилизатор 5В 0.5А, питающий атмегу и всё остальное. Есть диодная защита от переполюсовки по питанию.

Меряет:
Температура: -40…+85 градусов с шагом 1 градус
Высота: 0…999м с шагом 1 м
Скорость 0…350кмч с шагом 1 кмч
Напряжение: 3х 0…9.99В с шагом 0.01В. Из напряжений на банках 2 и 3 вычитаются напряжения банок 1 и 2, чтоб получить индивидуальные побаночные напряжения. Соответственно, независимо три напряжения не померять без изменения кода.

Что еще?
Синхронизация времени ведется по кадровым синхроимпульсам видеосигнала, так что при мощных помехах в видеосигнале или отключении камеры время останавливается 😃

Да, самое главное:
Спасибо Artie, Foxfly, Serj за советы и поддержку 😃

Северный
Prikupets:

Эх, придется делать 😃 😃 Спасибо !!!

Привет Андрей, Вашу схему доделываю… жду pic с чип дипа… отпишусь, как получилось.

smalltim

В личке появились вопросы: как давление преобразовывается в высоту и скорость?

Есть барометрическая формула, записанная в таком виде: Δh = 18400(1 + at)lg(p1 / p2)
Температуру в полете считаем постоянной, упрощаем до: Δh = 18400*lg(p1 / p2)
Считаем, что в нашем случае p1/p2~1, то есть аппроксимируем логарифмическую кривую касательной в единице.
В итоге получается Δh = K*(p2 - p1), где в К входит и число разрядов ЦАП, и логарифм десятки по основанию е, и т.д. В общем, примерно 80 метров на кПа.
Если кому-то хочется просчитать “честный” логарифм, милости просим: код открыт, посчитать логарифм на атмеге - не сверхзадача. Только это будет из пушки по воробьям.

Скорость считается “честно”: извлекается корень и т.д.
Формула из школьного курса: P1-P2=(rv^2) /2, где r - плотность воздуха, v^2 - квадрат скорости, P1-P2 - разница давлений на дифференциальном датчике

Vad64
smalltim:

Скорость 0…350кмч с шагом 1 кмч

На низких скоростях шаг, видимо, будет в несколько раз больше. Даже если получать с оверсэмплингом АЦП 12 разрядов, нижний порог скорости будет, по моим расчетам, 7 км/ч. Если я неправ - поравьте, пожалуйста.
А в целом - очень симпатичный проект, поздравляю!