public static double[] defaultControllerGains(PIDList type) { switch (type) { case PIDList.HdgBank: return(PilotAssistant.defaultHdgBankGains); case PIDList.HdgYaw: return(PilotAssistant.defaultHdgYawGains); case PIDList.Aileron: return(PilotAssistant.defaultAileronGains); case PIDList.Rudder: return(PilotAssistant.defaultRudderGains); case PIDList.Altitude: return(PilotAssistant.defaultAltitudeGains); case PIDList.VertSpeed: return(PilotAssistant.defaultVSpeedGains); case PIDList.Elevator: return(PilotAssistant.defaultElevatorGains); case PIDList.Throttle: return(PilotAssistant.defaultThrottleGains); default: return(PilotAssistant.defaultAileronGains); } }
private void drawPIDvalues(PIDList controllerid, string inputName, string inputUnits, double inputValue, int displayPrecision, string outputName, string outputUnits, bool invertOutput = false, bool showTarget = true, bool doublesided = true) { PID_Controller controller = Utils.GetAsst(controllerid); controller.bShow = GUILayout.Toggle(controller.bShow, string.Format("{0}: {1}{2}", inputName, inputValue.ToString("N" + displayPrecision.ToString()), inputUnits), GeneralUI.toggleButton, GUILayout.Width(window.width - 50)); if (controller.bShow) { if (showTarget) { GUILayout.Label(string.Format("Target: ", inputName) + controller.SetPoint.ToString("N" + displayPrecision.ToString()) + inputUnits); } GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); controller.PGain = GeneralUI.labPlusNumBox(string.Format("Kp:", inputName), controller.PGain.ToString("G3"), 45); controller.IGain = GeneralUI.labPlusNumBox(string.Format("Ki:", inputName), controller.IGain.ToString("G3"), 45); controller.DGain = GeneralUI.labPlusNumBox(string.Format("Kd:", inputName), controller.DGain.ToString("G3"), 45); controller.Scalar = GeneralUI.labPlusNumBox(string.Format("Scalar:", inputName), controller.Scalar.ToString("G3"), 45); if (showPIDLimits) { GUILayout.EndVertical(); GUILayout.BeginVertical(); if (!invertOutput) { controller.OutMax = GeneralUI.labPlusNumBox(string.Format("Max {0}{1}:", outputName, outputUnits), controller.OutMax.ToString("G3")); if (doublesided) { controller.OutMin = GeneralUI.labPlusNumBox(string.Format("Min {0}{1}:", outputName, outputUnits), controller.OutMin.ToString("G3")); } else { controller.OutMin = -controller.OutMax; } controller.ClampLower = GeneralUI.labPlusNumBox("I Clamp Lower:", controller.ClampLower.ToString("G3")); controller.ClampUpper = GeneralUI.labPlusNumBox("I Clamp Upper:", controller.ClampUpper.ToString("G3")); } else { // used when response * -1 is used to get the correct output controller.OutMin = -1 * GeneralUI.labPlusNumBox(string.Format("Max {0}{1}:", outputName, outputUnits), (-controller.OutMin).ToString("G3")); if (doublesided) { controller.OutMax = -1 * GeneralUI.labPlusNumBox(string.Format("Min {0}{1}:", outputName, outputUnits), (-controller.OutMax).ToString("G3")); } else { controller.OutMax = -controller.OutMin; } controller.ClampUpper = -1 * GeneralUI.labPlusNumBox("I Clamp Lower:", (-controller.ClampUpper).ToString("G3")); controller.ClampLower = -1 * GeneralUI.labPlusNumBox("I Clamp Upper:", (-controller.ClampLower).ToString("G3")); } } GUILayout.EndVertical(); GUILayout.EndHorizontal(); } }
public static double[] controllerGains(ConfigNode node, PIDList type) { double[] gains = new double[8]; if (node == null) { return(defaultControllerGains(type)); } double.TryParse(node.GetValue(pGain), out gains[0]); double.TryParse(node.GetValue(iGain), out gains[1]); double.TryParse(node.GetValue(dGain), out gains[2]); double.TryParse(node.GetValue(min), out gains[3]); double.TryParse(node.GetValue(max), out gains[4]); double.TryParse(node.GetValue(iLower), out gains[5]); double.TryParse(node.GetValue(iUpper), out gains[6]); double.TryParse(node.GetValue(scalar), out gains[7]); return(gains); }
public static PID_Controller GetAsst(PIDList id) { return(PilotAssistant.controllers[(int)id]); }