Выбор процессора и датчиков

Идея собрать инерциальный навигатор пришла в голову быстро, но подобрать подходящие компоненты было сложнее. Главный микроконтроллер должен иметь достаточную вычислительную мощность для интегрирования уравнений движения и работы пользовательского интерфейса, при этом потреблять минимум энергии. Я выбрал контроллер семейства STM32 от STMicroelectronics, основанный на ядре ARM Cortex‑M. Этот чип обладает богатым набором периферии (I²C, SPI, UART, SDIO) и аппаратным блоком плавающей точки. К тому же компания ST поставляет готовые программные библиотеки для работы с MEMS‑датчиками.

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

Интегральный датчик инерции — сердце устройства. За основу взял 9‑осевой MEMS‑IMU WitMotion WT901, сочетающий три акселерометра и три гироскопа и электронный компас, что соответствует классическому INS. Этот модуль имеет низкий шум ускорений (~0,03 m/s²) и угловых скоростей (~0,02°/s) и выдает данные по интерфейсу SPI. Для обеспечения работы в широком температурном диапазоне датчик снабжён встроенным термодатчиком, данные которого учитываются при калибровке.

WT901 Attitude Angle Sensor
WT901 Attitude Angle Sensor

Дополнил его комплектом дополнительных инерциальных датчиков - LSM6DSV16X и LIS2DW12 более простой модификации с х10 дискретизацией для построения областей вероятного перемещения и дополнительных данных для улучшения траектеории внутри одного интервала.

Все это развел в 2 каскада с учетом длины дорожек - дискретизация высокая, данных много, учет длины дорожек и расчет их емкостного сопротивления снизит вероятность ошибки. Каждый каскад имеет один датчик WT901 + 5х LSM6DSV16X + 3х LIS2DW12.

Дисплей: 5‑дюймовый TFT LCD с контроллером SSD1963

Пилоту важно видеть навигационные данные в графическом виде: карту местности, индикатор искусственного горизонта, векторную траекторию. Поэтому я отказался от маленьких OLED и выбрал 5‑дюймовый цветной TFT‑экран с разрешением 800×480 пикселей. Согласно спецификации, модуль поддерживает 16‑битный RGB формат (65 тысяч цветов), имеет активную область 108×64,8 мм, поддерживает как резистивный, так и ёмкостной сенсорный слой и использует контроллер SSD1963. Передача данных осуществляется по 16‑битной параллельной шине, что обеспечивает высокую скорость обновления и плавную отрисовку карты. Важный плюс — наличие слота для SD‑карты и SPI‑flash — можно хранить карты и журнал полётов прямо на устройстве. Экран выдерживает температуры от −10 до +60 °С и питается от 3,3В.

Питание: литий‑полимерный аккумулятор 4800 мА·ч

Решил, что инерциальное устройство должно работать автономно не менее 3 часов. С дисплеем, процессором и датчиками энергопотребление составляет 4–5 Вт. Остановился на литий‑полимерном аккумуляторе LP105274 ёмкостью 4800 мА·ч и номинальным напряжением 3,7 В. Производитель указывает размеры 10×52×74 мм, наличие защитного модуля и массу около 96г. Аккумулятор рассчитан на более 500 циклов заряда‑разряда и имеет допустимый ток разряда до 2400мАч, что с запасом перекрывает наши потребности. При полной зарядке батарея способна питать прибор около трёх часов; в дальнейших ревизиях я планирую добавить возможность подключения внешнего питания ||от "прикуривателя" самолёта.

Печатная плата: первый прототип

Разработка схемы платы заняла около 1 месяца, потребовалось основательно подойти к вопросам резервирования цепей питания, смоделировать диаграммой процессов различные сценарии работы.

Схема разводки
Схема разводки
Разводка №1 контроллера STM32
Разводка №1 контроллера STM32
Разводка №2 контроллера STM32
Разводка №2 контроллера STM32

Первый прототип представлял собой двухслойную плату размером около 140×90 мм. На фотографии видно два крупных чипа — микроконтроллер STM32 и сопроцессор, а также разъём USB‑C для зарядки, слот под SD‑карту и разъём для подключения дисплея. В левом верхнем углу размещён пассивный звуковой излучатель, который оповещает пилота о событиях. Небольшой синий потенциометр рядом с процессором предназначен для регулировки контраста подсветки. На нижней части платы размещены DC‑DC преобразователи и контроллер заряда. Несмотря на «сырой» вид, эта плата позволила быстро протестировать связь с дисплеем и IMU.

Вид спереди
Вид спереди
Вид сзади
Вид сзади

Корпус и механика

Пилот ценит удобство: устройство должно крепиться на приборную панель и выдерживать вибрацию. На первых порах в качестве корпуса использовали 3D‑печать из ABS‑пластика, добавил резиновые прокладки и протянутые винты. В дальнейших версиях планируется использовать алюминиевый корпус с пассивным охлаждением и защитным стеклом на экране.

