Search
Write a publication
Pull to refresh

Comments 11

Четвёртая статья, но всё на своих местах - "алгоритмы" без алгоритмов, собственные термины и проч.

Скажем, несколько раз упоминается дисперсия Аллана. Там что-то около 7 параметров, зачем и каким образом они все учитываются в модели?

сама структура памяти спроектирована так, чтобы минимизировать кэш‑промахи.

О каких промахах, да и вообще кэшах речь, касаемо stm32f407 (если я правильно смог считать название камня с лоурезной картинки из прошлой статьи)?

Ну и вопрос на засыпку. Чем отличаются первые два рисунка и где на них 300м "до" и 50-80 "после"?

  1. В статье я упоминаю использование дисперсии Аллана для анализа шума датчиков. Этот метод позволяет выделить несколько компонент шумов инерциальных датчиков – например, квантование, случайное блуждание нуля (angle/velocity random walk), нестабильность смещения (bias instability), дрейфовую составляющую и т.д.. Всего подобных параметров может быть порядка пяти-семи. Почему учитываются все? Потому что каждая из этих шумовых компонент по-разному влияет на погрешность со временем. В высокоточной инерциальной системе все значимые источники ошибок стараются промоделировать: перед интегрированием проведена калибровка (определены bias, масштаб, перекос осей, зависимость от температуры и др), а результаты (включая параметры шумовой модели из Allan deviation) закладываются в алгоритм (например, в ковариации фильтра Калмана). Такой тщательный учет необходим, чтобы снизить дрейф и обеспечить максимальную точность – если пренебречь каким-то фактором, он может вызвать накопление ошибки. Именно поэтому я включил все ~7 параметров в модель ошибок: это повышает реализм модели и позволяет EKF лучше компенсировать каждую составляющую шума. Это подтверждается и на практике – после учёта смещений, шумов и коррекции фильтром, дрейф координаты заметно сокращается

  2. 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 и так быстр, а чтение из флеша оптимизировано аппаратно.

  3. Первые два рисунка в статье как раз иллюстрируют траекторию до коррекции фильтром и после нее. На рис. 1 показано моделирование полета без включения коррекции (только инерциальная интеграция) – красная линия постепенно уходит от истинной траектории (черные точки), и к концу 8-минутного отрезка накопленный дрейф достигает порядка 300 метров. На рис. 2 приведена траектория после включения расширенного фильтра Калмана и периодической коррекции по барометру – оценка (красная) гораздо ближе к реальному пути (черные точки), и окончательное отклонение составляет около 50–80 м. Эти значения указаны в тексте статьи, а на графиках разница видна визуально: во втором рисунке красная траектория почти совпадает с истинной, тогда как в первом заметно “уплывает” от нее. Таким образом, «300 м до» и «50–80 м после» – это величины позиционной ошибки навигации соответственно до применения EKF и после его работы. Они демонстрируют, насколько сильно фильтрация и внешние поправки уменьшают накопленную погрешность. При отсутствии GNSS добиться ошибки ~50 м на дистанции ~5 км – уже очень хороший результат кмк.

Для чего эта чятГПТшная портянка, которая либо никак не отвечает на вопрос (в какую модель ошибок включены все параметры дисперсии Аллана? Датчиков? Как это помогает фильтру "лучше" компенсировать каждую составляющую?), либо постулирует очевидные вещи (фраза о кэше прозвучала не "странно", она просто неверная. Вся остальная лирика просто излишня), либо идёт вразрез со статьёй (графики на рисунках практически идентичные, только первый чуть шумнее, а второй отмасштабирован почти в четыре раза. При этом ни красная, ни любая другая из тридцати цветов линия, никуда не "уплывает". Все они стабильно находятся внутри чёрной линии. Ну или это такой красный, который на моём мониторе никак не отображается)?

Тут возникает вопрос. С какой целью публикуется подобный материал, который по сути ничего не раскрывает, несмотря на подзаголовки? Кто-то стоит над душой и заставляет делать публикации? Предлагает какие-то преференции? Просто потешить эго?

Если вам не понятны мои ответы, то возможно вам стоит точнее задать вопросы. Я пояснил про каждый из пунктов - принять или нет это ваше личное дело. Материал публикуется в рубрике DIY - это рубрика про устройства создаваемые своими руками за свои деньги в свое свободное время.

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

если вам не нравится содержание - не читайте.

Могу ответить, что если не нравится критика - не публикуйте. Тем более такой материал, который с заголовком "Алгоритмы: как превратить сырые данные в координаты" и во втором же предложении "Эта часть посвящена математике...", и при этом в нём нет ни математики, ни вменяемых алгоритмов. Видны только обрывочные и слабоструктурированные знания, при сильном желании донести это всё до общественности. Поэтому вы правы, дискуссию вести бессмысленно.

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

3.

Где там красные линии то все же? Что за странные М в качестве единиц для осей? Километры что ли?
А почему они разные на двух картинках, они же только фильтрацией отличаются?
И что то мутное-цветное смещающееся внутри черной линии это предсказанная траектория?

