# Wheels And Contact Points This page details how to setup and configure the contact and friction models for your aircraft inMicrosoft Flight Simulator 2024. These values can all be set in the [SimObject Editor](../../../devmode/editors/simobject-editor/the-simobject-editor/) from the **Contact Points** section of the Flight Model tab: {{< image-center src="images/7_Samples_Tutorials/Tutorials/Define_Flight_Model/wheels/define_fm_contactwheelst.png" alt="Contact Points Section In The SimObject Editor" >}}   After selecting this panel it is recommended that you enable the [Ground](../../../devmode/editors/simobject-editor/debug_info/simobject-debug-menu/#ground) debug window, which will show information about any defined contact points, while also drawing them in the simulation. Each contact point is represented by blue boxes, and from each box a white line will be projected to the nearest ground surface (the line represents the surface normal). Wheels will also be represented in this view as yellow boxes with an additional green box for the contact force: {{< image-center src="images/7_Samples_Tutorials/Tutorials/Define_Flight_Model/wheels/define_fm_debugwheels.png" alt="Wheel Debugging In The Sim" >}}   We also suggest opening the [Wheels](../../../devmode/editors/simobject-editor/debug_info/simobject-debug-menu/#wheels) debug window which can be used to help understand the results of the data set you'll be editing for each wheel, which will be the first contact points you should define: {{< image-center src="images/7_Samples_Tutorials/Tutorials/Define_Flight_Model/wheels/define_fm_wheeldebug.png" alt="Debug Wheels Brakes And Contact Points" >}}     ### Adding Contact Points In the SimObject Editor, on the left, you'll see all the defined contact points for the aircraft, and you can add or remove contact points using the {{< button "+" />}} and {{< button "-" />}} buttons at the bottom of the editor. When working on a new aircraft, you'll need to start by adding in the contact points one at a time, usually starting with the wheels and positioning a minimum of 8, as follows: {{< image-center src="images/7_Samples_Tutorials/Tutorials/Define_Flight_Model/wheels/define_fm_scrapepoints.png" alt="Illustration Of initial Contact Points For An Aircraft" >}}   When adding contact points, you should set up the wheels first and for those you'll need to set up all - or most - of the following parameters: - **Name** - The unique name of the contact point. - **Type** - Sets the type of contact point. - **Pos** - The position of the contact point/wheel relative to the center point of the aircraft. Note that this is made a lot easier if you enable the [Gizmo tool](../../../devmode/the-edition-gizmo/) and then position the points visually. - **Crash velocity** - The maximum velocity at which the wheel will work before being considered a crash. - **Brake** - The brake type for the wheel. - **Wheel radius** - The wheel radius. - **Wheel steering angle** - The maximum angle the wheel can be turned when steering. - **Static compression** - This sets the landing gear compression when the airplane is on the ground with all the weight compressing the gears. - **Max to static compression** - This sets the maximum to static compression ratio. The higher this ratio is, the "stiffer" the suspension will be, but the higher the loads it can absorb before hitting maximum travel. - **Damping ratio** - This represents a ratio of how much energy is lost upon impact. - **Extend time** - The time required for the wheel to be extended from the aircraft. - **Retract time** -The time required for the wheel to be retracted into the aircraft. - **Sound ID** - The ID of the sound effect to use. - **Airspeed Retraction Limit.** - The airspeed at which the landing gear needs to be retracted. - **Airspeed Damaged** - The airspeed at which the landing gear will be damaged if not retracted. - **Exponential Constant** - This allows you to change the spring reaction curve.   These parameters are all set using a single entry in the [`[CONTACT_POINTS]`](../../../content-configuration/cfg-files/Flight_Model/flight_model_info.htm) section of the `flight_model.cfg` file, which follows this format: ``` codeblock point.[number] = name, class, long_pos, lat_pos, vert_pos, crash_velocity, braking_enum, wheel_radius, steer_angle, static_compression, max_to_static_compression_ratio, dapting_ratio, extend_time, retract_time, sound_enum, airpseed_limit, airspeed_damage, exponential_constant ```   Note that the contact between a wheel and the ground is esentially the contact between two planar surfaces, **however only a point is simulated**. Therefor, in order to give the best stability to the plane, we recommend that the wheel points are positioned at the exterior limits of the wheel's triangle. {{< image-center src="images/7_Samples_Tutorials/Tutorials/Define_Flight_Model/wheels/define_fm_wheelpos.png" alt="A Well Positioned Wheel Contact Point" >}} Another thing to note is that the **compression parameters** are displayed in the debug window, and you can use the visual feedback to adjust the compression ratios and distances so that the suspension is compressed between 30% and 50% when standing on the runway. Pay particular attention to the pitch of the aircraft when sitting on the landing gear, and ensure that it is correct when parked - a pitch that is too high or too low will negatively impact stability during take-off and landing.   A correctly positioned wheel contact point should look something like this: {{< image-center src="images/7_Samples_Tutorials/Tutorials/Define_Flight_Model/wheels/define_fm_wheelvalues.png" alt="Wheel Values In The Debug Window" >}}   You can then position the other contact (scrape) points so that they are aligned correctly with the aircraft model. These points are set similarly to the wheels but most of the fields can be left at the default values shown in the editor (ie: unset), as you only need to edit: - The name - The type (scrape point) - The position - The crash velocity     ### Note On Tailwheels The simulation code can use two different calculations to define when a *wheel* contact point is a **tailwheel** or not. This is done using the `tailwheel_algo_detection` parameter in the **contact points** section of the [flight\_model.cfg](../../../content-configuration/cfg-files/flight_model.cfg/). By default the "Legacy" method will be used in all cases *except* for deciding if an aircraft is correctly configured for the user to fly it in a [career activity](../../../content-configuration/careers/career-activities/), but setting this parameter to "Modern" will instead use the modern calculation in all cases.     #### Legacy Tailwheel Calculation An aircraft is considered as having a tailwheel using the **legacy** calculation when: - The wheel is on the center of the longitudinal axis, ie: the X position is 0. - The wheel contact point is *behind* the [Datum Reference Point](../../../content-configuration/modular-simobjects/aircraft/aircraft/#datum-reference-point), ie the Z position is less than 0. When both these conditions are met, the wheel is considered as a *tailwheel*, however this method is problematic with aircraft that are setup in a non-standard way with a datum reference point further forward or backwards than the aircraft [CG](../../../content-configuration/cfg-files/flight-model/additional-flight-model-information/#).     #### Modern Tailwheel Calculation For an aircraft to be considered as having a tailwheel, the **modern** calculation does not use the [Datum Reference Point](../../../content-configuration/modular-simobjects/aircraft/aircraft/#datum-reference-point) and instead uses a combination of factors related to wheel size and aircraft [CG](../../../content-configuration/cfg-files/flight-model/additional-flight-model-information/#). This is done as follows: - From the list of contact points in the `[CONTACT_POINTS]` section of [flight\_model.cfg](../../../content-configuration/cfg-files/flight_model.cfg/), determine the largest *radius* between all of the contact points defined as **wheels** (this value comes from position 6 of the `point.N` definition). - The list of contact points is then parsed again to determine the minimum longitudinal position between all of the contact points defined as **wheels** (this value comes from position 1 of the `point.N` definition) and that have a radius the same as that of the largest radius discovered in the previous step. - If the minimum longitudinal position of a wheel that is found is *greater* than the `empty_weight_CG_position` Z position value, then the aircraft is considered as having a tailwheel. Note that even if the `tailwheel_algo_detection` parameter is set to "Legacy", the modern tailwheel detection calculations will be used to find the tailwheel when the aircraft is being used for a [Career Activity](../../../content-configuration/careers/career-activities/). It is also worth noting that using the "Modern" tailwheel calculations will also include the tailwheel in the [Wear and Tear](../../../content-configuration/cfg-files/flight-model/additional-flight-model-information/#h1) system.     ### Note On Advanced Ground Contact Model With Microsoft Flight Simulator 2024, a new contact model was created to better simulate wheels and how the aircraft reacts when they are in contact with the ground. This system can be disabled/ignored by simply omitting the parameters mentioned below.   To correctly set up the new contact model, you should start by setting the `ground_new_contact_model_up_to_speed_lateral` and `ground_new_contact_model_up_to_speed_longitudinal` parameters. These parameters set the aircraft speed to be used to calculate the lateral and longitudinal friction for the landing gear when on the ground (whether stationary or moving). Lateral friction is for simulating sideways friction when turning, dealing with cross-winds, etc... while while longitudinal friction affects breaking, forward air resistance, ground friction on slopes, etc... Setting very high values for these parameters will result in *only* the new contact model being used.   To effectively use these parameters you should do the following: - Enable `enable_high_accuracy_integration` to get the simulation to take micro movements into consideration. - Set `ground_new_contact_model_gear_flex` to 1 / aircraft weight and then fine tune the value through tests. - Set `ground_new_contact_model_gear_flex_damping` to approximately 1% of the aircraft weight and then fine tune the value through tests. {{< callout context="note" title="NOTE" icon="outline/bulb" >}} Using very large values will make the landing gear so flexible that it will become very unstable and generate extremely exaggerated/unrealistic results. {{< /callout >}} - Set the `ground_new_contact_model_up_to_speed_lateral` and `ground_new_contact_model_up_to_speed_longitudinal` parameters to 10000 to ensure that the new contact model will always be enabled. - Setting the lateral and longitudinal friction will initially cause the aircraft to get very "sticky" at high rolling speeds. To resolve this, you should edit the `ground_new_contact_model_rolling_stickyness` parameter. Start with a value of 0.5 and then reduce it if the rolling still feels too sticky, or increase it if the rolling does not feel sticky enough. {{< callout context="note" title="NOTE" icon="outline/bulb" >}} You may wish to check that the `empty_weight_CG_position` is at the correct height as it will heavily impact ground rolling. {{< /callout >}}     ### Retractable Floats If your aircraft model is set up with the animations for retractable floats, then there are a couple of import things that you should know in relation to getting them to work correctly within the simulation.   To start with, you **must** define a "wheel" contact point as well as the "float" contact points in order for the floats to be evaluated as part of the retract/extend process. This contact point can be placed in a position where it does not interfere with the operation of the aircraft.   Once you have the contact points set up, the animations themselves will be controlled using the following events and SimVars: - Events: `RETRACT_FLOAT_SWITCH_INC` and `RETRACT_FLOAT_SWITCH_DEC` - SimVars: `RETRACT FLOAT SWITCH`, `RETRACT LEFT FLOAT EXTENDED`, and `RETRACT RIGHT FLOAT EXTENDED`