GPS с гироскопом и одометром.

Можно. Я так понял, нужно только чтение сенсоров? Если DMP не нужен, то тогда всё просто:
http://svimik.com/invensense.h
http://svimik.com/mpu6050.c
mpu6050_init - если хотите читать напрямую из регистров
mpu6050_init_fifo - если надо инициализировать вместе с FIFO
Пример вызова: mpu6050_init(I2C1, GYRO0)

Для чтения напрямую, все регистры найдёте в invensense.h
Для чтения из FIFO - сначала проверять mpu6050_fifo_overflow, если переполнился - сбрасывать через mpu6050_fifo_reset. Далее, получить количество байт через getFIFOCount, и можно начинать читать байты из регистра MPU6050_FIFO_R_W.

Весь код поддерживает одновременную работу с тремя i2c линиями (I2C1, I2C2, I2C3 - передаётся при вызове в каждую функцию). Таким образом, я подключал 3 датчика сразу.

Только, функции для работы с i2c заменить на свои:

#define mpu6050_get(reg) read(I2Cx, dev_addr, reg)
#define mpu6050_set(reg, value) write(I2Cx, dev_addr, reg, value)

Код проекта полностью: http://svimik.com/mems_array_src_v1.rar
(если какой файл забыл - скажите. Всю папку проекта не кидаю, т.к. много мусора - выбрал нужные файлы вручную).

Возможности:

  • Работа с сенсорами колёс (схема подключения для skoda fabia была где-то в этой теме N страниц назад)
  • Паралельное чтение трёх MPU-6050 по трём i2c линиям.
  • Автоматическая реинициализация всего и вся в случае сбоя
  • Запись в UART с использованием DMA
  • компас HMC5983 там тоже есть

Disclaimer:
Это прототип. Я не пытался следовать каким-либо правилам\стандартам написания кода, не пытался оптимизировать. В коде много отладочных затычек, повсюду расбросаны printf, царит хаос, и всё такое :slight_smile:
Сам МК ничего не высчитывает (ну разве что, некоторые оффсеты для датчиков вручную забиты), а на данном этапе шлёт на комп (по UART) в целях логирования и дальнейшей отладки.

Судя по цене это китайская некондиция. Где гарантия соответствия параметров спецификации, и
работы пару лет ?

16битный + большой динамический диапазон + низкие параметры собственного шума.

ublox DR осуществляет “фузионирование” сырых данных GPS с данными о скорости + гироскопа.
atmel процессор просто по техническим причинам в большинстве случаев не справляется с обработкой сырых данных GPS со скоростью > 2Hz,
если программа и данные находятся во внешнем флэше. ublox7 имеет процессор cortex m3 (очень похож на STM32F1) и поэтому
справляется c 10 Hz (но добрые души из ublox выкинули функции выдачи сырых данных из прошивки, хотя есть некая надежда на NEO-7P).
Таким образом, двумя входными DR параметрами является абсолютная скорость (m/s) и скорость изменения угла от гироскопа (°/s).
В алгоритме DWT абсолютная скорость берется с CAN шины, а скорость изменения угла высчитывается из угла+скорости изменения угла поворота руля
(тоже с CAN шины). Тут тактовая частота обновления данных задается CAN шиной (т.е. 10 и 20 ms).
В алгоритме GWT скорость оцифровывается измерением длины импульсов скорости, а скорость изменения угла от гироскопа с ADC на SPI порту
(скорость что-то вроде 500 kHz, точно не помню, но ее легко померять осциллографом на LEA-6R).
Эти данные и интегрируются в периодах между GPS измерениями (тактовая частота 1 Hz) и скармливаются EKF, описанному в статейках.
Я все формулы перегнал в latex, и там есть некие темные места (например откуда берется pitch Pt, или “фактическое” отсутствие вектора {u} перенесенного в вектор {x}), но основная идея вполне понятна
и может быть реализована. Фактическое “ноу-хау” содержится в элементах ковариационных матриц, но их и надо будет определить
эмпирически на основании реальных измерений.

http://www.micronika.ru/order.phtml?keyword=NV08C-CSM


00259898	 	 	 	NV08C-CSM модуль Глонас	1656.00 на заказ	

но имхо лучше сразу ориентироваться на Globalsat TR-600 GLONASS http://www.globalsat.ru/catalog/tr-600-glonass
особенно если для вас не проблема собрать прошивку для STM32F103. Технические детали описаны тут в соседней ветке.

