Спасибо за комментарий — вы правы, Калман “летал” ещё на Аполлоне. На STM32F407 (Cortex-M4F) одинарная точность и FPU более чем достаточны для малых EKF/UKF (размерность 2–9) на 100–200 Гц — без ассемблера; обычный float/CMSIS-DSP хватает.
Включу в одну из статей статью мини-пример для рысканья (ψ) с оценкой дрейфа гироскопа (b) и поправкой по магнитометру. Карту магнитных склонений можно зашить в память устройства - она достаточно хороше сейчас проработана и стабильна в большинстве случаев.
Спасибо, я принимаю вашу критику, постараюсь давать больше низкоуровневых решений (таблицы, диаграммы и прочее), чтобы лучше раскрывать суть. Это увеличит объем изложения. Надеюсь на ваши прикладные замечания в будущем, я будучи любителем-энтузиастом совершаю все возможные ошибки новичка, но не пройдя этот путь - не вырасти.
Если вам не понятны мои ответы, то возможно вам стоит точнее задать вопросы. Я пояснил про каждый из пунктов - принять или нет это ваше личное дело. Материал публикуется в рубрике DIY - это рубрика про устройства создаваемые своими руками за свои деньги в свое свободное время.
Возможно мое изложение не соответствует вашим критическим требованиям, но я и не пишу учебник - я рассказываю историю создания устройства. Ошибки допускают те, кто что-то делает - это нормальный процесс. На этом прошу завершить дискуссию, если вам не нравится содержание - не читайте.
В статье я упоминаю использование дисперсии Аллана для анализа шума датчиков. Этот метод позволяет выделить несколько компонент шумов инерциальных датчиков – например, квантование, случайное блуждание нуля (angle/velocity random walk), нестабильность смещения (bias instability), дрейфовую составляющую и т.д.. Всего подобных параметров может быть порядка пяти-семи. Почему учитываются все? Потому что каждая из этих шумовых компонент по-разному влияет на погрешность со временем. В высокоточной инерциальной системе все значимые источники ошибок стараются промоделировать: перед интегрированием проведена калибровка (определены bias, масштаб, перекос осей, зависимость от температуры и др), а результаты (включая параметры шумовой модели из Allan deviation) закладываются в алгоритм (например, в ковариации фильтра Калмана). Такой тщательный учет необходим, чтобы снизить дрейф и обеспечить максимальную точность – если пренебречь каким-то фактором, он может вызвать накопление ошибки. Именно поэтому я включил все ~7 параметров в модель ошибок: это повышает реализм модели и позволяет EKF лучше компенсировать каждую составляющую шума. Это подтверждается и на практике – после учёта смещений, шумов и коррекции фильтром, дрейф координаты заметно сокращается
STM32F407IGT6 – это 32-разрядный микроконтроллер семейства STM32F4 (ядро ARM Cortex-M4, 168 МГц, 1 МБ флэш и 192 КБ SRAM). Данный MCU не имеет традиционной кэш-памяти данных. В Cortex-M4 (STM32F4) нет выделенного cache для RAM, а ускорение работы с флэш достигается с помощью так называемого ART-акселератора – предвыборки и буферизации инструкций (инструкционный префетч и branch cache). Проще говоря, STM32F407 делает быстрое исполнение кода из флэш (0 wait state на частоте 168 МГц) благодаря аппаратной предвыборке, но кэша данных (D-cache) у него нет. Возможно поэтмоу моя фраза о «минимизации кэш-промахов» применительно к STM32F4 прозвучала несколько странно. Я имел ввиду оптимальное размещение данных в памяти (например, использование 64КБ CCM – Core Coupled Memory – для самых часто используемых данных) или избегание лишних обращений к внешней памяти, что актуально для более новых микроконтроллеров с кэшем. В любом случае, на STM32F407 главный “ускоритель” – это правильная организация памяти и включение FPU/DSP, а не управление кэш-линиями. Кэш-промахи как таковые для данного MCU не существенны, ведь доступ к SRAM и так быстр, а чтение из флеша оптимизировано аппаратно.
Первые два рисунка в статье как раз иллюстрируют траекторию до коррекции фильтром и после нее. На рис. 1 показано моделирование полета без включения коррекции (только инерциальная интеграция) – красная линия постепенно уходит от истинной траектории (черные точки), и к концу 8-минутного отрезка накопленный дрейф достигает порядка 300 метров. На рис. 2 приведена траектория после включения расширенного фильтра Калмана и периодической коррекции по барометру – оценка (красная) гораздо ближе к реальному пути (черные точки), и окончательное отклонение составляет около 50–80 м. Эти значения указаны в тексте статьи, а на графиках разница видна визуально: во втором рисунке красная траектория почти совпадает с истинной, тогда как в первом заметно “уплывает” от нее. Таким образом, «300 м до» и «50–80 м после» – это величины позиционной ошибки навигации соответственно до применения EKF и после его работы. Они демонстрируют, насколько сильно фильтрация и внешние поправки уменьшают накопленную погрешность. При отсутствии GNSS добиться ошибки ~50 м на дистанции ~5 км – уже очень хороший результат кмк.
Взял по принципу «самое лучшее», так как реальная производительность устройства будет уже после испытаний и настройки, тогда можно будет подумать о снижении размеров и стоимости устройства.
Дело в том, что математика зависит от аппаратной части. Проектировать алгоритм, который не опирается на конкретные измерения с помощью датчиков - это скорее работа виртуальная. Затем все равно помоется приземлять на схемотехнику.
Ну тут скорее речь идет о паттернах, неважно с какой скоростью проходится поворот, если эти повороты совершаются с определенной последовательностью - выстраивая граф пути. Затем можно все сложить в neo4j и через cypher сделать запросы на поиск подобия графов. Чем больше вершин и ребе в сиквенсе графа - тем точнее будет поиск. Что касается скорости - то она у нас есть всегда, т.к. скорость — это производная координаты по времени, а ускорение — производная скорости по времени. Т.е. зная ускорение в каждый момент времени (допустим раз в секунду) мы можем считать перемещение в каждую секунду и определять вектор и величину скорости.
Идея интересная, но не будет ли много повторяющихся паттернов в этой "нотации дорог"? Также как учитывать перестроения? Вводить поправочные коэффициенты или вносить параметр "полосности дороги"? А если по обочине?
Да, технически я смогу сделать вам такую запись и дополнить ее данным с GPS (правда он сейчас сильно глушится в городах). Напишите в личку.
В инерциальной технике принято различать две физически разные величины – истинное ускорение и специфическую силу. Истинное ускорение – это вектор второй производной координаты тела по времени. Специфическая сила (на английском specific force) – это сила, приложенная к единице массы, за вычетом силы тяжести. Именно её и чувствует любой акселерометр.
Это легко проверить экспериментально: если положить датчик на стол, скорость его равна нулю, то есть истинное ускорение равно нулю. Тем не менее акселерометр выдаёт сигнал порядка 1 g, направленный вверх. Этот «лишний» g как раз и есть специфическая сила – реакция опоры, удерживающей датчик от падения. В описании IMU на сайте Dewesoft так и сказано: IMU измеряет угловую скорость и специфическую силу – разницу между абсолютным ускорением и ускорением гравитации. Поэтому в навигационных алгоритмах перед двойным интегрированием ускорений из показаний акселерометра необходимо вычитать вектор притяжения.
Аналогично с гироскопами. Есть два типа устройств: классические механические гироскопы и твердотельные (MEMS, оптические и т. д.). Механический гироскоп представляет собой быстро вращающийся ротор, который сохраняет ориентацию в пространстве благодаря закону сохранения момента импульса. В этом смысле верно, что гироскоп «сохраняет своё угловое положение» и сопротивляется внешним крутящим моментам. Но современные инерциальные модули используют датчики угловой скорости, а не классические гироплатформы. MEMS‑гироскоп – это вибрационный датчик, который выдаёт электрический сигнал пропорционально мгновенной угловой скорости вокруг своей оси. Такой датчик не «держит» ориентацию, а только измеряет скорость вращения; для получения ориентации сигнал интегрируется во времени внутри процессора.
Поэтому фразы «акселерометр измеряет разницу ускорений» и «гироскоп измеряет угловую скорость» корректны в инженерном контексте. Они подчёркивают, что показания датчика – это не абсолютная кинематическая величина, а та сила или скорость, которая остаётся после исключения гравитации или другими словами – правильное ускорение.
Если летали на легких бортах с магнитным компасом, то наверняка замечали, что компас этот болтается туда-сюда в пределах 30 градусов постоянно, выстроить по нему курс можно, но только очень примерный.
VOR DME - да, уже лучше, но много ли бортов имеют на себе авионику, способную отслеживать 2 вектора одновременно? Да и сложно это в голове все моделировать - динамическое уравнение о величине 2 векторов. Также, далеко не всегда удается запомнить или найти информацию о ВОРах на маршруте следвоания - это процесс подготовки к полету, нужно иметь полетные карты, знать ближание/дальние приводы больших ВПП, знать основные маяки на маршруте. Для малой авиации, когда пилот - это хобби, не а не профессия, - очень тяжело быть все время на острие знаний и хочется умных помощников.
Вы абсолютно правы, писать драйвер я не вижу смысла, по крайней мере на этапе первых прототипов. Суть коцепции устройства в том, чтобы комбиинровать несколько разных по физическому принципу источников данных "из коробки", применить к ним умную обработку и попробовать получить вменяемый результат. Наберитесь терпения, дальше будут статьи с фото живого устройства и его работы.
Касательно формул, то не приводил их ровно по той же причине, что вы указали - это слишком заумно для науч поп статьи.
Гармины сейчас не работают в малой авиации. Плюс глушилки. Плюс ковры. Плюс телефоном вы не увидите ничего на высоте от 300 футов и выше, т.к. потеряется интернет.
Тот случай, когда статья отлично подходит для утреннего кофе в одиночестве, вечерних посиделок с комрадами или горячих споров в воскресной бане! Большое спасибо автору!
Не соглашусь с вами. Есть утверждение автора статьи о том, что пуски будут дешеветь экспоненциально. А есть реальность, в которой пуски на ССО замерли на отметке $5К за кг, а пуски на МКС взлетели в цене в 7 раз. График явно не выглядит экспоненциально нисходящим, а значит все предположения автора оказываются под сомнением ввиду опровержения базовой гипотезы.
По факту же данное подорожание является следствием отмены субсидий - и здесь я с вами согласен. Но! Бизнес СпейсХ построен на гос.оборон.заказе США и только потенциал Старлинк греет сердца инвесторов. А раз так, то с цена пуска на Фальконах вырастет - чудес в капиталистическом мире не бывает. Что же касается патентов - есть положения (в том числе и в американском праве), что патенты не распространяются на потребности государства.
Автор, а вы делали анализ приведенных цифр самостоятельно? Дело в том, что в апреле 2021г NASA повысили цены на доставку груза на орбиту в 7 раз (Стоимость доставки 1 кг груза выросла почти в семь раз — с $3 тысяч до $20 тысяч. Цена обратной доставки с МКС составит вместо нынешних $6 тысяч за 1 кг $40 тысяч, https://www.nasa.gov/leo-economy/commercial-use/pricing-policy).
Это немного не укладывается в вашу гипотезу о том, что цена будет снижаться экспоненциально. Вернее совсем не укладывается, т.к. цены вывода груза на орбиту, на которую вы ссылаетесь - не существует на рынке. Т.е. приведенные данные не валидированы на момент публикации и это огорчает.
История про "захватить Психею" не совсем вписывается в прикладной характер статьи по целому ряду причин, от экономических - столько драг. металлов в свободном доступе обрушит их цену пропорционально потенциалу извлечения, до экологических - эти драг металлы будут фонить так, что погружать их под магнитный щит Земли равносильно выстрелу в ногу.
Спасибо за комментарий — вы правы, Калман “летал” ещё на Аполлоне. На STM32F407 (Cortex-M4F) одинарная точность и FPU более чем достаточны для малых EKF/UKF (размерность 2–9) на 100–200 Гц — без ассемблера; обычный float/CMSIS-DSP хватает.
Включу в одну из статей статью мини-пример для рысканья (ψ) с оценкой дрейфа гироскопа (b) и поправкой по магнитометру. Карту магнитных склонений можно зашить в память устройства - она достаточно хороше сейчас проработана и стабильна в большинстве случаев.
Спасибо, я принимаю вашу критику, постараюсь давать больше низкоуровневых решений (таблицы, диаграммы и прочее), чтобы лучше раскрывать суть. Это увеличит объем изложения. Надеюсь на ваши прикладные замечания в будущем, я будучи любителем-энтузиастом совершаю все возможные ошибки новичка, но не пройдя этот путь - не вырасти.
Если вам не понятны мои ответы, то возможно вам стоит точнее задать вопросы. Я пояснил про каждый из пунктов - принять или нет это ваше личное дело. Материал публикуется в рубрике DIY - это рубрика про устройства создаваемые своими руками за свои деньги в свое свободное время.
Возможно мое изложение не соответствует вашим критическим требованиям, но я и не пишу учебник - я рассказываю историю создания устройства. Ошибки допускают те, кто что-то делает - это нормальный процесс. На этом прошу завершить дискуссию, если вам не нравится содержание - не читайте.
В статье я упоминаю использование дисперсии Аллана для анализа шума датчиков. Этот метод позволяет выделить несколько компонент шумов инерциальных датчиков – например, квантование, случайное блуждание нуля (angle/velocity random walk), нестабильность смещения (bias instability), дрейфовую составляющую и т.д.. Всего подобных параметров может быть порядка пяти-семи. Почему учитываются все? Потому что каждая из этих шумовых компонент по-разному влияет на погрешность со временем. В высокоточной инерциальной системе все значимые источники ошибок стараются промоделировать: перед интегрированием проведена калибровка (определены bias, масштаб, перекос осей, зависимость от температуры и др), а результаты (включая параметры шумовой модели из Allan deviation) закладываются в алгоритм (например, в ковариации фильтра Калмана). Такой тщательный учет необходим, чтобы снизить дрейф и обеспечить максимальную точность – если пренебречь каким-то фактором, он может вызвать накопление ошибки. Именно поэтому я включил все ~7 параметров в модель ошибок: это повышает реализм модели и позволяет EKF лучше компенсировать каждую составляющую шума. Это подтверждается и на практике – после учёта смещений, шумов и коррекции фильтром, дрейф координаты заметно сокращается
STM32F407IGT6 – это 32-разрядный микроконтроллер семейства STM32F4 (ядро ARM Cortex-M4, 168 МГц, 1 МБ флэш и 192 КБ SRAM). Данный MCU не имеет традиционной кэш-памяти данных. В Cortex-M4 (STM32F4) нет выделенного cache для RAM, а ускорение работы с флэш достигается с помощью так называемого ART-акселератора – предвыборки и буферизации инструкций (инструкционный префетч и branch cache). Проще говоря, STM32F407 делает быстрое исполнение кода из флэш (0 wait state на частоте 168 МГц) благодаря аппаратной предвыборке, но кэша данных (D-cache) у него нет. Возможно поэтмоу моя фраза о «минимизации кэш-промахов» применительно к STM32F4 прозвучала несколько странно. Я имел ввиду оптимальное размещение данных в памяти (например, использование 64КБ CCM – Core Coupled Memory – для самых часто используемых данных) или избегание лишних обращений к внешней памяти, что актуально для более новых микроконтроллеров с кэшем. В любом случае, на STM32F407 главный “ускоритель” – это правильная организация памяти и включение FPU/DSP, а не управление кэш-линиями. Кэш-промахи как таковые для данного MCU не существенны, ведь доступ к SRAM и так быстр, а чтение из флеша оптимизировано аппаратно.
Первые два рисунка в статье как раз иллюстрируют траекторию до коррекции фильтром и после нее. На рис. 1 показано моделирование полета без включения коррекции (только инерциальная интеграция) – красная линия постепенно уходит от истинной траектории (черные точки), и к концу 8-минутного отрезка накопленный дрейф достигает порядка 300 метров. На рис. 2 приведена траектория после включения расширенного фильтра Калмана и периодической коррекции по барометру – оценка (красная) гораздо ближе к реальному пути (черные точки), и окончательное отклонение составляет около 50–80 м. Эти значения указаны в тексте статьи, а на графиках разница видна визуально: во втором рисунке красная траектория почти совпадает с истинной, тогда как в первом заметно “уплывает” от нее. Таким образом, «300 м до» и «50–80 м после» – это величины позиционной ошибки навигации соответственно до применения EKF и после его работы. Они демонстрируют, насколько сильно фильтрация и внешние поправки уменьшают накопленную погрешность. При отсутствии GNSS добиться ошибки ~50 м на дистанции ~5 км – уже очень хороший результат кмк.
Параллельно решал задачу разводки платы, чтобы ускорить процесс выпуска устройства.
Взял по принципу «самое лучшее», так как реальная производительность устройства будет уже после испытаний и настройки, тогда можно будет подумать о снижении размеров и стоимости устройства.
Дело в том, что математика зависит от аппаратной части. Проектировать алгоритм, который не опирается на конкретные измерения с помощью датчиков - это скорее работа виртуальная. Затем все равно помоется приземлять на схемотехнику.
Ну тут скорее речь идет о паттернах, неважно с какой скоростью проходится поворот, если эти повороты совершаются с определенной последовательностью - выстраивая граф пути. Затем можно все сложить в neo4j и через cypher сделать запросы на поиск подобия графов. Чем больше вершин и ребе в сиквенсе графа - тем точнее будет поиск. Что касается скорости - то она у нас есть всегда, т.к. скорость — это производная координаты по времени, а ускорение — производная скорости по времени. Т.е. зная ускорение в каждый момент времени (допустим раз в секунду) мы можем считать перемещение в каждую секунду и определять вектор и величину скорости.
Идея интересная, но не будет ли много повторяющихся паттернов в этой "нотации дорог"? Также как учитывать перестроения? Вводить поправочные коэффициенты или вносить параметр "полосности дороги"? А если по обочине?
Да, технически я смогу сделать вам такую запись и дополнить ее данным с GPS (правда он сейчас сильно глушится в городах). Напишите в личку.
Извините за объем, но решил ответить развернуто.
В инерциальной технике принято различать две физически разные величины – истинное ускорение и специфическую силу. Истинное ускорение – это вектор второй производной координаты тела по времени. Специфическая сила (на английском specific force) – это сила, приложенная к единице массы, за вычетом силы тяжести. Именно её и чувствует любой акселерометр.
Это легко проверить экспериментально: если положить датчик на стол, скорость его равна нулю, то есть истинное ускорение равно нулю. Тем не менее акселерометр выдаёт сигнал порядка 1 g, направленный вверх. Этот «лишний» g как раз и есть специфическая сила – реакция опоры, удерживающей датчик от падения. В описании IMU на сайте Dewesoft так и сказано: IMU измеряет угловую скорость и специфическую силу – разницу между абсолютным ускорением и ускорением гравитации. Поэтому в навигационных алгоритмах перед двойным интегрированием ускорений из показаний акселерометра необходимо вычитать вектор притяжения.
Аналогично с гироскопами. Есть два типа устройств: классические механические гироскопы и твердотельные (MEMS, оптические и т. д.). Механический гироскоп представляет собой быстро вращающийся ротор, который сохраняет ориентацию в пространстве благодаря закону сохранения момента импульса. В этом смысле верно, что гироскоп «сохраняет своё угловое положение» и сопротивляется внешним крутящим моментам. Но современные инерциальные модули используют датчики угловой скорости, а не классические гироплатформы. MEMS‑гироскоп – это вибрационный датчик, который выдаёт электрический сигнал пропорционально мгновенной угловой скорости вокруг своей оси. Такой датчик не «держит» ориентацию, а только измеряет скорость вращения; для получения ориентации сигнал интегрируется во времени внутри процессора.
Поэтому фразы «акселерометр измеряет разницу ускорений» и «гироскоп измеряет угловую скорость» корректны в инженерном контексте. Они подчёркивают, что показания датчика – это не абсолютная кинематическая величина, а та сила или скорость, которая остаётся после исключения гравитации или другими словами – правильное ускорение.
Если летали на легких бортах с магнитным компасом, то наверняка замечали, что компас этот болтается туда-сюда в пределах 30 градусов постоянно, выстроить по нему курс можно, но только очень примерный.
VOR DME - да, уже лучше, но много ли бортов имеют на себе авионику, способную отслеживать 2 вектора одновременно? Да и сложно это в голове все моделировать - динамическое уравнение о величине 2 векторов. Также, далеко не всегда удается запомнить или найти информацию о ВОРах на маршруте следвоания - это процесс подготовки к полету, нужно иметь полетные карты, знать ближание/дальние приводы больших ВПП, знать основные маяки на маршруте. Для малой авиации, когда пилот - это хобби, не а не профессия, - очень тяжело быть все время на острие знаний и хочется умных помощников.
Вы абсолютно правы, писать драйвер я не вижу смысла, по крайней мере на этапе первых прототипов. Суть коцепции устройства в том, чтобы комбиинровать несколько разных по физическому принципу источников данных "из коробки", применить к ним умную обработку и попробовать получить вменяемый результат. Наберитесь терпения, дальше будут статьи с фото живого устройства и его работы.
Касательно формул, то не приводил их ровно по той же причине, что вы указали - это слишком заумно для науч поп статьи.
Так считались формулы на мета-языке, внесу исправления и вставлю картинкой, спасибо за замечание
Да, терминологию описываю как я сам понимаю, т.к. не имею профильного образования по авионике - терминология может страдать. Спасибо за замечание.
Гармины сейчас не работают в малой авиации. Плюс глушилки. Плюс ковры. Плюс телефоном вы не увидите ничего на высоте от 300 футов и выше, т.к. потеряется интернет.
Прибор - это ОЕМ от китайского пр-ля DM72B, скажите а прошивку делали свою? Есть ли отличия?
Тот случай, когда статья отлично подходит для утреннего кофе в одиночестве, вечерних посиделок с комрадами или горячих споров в воскресной бане! Большое спасибо автору!
Самое неожиданное - это доходность Эльсевьер.
В начале статьи так и написано, что это публикация перевода чужой статьи. К сожалению - бездумная.
Не соглашусь с вами. Есть утверждение автора статьи о том, что пуски будут дешеветь экспоненциально. А есть реальность, в которой пуски на ССО замерли на отметке $5К за кг, а пуски на МКС взлетели в цене в 7 раз. График явно не выглядит экспоненциально нисходящим, а значит все предположения автора оказываются под сомнением ввиду опровержения базовой гипотезы.
По факту же данное подорожание является следствием отмены субсидий - и здесь я с вами согласен. Но! Бизнес СпейсХ построен на гос.оборон.заказе США и только потенциал Старлинк греет сердца инвесторов. А раз так, то с цена пуска на Фальконах вырастет - чудес в капиталистическом мире не бывает. Что же касается патентов - есть положения (в том числе и в американском праве), что патенты не распространяются на потребности государства.
Автор, а вы делали анализ приведенных цифр самостоятельно? Дело в том, что в апреле 2021г NASA повысили цены на доставку груза на орбиту в 7 раз (Стоимость доставки 1 кг груза выросла почти в семь раз — с $3 тысяч до $20 тысяч. Цена обратной доставки с МКС составит вместо нынешних $6 тысяч за 1 кг $40 тысяч, https://www.nasa.gov/leo-economy/commercial-use/pricing-policy).
Это немного не укладывается в вашу гипотезу о том, что цена будет снижаться экспоненциально. Вернее совсем не укладывается, т.к. цены вывода груза на орбиту, на которую вы ссылаетесь - не существует на рынке. Т.е. приведенные данные не валидированы на момент публикации и это огорчает.
История про "захватить Психею" не совсем вписывается в прикладной характер статьи по целому ряду причин, от экономических - столько драг. металлов в свободном доступе обрушит их цену пропорционально потенциалу извлечения, до экологических - эти драг металлы будут фонить так, что погружать их под магнитный щит Земли равносильно выстрелу в ногу.