Один из первых эскизов корпуса и компоновки инструментов управления
Один из первых эскизов корпуса и компоновки инструментов управления

Остались открытыми вопросы джойстика способного перемещаться в 3 осях - X, Y, Z(вращение). Если кто-то имеет опыт работы с такими джойстиками - прошу написать, т.к. на текущий момент используется 2-осевой + одельное колечко для управления третей осью.

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

А затем я разберу, какие алгоритмы использовались для обработки данных IMU, как реализовали фильтрацию и какие результаты дала имитация.

Комментарии (12)


  1. ahdenchik
    12.08.2025 17:20

    Давно вынашиваю идею, но не могу собрать тестовые данные с какой-нибудь инерциальной системы и поэтому откладываю

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

    Если есть возможность буду рад получить такие "треки" и попробовать. Для этого нужно в автомобиль навигатор положить, включить запись считываемых датчиками параметров и поездить с ним некоторое время. Если при этом будет также и GPS-трек то это будет совсем шикарно.


    1. exec77 Автор
      12.08.2025 17:20

      Идея интересная, но не будет ли много повторяющихся паттернов в этой "нотации дорог"? Также как учитывать перестроения? Вводить поправочные коэффициенты или вносить параметр "полосности дороги"? А если по обочине?

      Да, технически я смогу сделать вам такую запись и дополнить ее данным с GPS (правда он сейчас сильно глушится в городах). Напишите в личку.


      1. ahdenchik
        12.08.2025 17:20

        Также как учитывать перестроения?

        Перестроения это небольшие промежутки между ускорениями, сгладятся фильтрами

        Ещё можно по-другому объяснить: если взять GPS трек достаточной протяжённости, то, покрутив этот трек и поискав в данных "карты дорог Мира" подходящее место, можно будет наложить его на карту и получится что будет найдено наше текущее местоположение

        Написал в личку


        1. legustarasov
          12.08.2025 17:20

          Центробежные ускорения на поворотах зависят же от скорости движения автомобиля. И может так получится, что проходя поворот с большим радиусом на большой скорости у вас получится тот же профиль ускорения, что и для прохода поворота с малым радиусом и низкой скоростью. Как вы планируете выходить из этой ситуации не имея скорости автомобиля?


          1. exec77 Автор
            12.08.2025 17:20

            Ну тут скорее речь идет о паттернах, неважно с какой скоростью проходится поворот, если эти повороты совершаются с определенной последовательностью - выстраивая граф пути. Затем можно все сложить в neo4j и через cypher сделать запросы на поиск подобия графов. Чем больше вершин и ребе в сиквенсе графа - тем точнее будет поиск. Что касается скорости - то она у нас есть всегда, т.к. скорость — это производная координаты по времени, а ускорение — производная скорости по времени. Т.е. зная ускорение в каждый момент времени (допустим раз в секунду) мы можем считать перемещение в каждую секунду и определять вектор и величину скорости.


            1. ahdenchik
              12.08.2025 17:20

              Да, всё верно. А карта нужна для того чтобы постоянно компенсировать дрейф

              По графовым БД: а дадут ли они преимущество в производительности перед SQLite (целимся на встроенное ПО) в случае если мы ищем один конкретный "обратный путь" в графе, перебирая с заданной точностью рёбра?


    1. bazanovv
      12.08.2025 17:20

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


  1. alekseypro
    12.08.2025 17:20

    А никому не приходила мысль дорожных знаков с QR-кодами? Едешь, камера распознает инфу в QR-коде, которая в базе соответствует координатам и т.д.?


    1. Terranz
      12.08.2025 17:20

      Мы пытались в Самаре это пробить в 2012, нам не разрешили. Мы пытались сделать систему городской инфосреды, и куар сделать частью адресной таблички. Но нет


    1. ahdenchik
      12.08.2025 17:20

      Снегом облепит и навигация по штрихкодам перестанет работать. А в 2012 QR-коды были ещё и под патентом, кажется

      Простой советский копеечный ПДК-600 на столбах на возможных путях следования - БЖРК использовали эти пассивные СВЧ-ответчики чтобы автоматически понимать где они находятся


  1. NutsUnderline
    12.08.2025 17:20

    проект красивый но больше все таки интересна математика и результат. а это можно макетировать и без законченой железки.

    Насколько я представляю совсем годный инерционник вообще никто не создал. Даже в связке с gps, ublox открыто предлагал что то довольно ограниченное для автомобилей. Возможно не открыто... Если заработает автором может выстроиться очередь .


  1. marineboy1
    12.08.2025 17:20

    Не понятно для чего использовались настолько большие контроллеры, когда можно было обойтись куда более простыми и дешевыми, из той же F4 серии