Pull to refresh
1
0
Виктор@JRRacing

User

Send message

Ну, значит, я плохо искал. Да это и к лучшему. Я доволен этой работой. Отличный повод потренироваться в реверс-инженеринге 😉

Насчёт hardware_settings_config.xml в АС - я не уверен. Я писал конкретно про DR2.0 и про этот файл конкретно в DR. В АС по другому. А как точно - не помню уже. Есть SDK. У меня лежит, но в памяти не сохранилось вообще ничего.

Не понимаю, к кому обращён ваш комментарий. Если к автору статьи? А что он сделал не так?

Если ко мне, то где я сказал, что я не знаю, где лежит hardware_settings_config.xml? Я то знал на момент написания ПО. Вот только получить пакет - это меньшая из проблем. Необходимо знать точный размер пакета, значение каждого байта и единицу измерения. И вот это уже делалось методом перебора.

Костыли вроде SimHub мне вообще не интересны. В будущем я хочу от своих изысканий получить готовый коммерческий продукт. И чужие код и ПО с этим никак не вяжутся.

С собственными девайсами - это не быстро. В планах довольно серьезное с инженерной стороны устройство. Сталь и Д16 алюминиевый сплав. Механика надёжнее, брутальнее, чем у винтовки Мосина-Нагана. Только хардкор 🤘😁

А для такого подхода, нужно немного времени.

Но возможно, это повод для статьи на хабре, вы правы. Надеюсь, всё получится, и смогу порадовать интересной статьёй по результату.

О! Точно могу сказать, что телеметрия 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, я что-то пропустил. Каюсь.

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

А на Assetto Corsa даже есть документация от разработчиков с описанием того, как получить телеметрию, с описанием каждого байта в пакете и т.д. Задача для домашнего задания новичка в программировании, на 4-5-м уроке.

Я тут занялся изготовлением девайсов для сим-рейсинга, с обратной связью, и это всё с поверхностным знанием языка [С] (ранее только Ардуино и ESP32 программировал, и то без связи с ПК, только как самостоятельные устройства или HID девайсы). Решил получить телеметрию игры Dirt Rally 2.0.

Вот по этой игре инфы нет вообще. Пришлось самому определять UDP порт, искать сколько байт игра шлёт в UDP, методом перебора размеров пакета, пока не получил ровное адекватное количество [float] в пакете, с реакцией на управление в игре, без мусора и пустых байт. Расшифровывать каждый [float] в духе жму педаль сцепления, меняется [float 21], упорядочивать каждый, прописывать его значение в ПО и т.д.

И конкретно на этой задаче я провел свой первый урок С#.

И получилось!

А с SDK от разрабов просто, блин.

Комментарий, если что, не преуменьшить заслуги автора, а скорее похвастаться, мол "я не программист, но смотрите, что смог" 😁

Мож кто похвалит 😃

Ну и подсказать, что всё уже украдено написана готовая документация до нас 😁

Information

Rating
4,953-rd
Registered
Activity

Specialization

Инженер встраиваемых систем