SimXperience Motion Data UDP Export Documentation


Overview

This document describes the UDP export feature for motion data and telemetry data in SimXperience Sim Commander software. The system emits real-time motion data from the Sim Commander as JSON over UDP, enabling third-party applications to consume and process the data.

Note: Not all data is available from all games.


Note: Motion data, which is processed at a higher rate and standard telemetry data, are output on separate UDP ports. The feature can be enabled/disabled and the ports defined in the SimXperience Control Center UI:



• Protocol Name: SimXperience.MotionData

• Version: 1

• Transport: UDP, UTF-8 JSON payload

• Default Destination: 127.0.0.1:{MotionDataExportUDPPort} (configurable via settings)

• Enable Flag: CommanderSettings.EnableSimXperienceGameDataUDPExport (configurable via settings)

• JSON Naming: camelCase (via System.Text.Json with JsonNamingPolicy.CamelCase)


Payload Envelope

The top-level JSON structure includes metadata for protocol identification and timing.

• protocol (string): Constant value "SimXperience.MotionData" – verify this to ensure correct packet.

• version (int): Schema version (currently 1).

• timestampUtc (string): ISO 8601 UTC timestamp when the packet was emitted (authoritative for cross-system correlation).

• motionData (object): The ConditionedMotionData payload.


Example JSON Payload

{

  "protocol": "SimXperience.MotionData",

  "version": 1,

  "timestampUtc": "2025-11-06T12:34:56.789Z",

  "motionData": {

    "matchKey": 0.123,

    "currentLapNumber": 3,

    "currentLapTime": 82.456,

    "timeDelta": 2.0,

    "isDriverInVehicle": true,

    "yaw": -12.34,

    "pitch": 1.5,

    "roll": 0.25,

    "lateralGForce": 0.85,

    "longitudinalGForce": -0.12,

    "engineRPM": 7400.0,

    "currentGear": 4,

    "steeringAngleDegrees": -15.0,

    "steeringTorqueNm": 1.25

  }

}

Field Schema

Units are based on explicit suffixes in the code (e.g., Degrees, RPM) or standard automotive conventions. Some fields may be empty or XmlIgnore/NonSerialized depending on the plugin.


Meta


• matchKey (Double, dimensionless): Session match/progress key.

• currentLapNumber (Integer, laps): Current lap index.

• currentLapTime (Double, seconds): Elapsed lap time.

• lastLapTime (Double, seconds): Last lap time.

• timeDelta (Double, milliseconds): Sample delta/time-interval used by conditioning (default 10000 on start; typical values in ms).

• isDriverInVehicle (Boolean, N/A): Whether driver is in vehicle.

• isReplayPlaying (Boolean, N/A): Whether a replay is playing.


Debug

• debug1 to debug8 (Double, implementation-defined): Debug values provided by conversions or plugin.


Orientation (degrees)

• yaw (Double, degrees): Vehicle yaw (heading).

• pitch (Double, degrees): Vehicle pitch.

• roll (Double, degrees): Vehicle roll.


Lat/Long Speed / Heading

• latLongSpeedAngle (Double, degrees): Angle of resultant lateral/longitudinal speed (plugin-specific).

• latLongSpeedAngleSpeed (Double, degrees/sec): Angular speed of lat/long speed angle.


Angular Velocities (degrees/sec)

• pitchVelocity (Double, deg/s): Pitch velocity.

• rollVelocity (Double, deg/s): Roll velocity.

• yawVelocity (Double, deg/s): Yaw velocity.


Angular Accelerations (degrees/sec²)

• yawAcceleration (Double, deg/s²): Yaw acceleration.

• pitchAcceleration (Double, deg/s²): Pitch acceleration.

• rollAcceleration (Double, deg/s²): Roll acceleration.


World Coordinates (position)

• positionX (Double, meters (assumed)): World X position.

• positionY (Double, meters): World Y position.

• positionZ (Double, meters): World Z position.


World Velocity/Acceleration

• speedX (Double, m/s): X velocity.

• speedY (Double, m/s): Y velocity.

• speedZ (Double, m/s): Z velocity.

• accelerationX (Double, m/s²): X acceleration.

• accelerationY (Double, m/s²): Y acceleration.

• accelerationZ (Double, m/s²): Z acceleration.


Car-Local Speeds 

• lateralSpeed (Double, m/s): Lateral speed in car coordinates.

• longitudinalSpeed (Double, m/s): Longitudinal speed in car coordinates.

• verticalSpeed (Double, m/s): Vertical speed in car coordinates.


G-Forces

• lateralGForce (Double, g): Lateral acceleration in g (1g ≈ 9.81 m/s²).

• longitudinalGForce (Double, g): Longitudinal acceleration in g.

• verticalGForce (Double, g): Vertical acceleration in g.


Body Orientation Relative to Chassis

• bodyRoll (Double, degrees): Relative to chassis.

• bodyPitch (Double, degrees): Relative to chassis.


Wheel / Suspension / Grip

