Jump to content

Archived

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

F1 2017 D-Box and UDP Output Specification

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.

Share this post


Link to post
Share on other sites
Thanks for the info. I'll get the team to test this out.

Share this post


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.

Share this post


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

Share this post


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

Share this post


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


Share this post


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

Share this post


Link to post
Share on other sites
As far as I know the UDP telemetry settings in F1 2017 are supposed to persist now between restarts on the consoles, however i don't have a console myself to confirm this but we were told this was fixed.
It's certainly the case on PS4.

Share this post


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

Share this post


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.

Share this post


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.

Share this post


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.

Share this post


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

Share this post


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.

Share this post


Link to post
Share on other sites
We haven't made any changes in this latest beta. We are reviewing the various change requests at the moment.

Share this post


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. 

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. 

Share this post


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!

Share this post


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.

Share this post


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 ;)

Share this post


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

Share this post


Link to post
Share on other sites
@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.

Share this post


Link to post
Share on other sites
@Hoo +1 from me for my Race Dash app on iOS for a unique session ID - this would be super helpful. Many thanks

Share this post


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

Share this post


Link to post
Share on other sites
...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?

Share this post


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

Share this post


Link to post
Share on other sites

×