예제 #1
0
        /// <summary>Flight Computer constructor.</summary>
        /// <param name="s">A signal processor (most probably a <see cref="ModuleSPU"/> instance.)</param>
        public FlightComputer(ISignalProcessor s)
        {
            SignalProcessor  = s;
            Vessel           = s.Vessel;
            SanctionedPilots = new List <Action <FlightCtrlState> >();
            LastTarget       = TargetCommand.WithTarget(null);

            var attitude = AttitudeCommand.Off();

            _activeCommands[attitude.Priority] = attitude;

            //Use http://www.ni.com/white-paper/3782/en/ to fine-tune
            PIDController = new PIDController(PIDKp, PIDKi, PIDKd, 1.0, -1.0, true);
            PIDController.SetVessel(Vessel);

            GameEvents.onVesselChange.Add(OnVesselChange);
            GameEvents.onVesselSwitching.Add(OnVesselSwitching);
            GameEvents.onGameSceneSwitchRequested.Add(OnSceneSwitchRequested);

            RoverComputer = new RoverComputer(this, RoverPIDKp, RoverPIDKi, RoverPIDKd);
            RoverComputer.SetVessel(Vessel);

            // Add RT listeners from KSP Autopilot
            StockAutopilotCommand.UIreference = GameObject.FindObjectOfType <VesselAutopilotUI>();
            for (var index = 0; index < StockAutopilotCommand.UIreference.modeButtons.Length; index++)
            {
                var buttonIndex = index; // prevent compiler optimisation from assigning static final index value
                StockAutopilotCommand.UIreference.modeButtons[index].onClick.AddListener(delegate { StockAutopilotCommand.AutopilotButtonClick(buttonIndex, this); });
                // bad idea to use RemoveAllListeners() since no easy way to re-add the original stock listener to onClick
            }
        }
예제 #2
0
        public RoverComputer(FlightComputer fc, double kp, double ki, double kd)
        {
            throttlePID = new PIDLoop(1, 0, 0);
            steerPID    = new PIDLoop(1, 0, 0);

            pidController = fc.PIDController; //don't think of putting second copy of PID here
            this.Kp       = kp;
            this.Ki       = ki;
            this.Kd       = kd;
        }