• frontLeftGripFraction (Double, fraction (0..1)): Grip fraction.

• frontLeftWheelSpeed (Double, typically RPM): Wheel speed (check plugin).

• frontLeftSuspensionPosition (Double, meters): Suspension travel/position.

• frontLeftSuspensionSpeed (Double, m/s or m/s-derived): Suspension speed.

• frontLeftSuspensionAccel (Double, m/s² (XmlIgnore)): Suspension acceleration.

• frontLeftSuspensionSurge (Double, plugin-specific): Surge value.

• rearLeftGripFraction (Double, fraction (0..1)): Grip fraction.

• rearLeftWheelSpeed (Double, typically RPM): Wheel speed.

• rearLeftSuspensionPosition (Double, meters): Suspension travel/position.

• rearLeftSuspensionSpeed (Double, m/s or m/s-derived): Suspension speed.

• rearLeftSuspensionAccel (Double, m/s² (XmlIgnore)): Suspension acceleration.

• rearLeftSuspensionSurge (Double, plugin-specific): Surge value.

• frontRightGripFraction (Double, fraction (0..1)): Grip fraction.

• frontRightWheelSpeed (Double, typically RPM): Wheel speed.

• frontRightSuspensionPosition (Double, meters): Suspension travel/position.

• frontRightSuspensionSpeed (Double, m/s or m/s-derived): Suspension speed.

• frontRightSuspensionAccel (Double, m/s² (XmlIgnore)): Suspension acceleration.

• frontRightSuspensionSurge (Double, plugin-specific): Surge value.

• rearRightGripFraction (Double, fraction (0..1)): Grip fraction.

• rearRightWheelSpeed (Double, typically RPM): Wheel speed.

• rearRightSuspensionPosition (Double, meters): Suspension travel/position.

• rearRightSuspensionSpeed (Double, m/s or m/s-derived): Suspension speed.

• rearRightSuspensionAccel (Double, m/s² (XmlIgnore)): Suspension acceleration.

• rearRightSuspensionSurge (Double, plugin-specific): Surge value.


Drivetrain / Engine

• currentGear (Integer, gear index (1..N; plugin-dependent; some compatibility keys alter index)): Current gear.

• engineRPM (Double, RPM): Engine revolutions per minute.

• engineRPMMax (Double, RPM (XmlIgnore)): Maximum engine RPM.

• clutchRPS (Double, revolutions per second): Clutch speed.


Surge / High-Frequency Derivatives

• lateralSurge (Double, plugin-specific): Surge value.

• longitudinalSurge (Double, plugin-specific): Surge value.

• verticalSurge (Double, plugin-specific): Surge value.

• rollSurge (Double, plugin-specific): Surge value.

• pitchSurge (Double, plugin-specific): Surge value.

• yawSurge (Double, plugin-specific): Surge value.


Suspension Angles

• suspensionRollAngle (Double, degrees): Suspension roll angle.

• suspensionPitchAngle (Double, degrees): Suspension pitch angle.

• suspensionRollAngleSpeed (Double, deg/s): Suspension roll angular speed.

• suspensionPitchAngleSpeed (Double, deg/s): Suspension pitch angular speed.

• suspensionRollAngleAccel (Double, deg/s²): Suspension roll angular acceleration.

• suspensionPitchAngleAccel (Double, deg/s²): Suspension pitch angular acceleration.

• frontSuspensionAngle (Double, degrees): Front suspension angle.

• frontSuspensionPosition (Double, meters): Front suspension position.

• rearSuspensionAngle (Double, degrees): Rear suspension angle.

• rearSuspensionPosition (Double, meters): Rear suspension position.


Shifter / Gearbox

• shifterGrindRPM (Double, RPM): Shifter grind RPM.

• shifterFrictionalTorque (Double, N·m (plugin-specific)): Shifter frictional torque.


Stability / Handling

• idealYawVelocity (Double, deg/s (XmlIgnore)): Ideal yaw velocity.

• overSteer (Double, implementation-defined): Oversteer value.


Steering / Wheel Interface

• steeringTorquePercent (Double, percent or percent-of-max (plugin-specific scale, often -100..100)): Steering torque percentage.

• steeringTorqueNm (Double, N·m): Steering torque in Newton-meters.

• interpolatedSteeringTorque (SteeringTorqueData, object containing interpolation samples (see type definition)): Interpolated steering torque.

• steeringAngleDegrees (Double, degrees): Wheel/steering angle.

• maxSteeringAngleDegrees (Double, degrees): Maximum wheel angle (0 if unknown).

• upShiftLockoutForce (Double, N? (plugin-specific)): Up shift lockout force.

• downShiftLockoutForce (Double, N? (plugin-specific)): Down shift lockout force.


Other

• otherInputData (OtherInputs, ignored in JSON by default in current implementation )



Best Practices for Data Consumers

• Verify protocol and version fields before consuming.

• Use timestampUtc for sequence/gap detection; UDP is lossy and out-of-order.

