Jump to content Jump to content

F1 2017 D-Box and UDP Output Specification


Hoo

Recommended Posts

@Hoo I'm testing UDP on a PS4 and I think there are some issues with the CarUDPData struct. Everything in the packet is fine until the CarUDPData  m_car_data[20];  part. It seems like something is mis-aligned in the data that is being sent as far as I can tell. 

For example, the sector numbers are in the m_tyreCompound field whilst the tyre compounds are in the m_trackPosition.
Link to post
Share on other sites
Thanks @Hoo - doing some further digging, it seems CarUDPData is out from the start as m_worldPosition[3] has weird, erratic data in it.
What language are you developing in, have you enabled structure packing? if not you will be getting incorrect data down that end of the struct
Link to post
Share on other sites
@cjorgens79 Objective C - I thought I had the struct in the right mode already as everything else lined up, but it turns out I didn't and needed to enable packing directly. Thanks for the nudge in the right direction, looks OK now.

@Hoo Apologies for the false alarm, everything looks OK with this, my mistake.

Thanks all
Link to post
Share on other sites
kingmjj said:
This may be the dumbest question ever but is their some UDP telemetry software I can use on PC to read back telemetry from my beta on Xbox?
Hi,
Absolutely, you can use a supported device display or racing display emulator by SLIMax Mgr Pro and the F1 2017 Console Bridge. More info available on website and forum:
http://www.eksimracing.com/slimax-manager-pro-console-bridge/

100% FREE solution for XB1 or PS4 with SLIMax Mgr Pro + F1 Display Emulator on Android tablet/phone:
http://www.eksimracing.com/forum/index.php?topic=3535.0

Cheers,
z


Link to post
Share on other sites
Sorry if I can not check by myself (I'm a beta tester now but not at home this week :( and I'm afraid to be late to give my feedback)
I think there is an important info missing from the live broadcaster point of view: who is the currently viewed driver in "spectator mode". If I want to show dedicated informations about the viewed driver (delay evolution, battle with, sector times, position in the championship, even the picture), I need to know whom I'm watching.

byte  m_player_car_index;         // index of player's car in the array

Don't know which value this parameter is giving when I'm in the spectator mode... maybe null or zero because I'm not a "player".
Maybe CM developers can add a field

byte  m_viewed_car_index;         // index of viewed car in the array

or, if not adding, giving "player index" when I'm a player, while "viewed index" when I'm a spectator
Link to post
Share on other sites
@Hoo Quick question regarding pits:
byte  m_inPits;           // 0 = none, 1 = pitting, 2 = in pit area

My interpretation of this is that we should see a status of 1 followed by 2, but it seems to be the other way round. Do you know the intention with these status values?

Thanks
David
Link to post
Share on other sites
I've had a chance to try out a full grid of cars now that the options for the MP sessions are unlocked. What i have found is that the team/driver mappings are all wrong, they appear to still be linked to F1 2016 combinations.

These are the current driver combinations i am getting from the game based on the ID's you listed on the first page. Note that there are 4 driver Ids unaccounted for on the first page, 8 (rosberg), 4 (button), 24 (nasr) and 68 (gutierrez) which are 2016 drivers who are being output as the driverId's in 2017. The others you can see are in the wrong teams, bottas is in williams (2016 team), hulk is in force india (2016 team), magnussen at renault (2016 team)

Mercedes - Lewis Hamilton
Mercedes - DRIVER 8
Ferrari - Sebastian Vettel
Ferrari - Kimi Räikkönen
RedBull - Daniel Ricciardo
RedBull - Max Verstappen
Force India - Sergio Perez
Force India - Nico Hulkenburg
Williams - Felipe Massa
Williams - Valtteri Bottas
McLaren - Fernando Alonso
McLaren - DRIVER 4
Haas - Romain Grosjean
Haas - DRIVER 68
Sauber - Marcus Ericsson
Sauber - DRIVER 24
Renault - Kevin Magnussen
Renault - Jolyon Palmer
Toro Rosso - Daniil Kvyat
Toro Rosso - Carlos Sainz Jr.