Не знаю как там с RTlinux для arm, но отлаживать на linux проще чем на RTOS и вообще для контроллеров с гигагерцовыми
процессорами эта проблема преувеличена. Вы же не будете параллельно крутить 3D картинки без железного opengl или
писать на software raid6 состоящий из набора флешек :slight_smile:

Модем, см. выше Globalsat TR-600 GLONASS

usm78-gis, благодарю за развёрнутое пояснение. Но от того я ещё больше стал не понимать фразу “оно касается только GPS”. А что ещё этот чип выдавать может? Или речь шла о возможности читать сырые данные с его датчиков на высокой скорости и осуществлять фузирование вручную? Но тогда DR от u-blox и не нужен, а на месте u-blox может стоять вообще любой GPS приёмник.

Понятное дело, что от GPS высокой скорости и не требуется. Там может быть и 1гц, но опрашивать IMU можно хоть на 1кгц частоте, и в промежутках между сигналами от GPS, обновлять данные, используя чисто IMU. Если DR от u-blox так не может, то и от DR толку ноль, а значит и u-blox не нужен - можно брать обычный приёмник, ведь всё равно DR реализовывать придётся самому.

Вы не учли, что у автора raspberry. А это, по моему опыту, очень хилая платформа. И дело не только в том, что это 1 ядро на 700мгц. Я не берусь назвать причину, но ти ли драйвера там кривые, то ли прерывания неэффективно обрабатываются, но простая отсылка данных по usb wifi адаптеру может загрузить проц до 50% (грузит именно kernel threads, т.е. красным цветом полоска в htop рисуется. непосредственно отсылающее приложение нагрузки не создаёт). Да что там, даже запущенный htop 10% кушает :slight_smile:

Мне довелось работать на расберри со звуком. Писал на Си, работал со звуковой картой напрямую через alsa, без каких-либо микшеров, в монопольном режиме. Я даже отказался от идеи кодировать звук, и гнал его в ethernet по udp протоколу несжатым (благо, задача была исключительно для локалки). Я даже дошёл до того, что чтобы не дай бог ничего не унуло, я не останавливал воспроизведение, а отсылал в карту тишину, когда звук не нужен был.
Итог - я добился загрузки процессора менее 40%. И даже при этом, 1 из 20 раз воспроизведение стартует с ощутимой задержкой порядка 200мс, как будто что-то уснуло, и было внезапно разбужено.

После этого, я больше не буду использовать расберри для реалтайм задач. С меня хватило.

(разумеется, это не относится к нормальным компьютерам, будь то нетбуки, NUC, да что угодно, лишь бы x86 >1ghz)

Вторая ссылка там прога для matlab (2013a или b). В нём всё очень красиво работает и всё считает. Маткады не для таких задач.

SviMik, не поможешь, там лог внизу. Хоть куда копать…
http://forum.openstreetmap.org/viewtopic.php?pid=379229#p379229

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

Utya, понял. спасибо за отклик. какого хрена данные прога пишет не позиционно, а делает вставки строк с другим содержимым строки… мне решительно не понятно.

сегодня сниму. вечерком.

мне пофиг, всё одно. мне валенок в этом деле.

охотно верю, пока не нашёл, где скачать… (с нуля изучать прогу, я пока обожду, боюсь, мозг треснет).

Проблема где скачать matlab ? (rutracker). ну придется чуток “грузанутся”. Качаешь matlab, пьешь пиво-куришь-ешь пока он ставится, потом запускаешь эту прогу по ссылке. Он снифет все данные с телефона по вифи к примеру или потом скармливаешь csv. А там всякие графики красивый и координаты. Если есть лучше вариант в студию)) А дальше самое интересное скомлексировать gps c инерциалкой.

то есть, он сам всё понимает? здоровско.
значит, вариантов нет. но у меня проблема, я траф в этом месяце выработал)) а матлаб 6 гигов с лихером весит. а на сопле в 256 kbps я умру ждать. буду ждать поступления нового трафа))

Итак, решил немного обновить тему

Помню у нас не получилось передавать данные через udp на matlab, погуглил недавно оказывается надо отрубить брендмауер matlab (прфм буквально так и говорили), я отключил всё фаерволы и антивирус.
Изготовил плату, но пока не запоял. Если интересны результаты буду выкладывать.

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