• Expect optional/missing fields. Use robust JSON parsing with defaults.


Minimal UDP Receiver Example

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Text.Json;


class MotionReceiver {

    static void Main() {

        int port = 10002; // match MotionDataExportUDPPort

        using var client = new UdpClient(port);

        Console.WriteLine($"Listening on UDP port {port}");

        var endpoint = new IPEndPoint(IPAddress.Any, 0);

        while (true) {

            var bytes = client.Receive(ref endpoint);

            string json = Encoding.UTF8.GetString(bytes);

            try {

                using var doc = JsonDocument.Parse(json);

                var root = doc.RootElement;

                if (root.TryGetProperty("protocol", out var p) && p.GetString() == "SimXperience.MotionData") {

                    var motion = root.GetProperty("motionData");

                    double engineRpm = motion.GetProperty("engineRPM").GetDouble();

                    double steerDeg = motion.GetProperty("steeringAngleDegrees").GetDouble();

                    Console.WriteLine($"RPM={engineRpm:N0}, Steering={steerDeg:N2}°");

                }

            } catch (Exception ex) {

                Console.WriteLine("Packet parse error: " + ex.Message);

            }

        }

    }

}


Telemetry Data Field Schema (SimXperience.TelemetryData)

Some fields may be empty or NonSerialized depending on the plugin.

Note: as mentioned above, the telemetry data is output on a different UDP port from the higher speed motion data fields.


Meta / Race

• currentLapNumber (Integer, laps): Current lap index.

• currentLapTime (Double, seconds): Elapsed lap time.

• lastLapTime (Single, seconds): Last lap time (may be XmlIgnored).

• lapDistPercent (Double, 0..1 or percent depending on plugin): Progress around track.

• laps (Integer, total laps): Total laps in session where applicable.

• positionInRace (Integer, finishing position): Position in race.

Vehicle State

• speedKPH (Single, km/h): Vehicle speed in kilometers per hour.

• speedMPH (Single, mph): Vehicle speed in miles per hour.

• rpm (Single, RPM): Engine revolutions per minute.

• maxRPM (Single, RPM): Maximum engine RPM (may be XmlIgnored).

• gear (Integer, gear index): Current gear.

• clutch (Single, percent/ratio): Clutch position (plugin-dependent).

• throttle (Single, 0..1 or 0..100): Throttle position (plugin-dependent).

• brake (Single, 0..1 or 0..100): Brake position (plugin-dependent).

• steering (Single, degrees or normalized (-1..1)): Steering angle (plugin-dependent).

• speedLimiter (Boolean, N/A): Whether speed limiter is active.

• shiftLight (Boolean, N/A): Shift light indicator.


Engine / Fluids

• fuelL (Single, liters): Fuel level in liters.

• fuelG (Single, gallons): Fuel level in gallons.

• fuelTempC (Single, Celsius): Fuel temperature in Celsius (may be XmlIgnored).

• fuelTempF (Single, Fahrenheit): Fuel temperature in Fahrenheit (may be XmlIgnored).

• oilTempC (Single, Celsius): Oil temperature in Celsius.

• oilTempF (Single, Fahrenheit): Oil temperature in Fahrenheit.

• oilPressure (Single, typical pressure units): Oil pressure (check plugin).


Temperatures & Brakes

• Per-wheel temps: frontLeftCenterTempF, frontLeftInnerTempC, frontRightCenterTempF, etc. (Single, Celsius / Fahrenheit): Tire temperatures.

• Brake temps: frontLeftBrakeTempC, frontLeftBrakeTempF, rearRightBrakeTempC, etc. (Single, Celsius / Fahrenheit): Brake temperatures.


Wheel Speeds / Pressures / Wear

• frontLeftSpeedKPH, frontLeftSpeedMPH, frontLeftSpeedRPM (Single, speeds): Wheel speeds.

• frontLeftPressure, rearLeftPressure, frontRightPressure (Single, tire pressure units): Tire pressures (plugin-dependent).

• frontLeftWear, rearRightWear (Single, wear ratio 0..1 or percent): Tire wear.

Lap, Timing Values

• splitTime, splitTimeTS (Single / timespan, seconds): Split time; many timing fields have both raw and TS helpers.

• bestLapTime / bestLapTimeTS (Single / timespan, seconds): Best lap time.


Derived / Misc

• rpmDiv1000 (Single, RPM / 1000): Engine RPM divided by 1000 (read-only).

• gameTime (Single, seconds): Session or replay time (plugin-specific).

• tc (Boolean, N/A): Traction control flag.

• engineFailure (Boolean, N/A): Engine failure indicator.

• hasIncidents (Boolean, N/A): Whether any incident recorded.

• pit (Boolean, N/A): Is in pit.

• yellowFlag, redFlag (Boolean, N/A): Session flags.

• abs (Boolean, N/A): Anti-lock braking system flag.

• headlights (Boolean, N/A): Headlights on/off.




Commenting is not enabled on this course.