Выбор процессора и датчиков
Идея собрать инерциальный навигатор пришла в голову быстро, но подобрать подходящие компоненты было сложнее. Главный микроконтроллер должен иметь достаточную вычислительную мощность для интегрирования уравнений движения и работы пользовательского интерфейса, при этом потреблять минимум энергии. Я выбрал контроллер семейства 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. Для обеспечения работы в широком температурном диапазоне датчик снабжён встроенным термодатчиком, данные которого учитываются при калибровке.

Дополнил его комплектом дополнительных инерциальных датчиков - 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 месяца, потребовалось основательно подойти к вопросам резервирования цепей питания, смоделировать диаграммой процессов различные сценарии работы.




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


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


Остались открытыми вопросы джойстика способного перемещаться в 3 осях - X, Y, Z(вращение). Если кто-то имеет опыт работы с такими джойстиками - прошу написать, т.к. на текущий момент используется 2-осевой + одельное колечко для управления третей осью.
В следующей части я покажу что получилось в живую, какие сложности при изготовлении платы возникли, как это вообще можно сделать не имея опыта.
А затем я разберу, какие алгоритмы использовались для обработки данных IMU, как реализовали фильтрацию и какие результаты дала имитация.
Комментарии (12)
alekseypro
12.08.2025 17:20А никому не приходила мысль дорожных знаков с QR-кодами? Едешь, камера распознает инфу в QR-коде, которая в базе соответствует координатам и т.д.?
Terranz
12.08.2025 17:20Мы пытались в Самаре это пробить в 2012, нам не разрешили. Мы пытались сделать систему городской инфосреды, и куар сделать частью адресной таблички. Но нет
ahdenchik
12.08.2025 17:20Снегом облепит и навигация по штрихкодам перестанет работать. А в 2012 QR-коды были ещё и под патентом, кажется
Простой советский копеечный ПДК-600 на столбах на возможных путях следования - БЖРК использовали эти пассивные СВЧ-ответчики чтобы автоматически понимать где они находятся
NutsUnderline
12.08.2025 17:20проект красивый но больше все таки интересна математика и результат. а это можно макетировать и без законченой железки.
Насколько я представляю совсем годный инерционник вообще никто не создал. Даже в связке с gps, ublox открыто предлагал что то довольно ограниченное для автомобилей. Возможно не открыто... Если заработает автором может выстроиться очередь .
marineboy1
12.08.2025 17:20Не понятно для чего использовались настолько большие контроллеры, когда можно было обойтись куда более простыми и дешевыми, из той же F4 серии
ahdenchik
Давно вынашиваю идею, но не могу собрать тестовые данные с какой-нибудь инерциальной системы и поэтому откладываю
Суть: попробовать сделать автономную наземную инерциальную систему автомобильной навигации, используя в качестве фильтра сами данные карты дорог (OSM, например). Дело в том что углы изгибов/поворотов дорог достаточной протяжённости уникальны, а значит, если данные карты проиндексировать специальный образом, то можно будет находить себя на карте совсем не используя GPS, и может даже не используя данные угла поворота руля автомобиля и его скорости - всё чисто из данных компаса, акселерометров и гироскопов, наложенных на данные заранее записанной карты
Если есть возможность буду рад получить такие "треки" и попробовать. Для этого нужно в автомобиль навигатор положить, включить запись считываемых датчиками параметров и поездить с ним некоторое время. Если при этом будет также и GPS-трек то это будет совсем шикарно.
exec77 Автор
Идея интересная, но не будет ли много повторяющихся паттернов в этой "нотации дорог"? Также как учитывать перестроения? Вводить поправочные коэффициенты или вносить параметр "полосности дороги"? А если по обочине?
Да, технически я смогу сделать вам такую запись и дополнить ее данным с GPS (правда он сейчас сильно глушится в городах). Напишите в личку.
ahdenchik
Перестроения это небольшие промежутки между ускорениями, сгладятся фильтрами
Ещё можно по-другому объяснить: если взять GPS трек достаточной протяжённости, то, покрутив этот трек и поискав в данных "карты дорог Мира" подходящее место, можно будет наложить его на карту и получится что будет найдено наше текущее местоположение
Написал в личку
legustarasov
Центробежные ускорения на поворотах зависят же от скорости движения автомобиля. И может так получится, что проходя поворот с большим радиусом на большой скорости у вас получится тот же профиль ускорения, что и для прохода поворота с малым радиусом и низкой скоростью. Как вы планируете выходить из этой ситуации не имея скорости автомобиля?
exec77 Автор
Ну тут скорее речь идет о паттернах, неважно с какой скоростью проходится поворот, если эти повороты совершаются с определенной последовательностью - выстраивая граф пути. Затем можно все сложить в neo4j и через cypher сделать запросы на поиск подобия графов. Чем больше вершин и ребе в сиквенсе графа - тем точнее будет поиск. Что касается скорости - то она у нас есть всегда, т.к. скорость — это производная координаты по времени, а ускорение — производная скорости по времени. Т.е. зная ускорение в каждый момент времени (допустим раз в секунду) мы можем считать перемещение в каждую секунду и определять вектор и величину скорости.
ahdenchik
Да, всё верно. А карта нужна для того чтобы постоянно компенсировать дрейф
По графовым БД: а дадут ли они преимущество в производительности перед SQLite (целимся на встроенное ПО) в случае если мы ищем один конкретный "обратный путь" в графе, перебирая с заданной точностью рёбра?
bazanovv
Посмотрите эту ссылку, там в дополнение к GPS используются данные о перемещении автомобиля с его собственных бортовых систем, выходит очень хорошо. И про опыт использования гироскопа на авто тоже есть что почитать.