Helicopter Vortex Ring State

VRS is mentioned in this video by the CEO of Asobo:
https://youtu.be/KYh3pgKFTjM?t=3753 Are there parameters that need to be set
such that the helicopter is able to enter VRS? We’ve seen no flight model
configuration able to enter VRS on any helicopter so far.

Hello @davux3 There is no dedicated configuration parameters. Assuming you
have use_modern_surfaces set to 1, entering this state will depend on CFD
calculations and so this is the result of your rotor configuration. Regards,

Just to follow up on this, we still never saw VRS in any configuration. In the end we augmented the flight model with our own VRS model for now.

It may be that the CFD voxel size is not large enough for VRS to be fully developed.

The way VRS should work is this:

  1. From a hover (less than 20kt airspeed) begin a descent (probably under heavy weight) exceeding 1000-1500fpm. It’s important to understand that at a certain vertical speed the rotor will begin to autorotate, so too much vertical speed is expected to also exit VRS. After enough lateral speed the rotor will also exit VRS, so it’s important the relative speed (including wind) is well under 20kt.
  2. Once in fully developed VRS, pulling collective will result in increasing the descent rate, not arresting it.

In MSFS, with a properly configured flight model (specifically: where the engine(s) can support max weight without NR droop), the collective will always have enough power to simply arrest the descent. Since the vortices are following the aircraft trajectory, they should impede arresting the descent unless the pilot exits by using forward or lateral cyclic.

VRS and RBS need to be properly added to the base-sim with configurable parameters. That said, until that happens here is our custom XML inject code that can be tailored for your helicopters. Just place it in your model.xml and adjust as necessary for your airframe. Full permission to use. To clarify, our code on all our aircraft is freely available to use upon inspection, we have no problem with that. This code was developed in conjunction with our Mini-500 Helo. I know HPG went with a similar concept, but this may help less-advanced coders on getting a head-start for now.

            <UseTemplate Name="ASOBO_GT_Update">
                    (A:VELOCITY WORLD X, Knots) (A:AMBIENT WIND DIRECTION, Radians) sin (A:AMBIENT WIND VELOCITY, Knots) * + (&gt;O:TrueAirspeedX)
                    (A:VELOCITY WORLD Z, Knots) (A:AMBIENT WIND DIRECTION, Radians) cos (A:AMBIENT WIND VELOCITY, Knots) * + (&gt;O:TrueAirspeedZ)
                    (O:TrueAirspeedX) (O:TrueAirspeedX) * (O:TrueAirspeedZ) (O:TrueAirspeedZ) * + sqrt (&gt;O:TrueAirspeed)

                    (A:ROTOR ROTATION ANGLE:1, Radians) 2 * sin (A:ROTOR RPM PCT:1, Percent over 100) 0.45 min * s0
                    9 15 (O:TrueAirspeed) rng
                        1.75 (O:TrueAirspeed) 9 - 3 / pi * cos 0.75 * - s1
                    } els{
                        1 s1
                    l0 l1 * 1 (O:VrsStall) 0.75 * + * (L:VibrationEffects) * (&gt;L:RotorVibration)

                    (A:IS SLEW ACTIVE, Bool) !
                        1 (A:TOTAL WEIGHT, Lbs) (A:MAX GROSS WEIGHT, Lbs) / + 2 / (&gt;O:WeightFactor)
                        (A:ENG TORQUE PERCENT:1, Percent) 2.5 &gt;
                            1 16 (A:PLANE ALT ABOVE GROUND MINUS CG, Feet) - 0 max 16 / 2 pow + (&gt;O:VrsGroundEffect)
                            (A:VELOCITY BODY Y, Knots) -8.5 (O:VrsGroundEffect) * (A:COLLECTIVE POSITION, Percent over 100) 3.5 * + &lt;
                                1 (A:YOKE X POSITION LINEAR:1, Percent over 100) 0 max - (&gt;O:VrsRightCyclic)
                                5 (O:VrsStall) 4 * (O:VrsRightCyclic) * + (&gt;O:VrsArea)
                                1 (O:VrsArea) (O:TrueAirspeed) - (O:VrsArea) / 0 max pi * cos - 2 / (&gt;O:VrsFactor)
                                (O:VrsFactor) 0 &gt;
                                    (O:VrsStall) (O:VrsFactor) 0.025 * + 2.5 min (&gt;O:VrsStall)
                                    (A:VELOCITY BODY Y, Feet per second) (O:VrsStall) - -58 (O:VrsFactor) 8 * - (O:WeightFactor) * max (&gt;A:VELOCITY BODY Y, Feet per second)
                                } els{
                                    0 (&gt;O:VrsStall)
                            } els{
                                0 (&gt;O:VrsStall)
                        } els{
                            0 (&gt;O:VrsStall)

                        130 1 (O:WeightFactor) - 130 * + 15 (A:G FORCE, GForce) * - (&gt;O:RbsSpeedLimit)
                        (A:AIRSPEED INDICATED, Knots) (O:RbsSpeedLimit) &gt;
                            (A:AIRSPEED INDICATED, Knots) (O:RbsSpeedLimit) - 0.08 * 2 pow 150 * s0
                            (A:ROTATION ACCELERATION BODY X, Degrees per second squared) l0 -1 * + (&gt;A:ROTATION ACCELERATION BODY X, Degrees per second squared)
                            (A:ROTATION ACCELERATION BODY Z, Degrees per second squared) l0 2 * + (&gt;A:ROTATION ACCELERATION BODY Z, Degrees per second squared)