soong-construction/dirt-rally-time-recorder

Use heuristics to resolve ambiguities in UDP car data

maxbechtold opened this issue · 9 comments

By including the top gear of each car (cf. https://github.com/soong-construction/dirt-rally-time-recorder/releases/tag/v2.5.1), only a few pairs of ambiguous cars remain.

Most of these pairs can be told apart by their gearbox. It is either sequential or H-pattern. In the latter case, the timerecorder could test for non-sequential gear changes (e.g. 4>2 or 3>R). If any occur till the end of a stage, this indicates H-pattern shifting and it would be safe to assume which car was driven (disregarding substantial drop-outs in UDP telemetry).

In the case an H-pattern vehicle is driven without skipping gears or with the game configured to use sequential shifting instead, no false assumption is made.

Originally posted by @maxbechtold in #12 (comment)

Two pairs in DiRT Rally 2.0 will still not be distinguishable by the described heuristics:

  • Fiat 131 Abarth Rally and Subaru Impreza WRX STI NR4
    (both 5-speed H-pattern vehicles)
  • Skoda Fabia R5 and Volkswagen Polo GTI R5 (both 5-speed sequential vehicles)

In these cases, a heuristics that picks one of the cars and sticks to it if the next stage shows the same UDP car data is benefitial for some reasons:

  • it is likely that successive stages are part of the same event, i.e. the car did not change
  • the decision is either correct (saving the user from using the resolution scripts) or
  • it is wrong for all successive stages, and the user must use the resolution scripts for all stages (but there is only going to be one script for each stage)

For DiRT Rally, 3 pairs are indistinguishable:

  • Ford RS200 and Lancia 037 Evo 2 (4WD/RWD)
  • Peugeot 205 T16 Evo 2 and Peugeot 205 T16 Pikes Peak (both 4WD)
  • Ford Focus RS Rally 2007 and Citroen C4 Rally 2007 (both 4WD)

It could also be possible to try and identify RWD cars by interpreting UDP wheel/axle data, but this could only apply to one pair of each game.

Interesting approach. I'm an odd data point though : I use H-pattern with every car regardless of its default style !

Curious, @ErlerPhilipp mentioned that he's only using sequential mode. Perhaps I'm the odd one here :) I made the gear-shift heuristics opt-in.

I hope to publish a version including heuristics next weekend, maybe you want to try it out. Even the base heuristics which picks one car by chance should suit you, as it will create one update script instead of two for ambiguities.

@maxbechtold
There is no other option when using a gamepad :(
I'll check it out then. I wanted to try your tool anyway.

@ErlerPhilipp @fenugrec I released v2.7.0 with the new heuristics, adapted to your suggestions. Feel free to try it out and give feedback!

I'm also playing around with another heuristics where the user can "signal" dirt-rally-time-recorder from in-game which car s/he chose. Edit: #41

i have the first error case. here is the output from the time recorder:

TRACK: Camino a La Puerta
Ambiguous car data, 2 matches
Mitsubishi Lancer Evolution VI: H-PATTERN shifting, 6 speed, with HANDBRAKE
BMW M2 Competition: SEQUENTIAL shifting, 6 speed, with HANDBRAKE
Guessing car...
CAR: Mitsubishi Lancer Evolution VI
If heuristics-based guess IS WRONG, RUN THE SCRIPT provided to fix the recorded car:
 ==> 1589311053_CaminoaLaPuerta_BMWM2Competition.bat
Completed stage in 06:51.820.

It actually was the BMW M2. I'm playing with gamepad and manual sequential shifting. I guess, the heuristic should be able to find this case.
I uploaded the run logged with my tool: gdrive
You can open it with my tool or simply with numpy.load() and see if you can find a reason for the wrong heuristic.

I opened a separate issue for this, let's follow up there: #40

For anyone following the recently released user signals could be interesting for you.

These should go a long way in resolving ambiguities, and users should rarely need to go to the installation folder to run update scripts. Since I don't see any other helpful heuristics, I'll close this issue. Feel free to comment though.