Link to post
Share on other sites
One other issue i noticed is that when you go into the pause screen, the telemetry stops. Which is not a problem in any single player games as the entire simulation stops, however in a MP session this is a problem as the rest of the players are still playing. This means you can miss a chunk of important timing telemetry from the other players if you have gone into the pause screen to say make some adjustments to your controller settings mid session. This ties into the same sort of thing regarding continuing to run the timing after the end of a session, but pausing the telemetry used for motion platforms.
Link to post
Share on other sites
One other thing I realised is that there doesn't seem to be any indication of session duration, would it be possible to get this field added? There is currently a session time field at the start of the struct, but no way to determine how long is left in a time based session. It could be addressed by either adding a new var to indicate session time remaining, or a new var to indicate total session duration from which time remaining could be calculated using the existing session time field.
Link to post
Share on other sites
Has anyone unpacked this in python yet? I've not got the beta yet and I'm struggling to visualise how what the struct format code will be to unpack it all. I'm sure I'll figure it once the game is out, but would like a little head start on it
Link to post
Share on other sites
@Hoo, has there been any changes to the telemetry api in todays beta, such as fixing the timing information being slightly out of sync during sector/lap changes? I couldnt see a complete change list anywhere so figured i would ask.
Link to post
Share on other sites
  • 2 weeks later...
Seems like car data don't have speed. If we could have that, we can calculate gaps in secs between two cars. I could still calculate its speed with distance it moved and time diff between two packages but it is extra calculation for every packet received. 

And also could we get tyre number or id in car data packet so we can calculate tyre history of cars. 

I don't have beta access (if there is one) so I can't test my app. Is there any example raw data so I can use with my mock server to send it to my app. 
Link to post
Share on other sites
Seems like car data don't have speed. If we could have that, we can calculate gaps in secs between two cars. I could still calculate its speed with distance it moved and time diff between two packages but it is extra calculation for every packet received. 

And also could we get tyre number or id in car data packet so we can calculate tyre history of cars.
Car speed is useless if you want to calculate the gap between 2 cars because cars have different speed in different parts of the track (straight or turn or chicane etc...). My way is: reset a timer_1 each time the first driver passes the finish line (m_sector value changes from 2 to 0) and compute time elapsed for each driver passing the finish line... you will have the gaps between each driver and the first one (excluding overlapped ones). Calling this ABSOLUTE gap, it will be easy to compute the RELATIVE gap between any 2 drivers.
Doing the same for each sector change (3) you will have gaps updating 3 times during a single lap: it is enough in my opinion.

m_tyreCompound is already available for each driver!
Link to post
Share on other sites
bax said:
Seems like car data don't have speed. If we could have that, we can calculate gaps in secs between two cars. I could still calculate its speed with distance it moved and time diff between two packages but it is extra calculation for every packet received. 

And also could we get tyre number or id in car data packet so we can calculate tyre history of cars.
Car speed is useless if you want to calculate the gap between 2 cars because cars have different speed in different parts of the track (straight or turn or chicane etc...). My way is: reset a timer_1 each time the first driver passes the finish line (m_sector value changes from 2 to 0) and compute time elapsed for each driver passing the finish line... you will have the gaps between each driver and the first one (excluding overlapped ones). Calling this ABSOLUTE gap, it will be easy to compute the RELATIVE gap between any 2 drivers.
Doing the same for each sector change (3) you will have gaps updating 3 times during a single lap: it is enough in my opinion.

m_tyreCompound is already available for each driver!
That will only change gap when sector change. I know gap changes at straight and braking points, but it is also like that in tv. 

I didn't mean tyre compound, I know compound is there, but we can't know which set driver is using. There will be multiple sets of same compound and he might not change tyre every time he pit, also he could use already used tyre if no sets left and he punctured his tyres etc.
Link to post
Share on other sites
That will only change gap when sector change. I know gap changes at straight and braking points, but it is also like that in tv. 

