Forza Motorsport 7 'Data Out' feature details

With the launch of the June CU for Forza Motorsport 7, we’re including a new Data Out feature, which outputs a UDP data stream which players can now take advantage of. This is the same technology that powers the motion sleds that Turn 10 uses, but the possibilities are endless. For those interested, here’s a look at the parameters:

Description
Telemetry output sends data packets for outside use by third parties. Designed for motion sleds, dashboards, data logging, etc. You can use it for whatever your imagination desires. This one-way UDP traffic is sent to a remote machine at 60fps. Localhost data streaming is not supported.

The initial data structure is designed specifically for motion sleds. We are working with several peripheral manufacturers and will be adding many more data points in the future.

Input Parameters
The following parameters are now located in the HUD options menu.

• Data Out: Toggles the data output function on and off.
• Data Out IP Address: The target IP address of the remote machine receiving data.
• Data Out IP Port: The target IP port of the remote machine receiving data.

Output Structure
Data is output in the following structure.

s32 IsRaceOn; // = 1 when race is on. = 0 when in menus/race stopped …

u32 TimestampMS; //Can overflow to 0 eventually

f32 EngineMaxRpm;
f32 EngineIdleRpm;
f32 CurrentEngineRpm;

f32 AccelerationX; //In the car’s local space; X = right, Y = up, Z = forward
f32 AccelerationY;
f32 AccelerationZ;

f32 VelocityX; //In the car’s local space; X = right, Y = up, Z = forward
f32 VelocityY;
f32 VelocityZ;

f32 AngularVelocityX; //In the car’s local space; X = pitch, Y = yaw, Z = roll
f32 AngularVelocityY;
f32 AngularVelocityZ;

f32 Yaw;
f32 Pitch;
f32 Roll;

f32 NormalizedSuspensionTravelFrontLeft; // Suspension travel normalized: 0.0f = max stretch; 1.0 = max compression
f32 NormalizedSuspensionTravelFrontRight;
f32 NormalizedSuspensionTravelRearLeft;
f32 NormalizedSuspensionTravelRearRight;

f32 TireSlipRatioFrontLeft; // Tire normalized slip ratio, = 0 means 100% grip and |ratio| > 1.0 means loss of grip.
f32 TireSlipRatioFrontRight;
f32 TireSlipRatioRearLeft;
f32 TireSlipRatioRearRight;

f32 WheelRotationSpeedFrontLeft; // Wheel rotation speed radians/sec.
f32 WheelRotationSpeedFrontRight;
f32 WheelRotationSpeedRearLeft;
f32 WheelRotationSpeedRearRight;

s32 WheelOnRumbleStripFrontLeft; // = 1 when wheel is on rumble strip, = 0 when off.
s32 WheelOnRumbleStripFrontRight;
s32 WheelOnRumbleStripRearLeft;
s32 WheelOnRumbleStripRearRight;

f32 WheelInPuddleDepthFrontLeft; // = from 0 to 1, where 1 is the deepest puddle
f32 WheelInPuddleDepthFrontRight;
f32 WheelInPuddleDepthRearLeft;
f32 WheelInPuddleDepthRearRight;

f32 SurfaceRumbleFrontLeft; // Non-dimensional surface rumble values passed to controller force feedback
f32 SurfaceRumbleFrontRight;
f32 SurfaceRumbleRearLeft;
f32 SurfaceRumbleRearRight;

f32 TireSlipAngleFrontLeft; // Tire normalized slip angle, = 0 means 100% grip and |angle| > 1.0 means loss of grip.
f32 TireSlipAngleFrontRight;
f32 TireSlipAngleRearLeft;
f32 TireSlipAngleRearRight;

f32 TireCombinedSlipFrontLeft; // Tire normalized combined slip, = 0 means 100% grip and |slip| > 1.0 means loss of grip.
f32 TireCombinedSlipFrontRight;
f32 TireCombinedSlipRearLeft;
f32 TireCombinedSlipRearRight;

f32 SuspensionTravelMetersFrontLeft; // Actual suspension travel in meters
f32 SuspensionTravelMetersFrontRight;
f32 SuspensionTravelMetersRearLeft;
f32 SuspensionTravelMetersRearRight;

s32 CarOrdinal; //Unique ID of the car make/model
s32 CarClass; //Between 0 (D – worst cars) and 7 (X class – best cars) inclusive
s32 CarPerformanceIndex; //Between 100 (slowest car) and 999 (fastest car) inclusive
s32 DrivetrainType; //Corresponds to EDrivetrainType; 0 = FWD, 1 = RWD, 2 = AWD
s32 NumCylinders; //Number of cylinders in the engine

[Sept. 10, 2018 UPDATE: NEW DATA OUT STRUCTURE]

V1 is now called Sled
V2 is V1 then these added in this order at the bottom.
//Position (meters)
f32 PositionX;
f32 PositionY;
f32 PositionZ;

f32 Speed; // meters per second
f32 Power; // watts
f32 Torque; // newton meter

f32 TireTempFrontLeft;
f32 TireTempFrontRight;
f32 TireTempRearLeft;
f32 TireTempRearRight;

f32 Boost;
f32 Fuel;
f32 DistanceTraveled;
f32 BestLap;
f32 LastLap;
f32 CurrentLap;
f32 CurrentRaceTime;

u16 LapNumber;
u8 RacePosition;

u8 Accel;
u8 Brake;
u8 Clutch;
u8 HandBrake;
u8 Gear;
s8 Steer;

