Intelligent Flight Control System (IFCS) a realistically modeled control system that assists the pilot in operating a spacecraft within the Star Citizen flight simulation. The flight simulation itself is a 6 degree-of-freedom, rigid body Newtonian model. Within this simulation, ship motion is induced by its thrusters, with each individual thruster generating a limited amount of force at its mount point. Depending on the direction of a thruster and its mount point relative to the ship's center of mass, each thruster will generate both a force and torque on the ship. The sum of all such forces and torques will determine the ship's linear and rotational acceleration at any moment. Even under ideal conditions, such a complex system is difficult to control without assistance. In the real world, a pilot would rely on a control system to translate his or her input into the actual thruster activity that would deliver the requested control with both accuracy and stability.
- IFCS 1.0 was implemented in late 2013, prior to the release of Dogfighting Module 1.0. It included the full rigid body simulation, but did not include any feedforward control. All control was driven directly by the feedback control system. This version was active throughout SC 1.x into early SC 2.x.
- IFCS 2.0 was released during early SC 2.x. It was refactored primarily to deal with shortcomings in the feedback control system when supporting predictable control for AI and autopilot operations. At this point I introduced the feedforward component of the control system, using 3rd order control because of its combination of smoothness and predictability.
- IFCS 3.0 was released at Star Citizen Alpha 3.1.0. This refactor was necessary to deal with several changes and optimizations made to the Star Citizen engine for the 3.0 release. It introduced several new control subsystems, allowing the thrust contributions of these subsystems to be independently tracked and controlled. It also improved modularity by adding support for generic feedforward control algorithms, allowing us to easily switch between 2nd order, 3rd order, transient, spline, or any other desired motion profile. The primary motion control profile is restored to transient rather than 3rd order, matching what was used in IFCS 1.x. The physics impulse generation is split apart from the control system logic in order to allow for a better balance between optimization and stability.