Как устроена навигация в автомобилях Tesla. В чем трудности поиска пути по земли русской?
C 2018 года все счастливые обладатели Tesla в России получили обновление Европейской навигации в которой России уже не было, официально это объясняется поддержанием баланса веса карт и удалением регионов, не входящих в зону официального обслуживания.
Как же использовать большой экран Tesla на полную силу? Видеть маршрут, какой процент батареи останется? С какой скоростью ехать? Можно ли сделать даунгрейд на старые карты?
Тесла использует для построения маршрутов Valhalla -это механизм маршрутизации с открытым исходным кодом и сопутствующие библиотеки для использования с данными OpenStreetMap.
Вальхалла - это не только пантеон германских Богов и "чертог мёртвых ", но и отличный движок для построения маршрутов с дополнительными инструментами и модульной структурой, 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 с РФ. Пишите в личку.