s8 NormalizedDrivingLine;
s8 NormalizedAIBrakeDifference;

8 Likes

s32 CarOrdinal; //Unique ID of the car make/model
Is this going to be reused for future releases, ie, if the Aston Martin Vantage is id 10 on FM7, will it be id 10 on FM8? And is it possible to get a list of id - car?

Will the data structure be updated in the future? Are you open to parameters requests?

Can / would a broadcast option be considered?

5 Likes

Can I also ask if you’re open to parameter requests,

I’m one of the staff which run TORA (the online racing association) and I’ve already started looking into creating an app for this data stream.

The thing we do is organise racing leagues, from series to endurance races, and being able to receive this data and have it displayed on a full live timing system would be awesome,

The only things I can’t see are things such as what the global position of the car is in relation the the track they’re currently on so there’d be no way of plotting or tracking the cars position.

Is this every parameter you’d have available to output or are there any options to add more if required?

I’ve listed below what I think would be good and how it would benefit people.

x, y, z position in global terms: could then plot where the car is which would be useful for saving and reading telemetry to create better tunes / plotting the cars positions for display in live timing
gear number: useful in dashboard building as a gear indicator / telemetry
current track: again would be useful for telemetry readings
current race position: useful in a live timing diagram
distance travelled: again live timing of endurance races
fastest lap: useful for live timing, and analysing which tune produced the better times.

This information could also benfit the people of the twitch community as they could make some cool looking custom overlays

Those are just a couple I can think of but if it’s possible to implement these in the future this would be awesome.

7 Likes

This is a big yes! i’ll test this forever haha

Maybe if we can the addition of fuel level and tyre wear would be great as well for simulation racing

3 Likes

Aren’t some of those information not all ready available through normal telemetry ?
And not accessible for development. Also logging information and outputting it will surely impact the game’s performance, no?

They are available through normal telemetry, but the telemetry screen is displayed on your TV, with this UDP telemetry enabled, you can have telemetry data on your tablet, and have no HUD info on the tv, which gives you more immersion and it’s easier to check the telemetry. It will not impact game’s performance in any way.
I hope FH3 receives update like this or at least future FH4 has this option build in from the get go :slight_smile:

I was thinking - in regards to plotting the coordinates of a car over the course of a lap, shouldn’t it be possible (in theory) to do so using the acceleration and velocity values in each row of data to re-create the path of the vehicle? I’m not sure exactly how to do this, but it should be possible. Unless the values reported are rounded - in which case, the rounding would lead to greater and great deviation for each progressive calculation. I was reading about how they used a machine with gyroscopes to keep track of space craft movements during Apollo - and could map out path based on the recordings over time. However, small rounding errors would eventually lead to larger and larger deviations, so they had to also use radar data to help recalibrate.

That said - I’d really love the ability to tie datapoints to a track location. Even just the simple 2D coordinates.

I’d absolutely love if someone could create an app that shows live telemetry. That’s be incredible.

And if we could get stuff like fastest lap, current lap, last lap, map tracking and delta times I’d she’d tear aha!

1 Like

There is no information in the packets to support UDP apps for telemetry,rpm,timing, etc like PCars and F1 do. right now it only supports sleds. Hopefully we can have access to more data soon.

I like the sound of extra lap times being added like current and last as well as the best lap, delta times could then be calculated based from the previous lap times / times of other drivers if displayed on a live race dashboard.

map tracking would definitely be possible if we had global positions.

If I can get a simple app working to at least just display the raw data then processing this to look like whatever we need it to shouldn’t be too difficult

2 Likes

Exactly what I’m working on. Do you think a web site or a native phone app would be cooler?

I think a website would be.

Agreed. In fact I would like to see delta t anywhere. But since even the game itself doesn’t show this fundamental information it’s not going to happen. Sadly.

I would also like Parameters like Fuel, Tire Wear, Car Condition broadcast. I’d also love to have a percentage of lap completed for each car on track and where they are in relation to the left or right side of the road

2 Likes

Hello,

when creating an UDP app for Project Cars i use an static udp port to get all the data from game without any ip address. So all devices who are listening to this udp port, for example apps for mobile phones or desktop apps, can receive those data. I understand that there is an option to adapt this port number but i didnt understand why there is a target ip address necessary or is this optional so in default case all devices listening to the udp port can receive the data (broadcast)?
Will there be more Data in the UDP stream for example sector and lap times for each player or vehicle speed so we can evaluate things like top lap time estimation when adding the players best sector times together.

With kind regards

1 Like

Having a race engineer would be cool too thinking about it.

All I want is to output to a Andriod 10 inch tablet the following RPM, Speed im going and Gear im in and I will be stoked. Assists showing like TC, ABS, Stability management or what ever it is called is all ways off so yea dont need to know about that one. Bur would be a nice touchalong with current lap and previous lap as well as fastest lap would be the Icing.

Hi can someone please explain in english to us mere mortals exactly what this brings to game and what effect this would have, as i have no clue what all that means

2 Likes

With this the game sends telemetry Data to the Local network (the network your console and maybe mobile phone and Computers are in).
With special apps it is possible to use this data and bring it to an external display to show it for example in a selfbuild rig or you can use the data to optimize your driving skills and so on.
You can search for Project Cars UDP or RS Dash for examples how to use it.

2 Likes

People smarter than you and I will be able to use this data to create apps and tools that we can all enjoy.

One example would be to create an accessory-on for your steering wheel so that it displays dashboard information like a racing car would.

2 Likes