Pull to refresh

Тесла верит своим Богам! Так она находит путь

Reading time5 min
Views11K

Как устроена навигация в автомобилях Tesla. В чем трудности поиска пути по земли русской?

C 2018 года все счастливые обладатели Tesla в России получили обновление Европейской навигации в которой России уже не было, официально это объясняется поддержанием баланса веса карт и удалением регионов, не входящих в зону официального обслуживания.

Как же использовать большой экран Tesla на полную силу? Видеть маршрут, какой процент батареи останется? С какой скоростью ехать? Можно ли сделать даунгрейд на старые карты?

Тесла использует для построения маршрутов Valhalla -это механизм маршрутизации с открытым исходным кодом и сопутствующие библиотеки для использования с данными OpenStreetMap.

Valhalla в Tesla и Тесла в Вальхалле
Valhalla в Tesla и Тесла в Вальхалле

Вальхалла - это не только пантеон германских Богов и "чертог мёртвых ", но и отличный движок для построения маршрутов с дополнительными инструментами и модульной структурой, API на основе C++, с возможностью перекрестной компиляции различных фрагментов. И да, все это open source https://github.com/valhalla/valhalla.

Работает на Linux и Mac OS и частично на Windows.

Valhalla состоит из нескольких библиотек, каждая из которых отвечает за свою функцию. Расположение различных функций по библиотекам выглядит следующим образом:

Midgard - базовые географические и геометрические алгоритмы для использования в различных других проектах.

Baldr - базовые структуры данных для доступа и кэширования данных маршрута.

Sif - библиотека, используемая при расчете стоимости узлов графа. Это может быть использовано в качестве входных данных для Loki и Thor.

Skadi - библиотека и сервис для доступа к данным о высоте. Это может быть использовано в качестве входных данных для Mjolnir или в качестве автономной службы.

Mjolnir - Инструменты для превращения открытых данных в части графа Valhalla.

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

Meili - библиотека, используемая для сопоставления карт.

Thor - библиотека, используемая для создания пути через иерархию участков графа. Этот путь и атрибуция вдоль пути могут быть использованы в качестве входных данных для Odin.

Odin - библиотека, используемая для создания маневров в пути. Этот набор информации о направлениях может использоваться в качестве входных данных для Tyr.

Tyr - сервис, используемый для обработки http-запросов для маршрута, связывающегося со всеми другими API valhalla. Tyr форматирует вывод из Odin.

Установка

Если у Вас Ubuntu 20.04 отличный гайд по установке.

Здесь можно скачать карты, выбрав нужные регионы.

Для ЦФО РФ

curl -O http://download.geofabrik.de/russia/central-fed-district-latest.osm.pbf

Рендерим карты

valhalla_build_tiles -c ./conf/valhalla.json central-fed-district-latest.osm.pbf

Запускаем

valhalla_service ~/valhalla/scripts/conf/valhalla.json 2

Давайте найдем маршрут на автомобиле из Москвы в Подольск

curl http://localhost:8002/route \
--data '{"locations":[
              {"lat":55.7522,"lon":37.6156},
              {"lat":55.4242,"lon":37.5547}
           ],
         "costing":"auto"
        }' | jq '.'

В ответ получаем JSON с узловыми токами маневров.

Файл навигации в Тесла

Я обратился https://teesla.ru/ и мне передали файл с европейской навигацией из Тесла. Весит файл около 8гб и на мое удивление содержит вовсе не карты, а уже проложенные пути.

Карты Tesla подгружает из Google, как и данные о зарядках, часть ограничений скорости. Данные в файле навигации представляют собой скомпилированные графы пути.

Пример