Тем временем тестируем bluetooth версию. Под андроид ставится bluetooth GPS provider и любая Ваша программа начинает работать от внешнего GPS c гироскопом и одометром. Еще надо поработать с платой и корпусом и тогда запаяем неск. штук.

В свете последних нескольких страниц, для адептов многогерцовых чипов видеоролик до 30fps. Просто в пределах секунды такому массивному объекту как автомобиль некуда деваться. Разве только если вибрации обшивки регистрировать. Говорю покатавшись с 10Гц чипом без дедреконинга. http://www.youtube.com/watch?v=U_8pBOIHp9E

UPD 18.07.2014. Добавил пару фото блютус-версии
UPD 28.07.2014. Затестили прошивку 703 ADR на LEA-6R. Улучшения заметные.
UPD 05.09.2014. Пошли первые устройства, отписал всем кто оставлял свои координаты.


Click to enlarge

U-Blox признал технологию LEA-6R самой точной в 2014г

В то время пока мы разрабатывали и внедряли наш прибор и не тратили время на тупиковые ветви эволюции компания U-BLOX пошла другим путем. Они озадачились оценкой реальной пользы современных маркетинговых ходов и словосочетаний “на слуху”, 3Д, трехосевые гироскопы-акселерометры, безгироскопные системы и т.п. Врезультате родился такой документ:

Отсюда: http://u-blox.com/en/dead-reckoning.html
http://u-blox.com/en/gps-chips/dead-reckoning-chips/ubx-m8030-kx-dr-3d-automotive-dead-reckoning-chips.html
http://u-blox.com/images/downloads/Product_Docs/UBX-M8030-Kx-ADR_ProductSummary_(UBX-13003445).pdf

Он какбы рассказывает о новом чипе, который поддерживает все новые комбинации датчиков и технологию LEA-6R (одноосевой гироскоп + пульсы одометра). При этом содержит красноречивую табличку:

Вот моя версия перевода:
ТСП (технология счисления пути) достижения и требования.

Комбинация датчиков ----- Типичная ошибка определения координат*

Генераторы пульсов с передних колес ------ 14%
Генераторы пульсов с задних колес -------- 12%
Генераторы пульсов со всех 4 колес -------- 10%
Гироскоп одноосевой и одометр --------- 3%
Гироскоп, одометр и трехосевой акселеромтр – 3%

** - Процент расстояния пройденный без спутниковой навигации. Значения получены при базовых настройках задержки датчика < 40мс и ожидаемого шума < 5мс.*

То есть трехосевой акселеромтер добавленный в расчет не ухудшает точность (и не увеличивает), а безгироскопные системы откровенно проигрывают. Кстати по результатам наших собственных испытаний безгироскопные системы не имеют такого проигрыша точности, они вполне работают, хоть и стать принципиально точнее MEMS гироскопа не вышло. То что одометр на задних колесах точнее чем на передних это тоже очевидно для всех.

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

Вобщем еще раз спасибо компании U-BLOX за важные и нужные исследования.

Было: https://play.google.com/store/apps/details?id=com.ilm.sandwich&hl=ru ?

SmartNavi

Так как ublox все тормозит и упорно не желает поддерживать CAN,
придется купить адаптер
http://www.canm8.com/products/canm8-park-multi-application-can-bus-parking-sensor-control/5/
Дебилизм, но ничего не поделаешь :frowning:

Судя по списку машин этот адаптер берет значение скорости, считает метры в секунду и генерит пульсы. Все какбы работает, но запаздывает на пару секунд. Есть другой вариант, хундай и фольксваген в каншину выдают счетчик пульсов abs. Их умеет забирать адаптер такой:
http://digitalcar.ru/product/digitalcar-cansnif/

Возможно еще какие машины так могут, тот проект тоже развивается.

UPD. Для хундай и фольксваген есть возможность интегрировать обе платы в одно устройство. Чтобы не ждать когда ublox разродится.

А какой командой/пакетом их потом скармливать LEA-6R ?
Это должен также уметь NEO-6V, но я никогда не видел никакой документации.
Есть команда (недокументированная) CFG-ESFDWT,
с ней я конечно могу разобраться (где там track gauge front, track gauge rear, wheel base, max wheel angle,
wheel tick factor, data latency, etc.), но это только конфигурация.
Есть вроде как (тоже недокументированная) команда ESF-WT,
но тогда надо всерьез дизассемблировать DR прошивку, и это дело
нетривиальное.