На мой взгляд вы решаете нерешаемую задачу.
Ориентацию с точностью до одного градуса можно получить, но скорость - вряд ли
Будет гравитация у вас не 9.81 а 9.79 (локальная аномалия или просто высота большая)
И получите вы за 8 минут скорость большую на 8 метров в секунду
Позиция будет в километровой погрешности за 2 минуты

Вам надо либо знать скорость (Доплер, по поверхности или как то так) либо какие то визуальные ориентиры иметь, тогда можно что то сделать.

Не знаю, насколько хорош Калман - по моему опыту не слишком, но может я его просто готовить не умею. Возможно. Даже наверняка, учитывая что обычный ahrs у меня давал результаты лучше, чем Калман с кватернионами. Но у меня просто не real time задача, я занимаюсь постобработкой, так что мне проще - с калманом я повозился чуть, при прыжках GPS он совсем что то у меня глючил. Ведь с gps оно как - долгое время он может нормально соответствовать траектории. Ну да, ошибка 20 метров, но со всеми инерциальными датчиками согласован, фильтр считает его достаточно надежным... А потом как появился еще один спутник, так куда нибудь упрыгает - и все ориентации и скорости с ума сходят. Калман же рассчитан на случайное блуждание, а в случае gps это не так. Но тут явно есть большие специалисты чем я в этой теме. Не про это хотел написать.

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

Если , STM32F407, with single precision FPU, чем это вам , поможет в фильтре Кальмана., если только писать на ассемблер … Хотя бы приведите пример кода, использования фильтра Кальмана , для управления по рысканью(такие термины используются в управлении летател.,аппаратами …)… а так совершенно. пустые слова, как на партсобрании … Наверное автора, и похожее на него стадо, упоминание , кватерионов и фильтра Кальмана, вводит в трепетную дрожь… Фильтр Кальмана, применяли ещё когда автора и в проекте не было … Для расчета траектории лунного посадочного модуля, в проекте Appolo ., т.е примерно 58 лет назад …. Поэт прав, умом Россию не понять…. Возможно её надо понимать , совсем другим местом, у которого с умом никакой. связи нет …

Спасибо за комментарий — вы правы, Калман “летал” ещё на Аполлоне. На STM32F407 (Cortex-M4F) одинарная точность и FPU более чем достаточны для малых EKF/UKF (размерность 2–9) на 100–200 Гц — без ассемблера; обычный float/CMSIS-DSP хватает.

Включу в одну из статей статью мини-пример для рысканья (ψ) с оценкой дрейфа гироскопа (b) и поправкой по магнитометру. Карту магнитных склонений можно зашить в память устройства - она достаточно хороше сейчас проработана и стабильна в большинстве случаев.

А почему кватернион в векторе состояния? Где вы такое увидели? Вроде как уже общепринятая практика держать там не кватернион (4 измерения), а ошибку поворота (3 измерения), которая уходит в кватернион и сбрасывается в 0 после каждого шага фильтра. Плюсов много, например кватернион сильно нелинеен и избыточен, меньше вектор состояния - меньше операций. Еще сталкивался с неприятной особенностью - зависимость шума от ориентации: при наклоне сенсора на 90 градусов ковариация и шум в ориентации вырастали на порядок. У меня был UKF и возможно, это его особенность, не знаю. Но обратите внимание.
Еще не очень понятно как фильтр проработает 2 часа без коррекции. Ковариация будет бесконечно расти для всего вектора состояния, включая ориентацию, так как она завязана на акселерометр и вы не знаете истинных ускорений и не используете какого-то допущения об их природе. Разве что планируется брать эти данные от бортовой системы?

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

Спасибо за точное замечание — у нас error-state/MEKF: в векторе состояния 3-мерная дельта фи (угол вращения), номинальная ориентация хранится кватернионом; после обновления q <- δq(δθ)Хq, δθ->0. Это снижает размерность, убирает нормализацию и уменьшает нелинейность. Рост шумов при 90° — следствие параметризации/линеаризации; лечим правоинвариантной формой и Q, заданной в теле-СК (перетюнинг по режимам).

«2 часа без коррекции» не цель: без якорей ковариация расползётся. Реальные апдейты: барометр (h), магнитометр (ψ), GNSS при доступности, Пито/воздушная скорость, ZUPT/нулевые-ускорения на прямых, иногда map-matching/метки от пилота. В их отсутствие — только предсказание. Поэтому в схему введено такое колчиество датчиков и контуров, чтобы снижать цену ошибки на дистанции. Но вопрос супер-хороший, уверен что эта проблема будет, но буду решать ее после накопления реальных данных. Робкая надежда есть на основе опыта многолетней эксплуатации кроссовок с датчиками ускорения, которые вполне себе неплохо считали путь и траекторию только на основе ускорений.

Приемлемым считаю накопленную ошибку в пределах 1км за 2-4 часа полета, этого достаточно чтобы понимать район полетов и найти ориентиры по ПВП или отсроиться по частотам ВОРов и радио-маяков при ППП.

Sign up to leave a comment.

Articles