json { "trip": { "language": "en-US", "status": 0, "units": "miles", "status_message": "Found route between points", "legs": [ { "shape": "yx{xmA_lybd@oClBqWxRqWhRsFlEeKlHaChBiGbFqGtEkWxRyQbN", "summary": { "max_lon": 19.461329, "max_lat": 41.321014, "time": 28, "length": 0.178, "min_lat": 41.318813, "min_lon": 19.45956 }, "maneuvers": [ { "travel_mode": "drive", "begin_shape_index": 0, "length": 0.154, "time": 24, "type": 1, "end_shape_index": 9, "instruction": "Drive northwest on Rruga Stefan Kaçulini.", "verbal_pre_transition_instruction": "Drive northwest on Rruga Stefan Kaçulini for 2 tenths of a mile.", "travel_type": "car", "street_names": [ "Rruga Stefan Kaçulini" ] }, { "travel_type": "car", "travel_mode": "drive", "verbal_pre_transition_instruction": "Continue on Rruga Glaukia for 100 feet. Then You will arrive at your destination.", "verbal_transition_alert_instruction": "Continue on Rruga Glaukia.", "length": 0.024, "instruction": "Continue on Rruga Glaukia.", "end_shape_index": 10, "type": 8, "time": 4, "verbal_multi_cue": true, "street_names": [ "Rruga Glaukia" ], "begin_shape_index": 9 }, { "travel_type": "car", "travel_mode": "drive", "begin_shape_index": 10, "time": 0, "type": 4, "end_shape_index": 10, "instruction": "You have arrived at your destination.", "length": 0, "verbal_transition_alert_instruction": "You will arrive at your destination.", "verbal_pre_transition_instruction": "You have arrived at your destination." } ] } ], "summary": { "max_lon": 19.461329, "max_lat": 41.321014, "time": 28, "length": 0.178, "min_lat": 41.318813, "min_lon": 19.45956 }, "locations": [ { "original_index": 0, "lon": 19.461336, "lat": 41.318817, "type": "break" }, { "original_index": 1, "lon": 19.459599, "lat": 41.320999, "type": "break" } ] } }

Для адресов используются данные из карт Tomtom

Пример импорта в файле карт tesla из tomtom

mport_db:schema tomtom_eur_2019_03_007:eur_schema_0329export_db:schema tomtom_eur_2019_03_007:allagash_eur_schema_0329_02_05_2019_a665978_10482

EU-2019.20-10482valhalla_allagash_eur_schema_0329_02_05_2019_a665978_10482_02_05_2019_a665978_10482.pbf-tiles-1ee14c0.tarimport a665978export a665978build 1ee14c0 VE-3.0.0 common pro/dad pro/dun pro/eng pro/frf pro/ged pro/iti high/non pro/spe pro/swsaddress-eur-tomtom_eur_2019_03_007-19.mt./valhalla/build-filesync.shcbe7391137bb Fri May 3 23:42:49 UTC 2019import_db:schema tomtom_eur_2019_03_007:eur_schema_0329export_db:schema tomtom_eur_2019_03_007:allagash_eur_schema_0329_02_05_2019_a665978_10482supplement

Файл карт в файловой системе Squashfs (.sfs)

Последние 2кб очень странные, в них и вся соль. Файлы подписаны ключом. Шифрование AES.

При загрузке карт в машину, Тесла проверяет подпись поэтому модифицированные карты не удалось загрузить.

P.S.

Можно ли подписать карты? Найти ключ и порядок S-box? Тесла на Тегра хранят файл навигации на отдельной карте памяти в MCU. Тесла на Intel хранят файл навигации на в основной eMMC. С картой памяти все просто, разбираем половину торпеды, вытаскиваем из MCU, заливаем дамп с картами и вставляем обратно, с eMMC не так все однозначно. Если карты просто залить на чип eMMC, апдейтер в автомобиле с живыми сертификатами загрузит обновление и заменит их.

От cебя готов предоставить приз целый день аренды самой заряженной Tesla model 3 Performance за способ генерации и загрузки карт в Tesla model 3 с РФ. Пишите в личку.

Tags:
Hubs:
Total votes 3: ↑2 and ↓1+1
Comments12

Articles