
Комментарии 10

Хороший сим. Подскажите характеристики компа, особенно интересно цпу, гпу и разрешения на мониках.
Почти все игры-автосимуляторы шлют телеметрию в UDP. На этом работают все игровые девайсы с обратной связью. Игровые рули, педали с FFB, или вибрацией, активные платформы и т.д. Почти у всех игр даже одинаковый порт.
А на Assetto Corsa даже есть документация от разработчиков с описанием того, как получить телеметрию, с описанием каждого байта в пакете и т.д. Задача для домашнего задания новичка в программировании, на 4-5-м уроке.
Я тут занялся изготовлением девайсов для сим-рейсинга, с обратной связью, и это всё с поверхностным знанием языка [С] (ранее только Ардуино и ESP32 программировал, и то без связи с ПК, только как самостоятельные устройства или HID девайсы). Решил получить телеметрию игры Dirt Rally 2.0.
Вот по этой игре инфы нет вообще. Пришлось самому определять UDP порт, искать сколько байт игра шлёт в UDP, методом перебора размеров пакета, пока не получил ровное адекватное количество [float] в пакете, с реакцией на управление в игре, без мусора и пустых байт. Расшифровывать каждый [float] в духе жму педаль сцепления, меняется [float 21], упорядочивать каждый, прописывать его значение в ПО и т.д.
И конкретно на этой задаче я провел свой первый урок С#.
И получилось!
А с SDK от разрабов просто, блин.
Комментарий, если что, не преуменьшить заслуги автора, а скорее похвастаться, мол "я не программист, но смотрите, что смог" 😁
Мож кто похвалит 😃
Ну и подсказать, что всё уже украдено написана готовая документация до нас 😁
Интересный опыт перебора пакетов вслепую с Dirt Rally 2.0 😅. Зато в таких дебрях намного быстрее прокачиваешься и осваиваешь язык.
Спасибо за подсказку, что Assetto Corsa проста для интеграции, несмотря на сказанное об этом в отдельном абзаце статьи. Теперь хочу попробовать собрать телеметрию с серии игр F1 (вроде у SimHub есть такая возможность).
Если соберёшься писать статью про свой опыт с собственными девайсами и Dirt Rally, с удовольствием почитаю.
О! Точно могу сказать, что телеметрия Dirt Rally 2.0 точно та-же, что и в F1 2016. Возможно, Codemasters не парятся, и в последующих частях ничего не меняли.
Вот расшифровка float, например:
Скрытый текст
f0 - Общее время. Время с начала гонки, включая обратный отсчёт.
f1 - Время круга
f2 - Дистанция пройденая с начала гонки в метрах
f3 - Процент завершения гонкиПоложение авто в мировом пространстве:
f4 - Ось X - лево-право
f5 - Ось Y - вверх-вниз
f6 - Ось Z - вперед-назадf7 - Скорость движения x3.6 = км/ч
x2.2369 = миль/чДалее векторная скорость автомобиля:
f8 - Xv - скорость влево-вправо в мировом пространстве
f9 - Yv - скорость вверх-вниз в мировом пространстве
f10 - Zv - сорость вперед-назад в мировом пространствеНаправление автомобиля в мировом пространстве по оси
перпендикулярно движению автомобиля (по направлению от
левого бока авто к правому) сложно:
f11 - Xr
f12 - Yr
f13 - ZrНаправление автомобиля в мировом пространстве по оси
направленной от зада к переду автомобиля опять сложно:
f14 - Xd
f15 - Yd - наклон носа авто. [+] - в низ, [-] - в верх.
f16 - ZdСостояние подвески авто:
Высота срабатывания подвески:
f17 - Susp_pos_bl - Заднее левое колесо
f18 - Susp_pos_br - Заднее правое колесо
f19 - Susp_pos_fl - Переднее левое колесо
f20 - Susp_pos_fr - Переднее правое колесо
Скорость срабатывания подвески:
f21 - Susp_vel_bl - Заднее левое колесо
f22 - Susp_vel_br - Заднее правое колесо
f23 - Susp_vel_fl - Переднее левое колесо
f24 - Susp_vel_fr - Переднее правое колесоСкорость вращения колес:
f25 - Wheel_speed-bl - Заднее левое колесо
f26 - Wheel_speed-br - Заднее правое колесо
f27 - Wheel_speed-fl - Переднее левое колесо
f28 - Wheel_speed-fr - Переднее правое колесоОрганы управления:
f29 - Газ
f30 - Поворот руля
f31 - Тормоз
f32 - Сцепление
f33 - ПередачаПерегрузка (G-сила)
f34 - Боковая
f35 - Продольнаяf36 - Номер круга. (не используется, атавизм от F1)
f37 - Обороты двигателя (х10)
f38 - NOT USED (вероятно тоже атавизм от F1)
f39 - Позиция в гонке (только для режима ралли-кросс)Здесь не поддерживаемое, атавизм F1 (В R2.0 всегда [0]):
f40 - Kers_level - Система рекупирации кинетической энергии (KERS)
f41 - Kers_max_level - Максимальный уровень KERS
f42 - Состояние DRS
f43 - Регулятор тяги (Traction cobtrol)
f44 - Состояние ABS (жаль не работает в DR2, было бы полезно)
f45 - Масса топливного бака
f46 - Зона находдения автомобиля (0 - на трассе, 1 - пит-лейн, 2 - пит-стоп)f47 - Текущий сектор трассы
f48 - Дельта 1 сектора трассы
f49 - Дельта 2 сектора трассы (почему только два сектора - хз)Температура тормозных механизмов на каждое колесо:
f50 - Brakes_temp_bl - Заднее левое колесо
f51 - Brakes_temp_br - Заднее правое колесо
f52 - Brakes_temp_fl - Переднее левое колесо
f53 - Brakes_temp_fr - Переднее правое колесо[NOT USED]:
f54 - Размер трека
f55 - Последний круг (время)
f56 - Макс. обороты
f57 - Холостые оборотыf58 - Текущий круг (только ралли-кросс)
f59 - Всего кругов (только ралли-кросс)
f60 - TrackID - номер трасс
f61 - Время последнего круга
f62 - VehicleID - номер авто
f63 - CarID - то-же самое?
f64 - Максимальное количество передач в авто
Никакого "рукопожатия" игра не требует. Просто парсим UDP, ловим пакет 65 байт (0-64), и всего делов.
Конкретно в Dirt Rally 2.0, нужный UDP можно узнать по пути %Documents%\My Games\Dirt Rally 2\hardwaresettings\hardware_settings_config.xml
Скорее всего, в F1 что-то похожее.
Схожесть принципов передачи телеметрии в DR2.0 и F1 я накопал уже потом, к сожалению 😁 Это сильно упростило бы задачу.
А что в статье описан SDK от AC, я что-то пропустил. Каюсь.
С собственными девайсами - это не быстро. В планах довольно серьезное с инженерной стороны устройство. Сталь и Д16 алюминиевый сплав. Механика надёжнее, брутальнее, чем у винтовки Мосина-Нагана. Только хардкор 🤘😁
А для такого подхода, нужно немного времени.
Но возможно, это повод для статьи на хабре, вы правы. Надеюсь, всё получится, и смогу порадовать интересной статьёй по результату.
Комментарий если что не преуменьшить ваши заслуги 😁
Но вы то сами hardware_settings_config.xml не смогли найти, который сама игра создаёт и в нем секцию udp, в которой порт и прописан, и через SimHub все сделать? ) Ну просто интересно, я если что в ACC катаю, не мимокрокодил. Круглый руль на днях правда приехал, хочу в AC Rally попробовать :)
Насчёт hardware_settings_config.xml в АС - я не уверен. Я писал конкретно про DR2.0 и про этот файл конкретно в DR. В АС по другому. А как точно - не помню уже. Есть SDK. У меня лежит, но в памяти не сохранилось вообще ничего.
Не понимаю, к кому обращён ваш комментарий. Если к автору статьи? А что он сделал не так?
Если ко мне, то где я сказал, что я не знаю, где лежит hardware_settings_config.xml? Я то знал на момент написания ПО. Вот только получить пакет - это меньшая из проблем. Необходимо знать точный размер пакета, значение каждого байта и единицу измерения. И вот это уже делалось методом перебора.
Костыли вроде SimHub мне вообще не интересны. В будущем я хочу от своих изысканий получить готовый коммерческий продукт. И чужие код и ПО с этим никак не вяжутся.
Да вам и писал. В любом симе этот файл есть, просто вы писали что порт надо определять самому :) Ну и да, udp уже разобрали до вас для обоих DR https://github.com/ErlerPhilipp/dr2_logger/blob/master/source/dirt_rally/udp_data.py


В любом случае, успехов с железкой, чтобы это ни было
Собрать данные с автосимулятора: как Assetto Corsa стала живым датасетом