I didn't mean tyre compound, I know compound is there, but we can't know which set driver is using. There will be multiple sets of same compound and he might not change tyre every time he pit, also he could use already used tyre if no sets left and he punctured his tyres etc.
Even if you know exactly distance and speed for each part of the track you can not compute exactly the gap between 2 drivers using these 2 values because the 2nd driver can change his speed anyway anytime: you can only forecast the gap. There is no mathematic formula for this.
The only way (I found) is to compute the elapsed time when 2 drivers pass on the same point of the track: you can use 3 sectors (as real F1 TV did till 2 year ago) or divide the track in more sub-sectors using distance value, creating your own grid (more points, more timers) as real F1 TV does in the last 2 years.

About tyres: now I understand what you mean ;)
Link to post
Share on other sites
@Hoo - just a bit of feedback from the testers of my app. They are loving the new features that are on offer with the new telemetry which is great. The biggest issue currently though is with the timing stopping the moment the player finishes or when they are paused (in multiplayer this is an issue). In the test i did tonight, i finished a race at the front which meant that all the timing for pos 2+ stops. So the final results of the actual race did not match what the app showed as it was only accurate up until the point i crossed the start finish line, the true results for everyone behind are impossible to get currently. For me this is an even bigger issue as i can store the session results to my online portal, problem is they will be wrong.

Hopefully this issue can be solved before the game is released as now that we have all opponent timings available it is a really noticable problem.

If any of your guys want beta access to the app just to see what sort of things 3rd partys like myself are doing (or to see the issue for themselves), just PM me with the email address they use for the app store and what platform they want to try the app on (iOS or Android) and ill add them to the beta testers list.

Cheers
Link to post
Share on other sites
  • Codemasters Staff
@cjorgens79 - unfortunately, keeping the telemetry going after the race finishes isn't something we can easily fix at this stage in development. We're exploring options, but it seems like we may need to do a more significant re-write / re-organisation of our data to allow us to better control what data is sent when. This amount of work wouldn't happen before release though. In terms of aggregating results, we are looking into the session ID idea that was proposed, so at least local information can been uploaded and correlated. I'll let you know if this is something we can get into the current title.
Link to post
Share on other sites
Hoo said:
@cjorgens79 - unfortunately, keeping the telemetry going after the race finishes isn't something we can easily fix at this stage in development. We're exploring options, but it seems like we may need to do a more significant re-write / re-organisation of our data to allow us to better control what data is sent when. This amount of work wouldn't happen before release though. In terms of aggregating results, we are looking into the session ID idea that was proposed, so at least local information can been uploaded and correlated. I'll let you know if this is something we can get into the current title.
@Hoo - understood, thanks for the info. On a related note, would it be possible to continue sending the last known telemetry after the player finishes for say a second. At the moment the telemetry stops very quickly, so quickly in fact that the only one or two packets get sent after crossing the start finish line. This means it is possible that sometimes the end of the session (ie lap change when the start finish line is crossed at the end) could be missed due to udp not being guaranteed. If it could send the final telemetry packet for another second or so, that should be more than enough to ensure it gets picked up by any clients so they can process the end of the final lap reliably. I have had this issue happen to me during testing, examination of other recorded sessions indicates that only one or two packets get sent after finishing which explains the issue.

Also do you think the synchronisation of the timing and the lap/sector data in the telemetry will be fixed, ie so that when the start finish line is crossed, the lap time, sector time, prev lap time and lap dist will reset in the same packet that the sector and lap number increment. This particular issue is highly problematic since we don't have a sector 3 time, we need to rely on detecting the change of lap/sector and then cross reference against the lap time/last lap time and previous known sector times to work out what the final sector was. When these are out of sync it obviously makes things rather difficult.

Thanks
Craig
Link to post
Share on other sites
bax said:
...The biggest issue currently though is with the timing stopping the moment the player finishes or when they are paused (in multiplayer this is an issue). ...
What if you are a spectator?
good question, i have been meaning to test out what happens in spectator mode but hadn't yet got around to it
Link to post
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...