private void AdjustThrust() { double calculatedThrottle; //check to see lander is at PrescribedIgnitionAltitude if (PrescribedIgnitionAltitude >= altitude) { calculatedThrottle = guidanceTrajectory.calcThrottle(altitude, velocity); if (calculatedThrottle > 0) { AxialAlpha.SetThrottle(calculatedThrottle); AxialBeta.SetThrottle(calculatedThrottle); AxialCharlie.SetThrottle(calculatedThrottle); } else { AxialAlpha.SetThrottle(0); AxialBeta.SetThrottle(0); AxialCharlie.SetThrottle(0); } } }//end IgniteAxialThrusters()
/// <summary> /// The testing method for the Trajectory Model /// </summary> /// <returns>Returns success or failure status values based on tests</returns> public bool SelfTest() { /* For these test cases we test 15 different test cases looking for expected, manually calculated outputs with a known scenario * Scenario - * Gravity = 8 m/s^2 * Initial Speed = 8 m/s * Parachute Release Height = 5000m * Drop Height = 5m * Target Descent Velocity Large = 100 m/s * Target Descent Velocity Small = 5 m/s * Target Descent Velocity Altitude = 500m * Thruster Thrust = 24m/s^2 * * Test Cases (form: altitude, descent velocity) - NOTE: 0.33333333333333331 is used for 1/3 throttle calculation due to under the hood math calculations and comparisons in c# * 10000m, 1000m/s = 0 throttle * 10000m, 100m/s = 0 throttle; * 10000m, 0m/s = 0 throttle * 4999m, 500m/s = 1 throttle; * 4999m, 100m/s = 0.33333333333333331 throttle; * 4999m, 0m/s = 0 throttle; * 501m, 500m/s = 1 throttle; * 501m, 100m/s = 0.33333333333333331 throttle; * 501m, 0m/2 = 0 throttle; * 250m, 75m/s = 1 throttle; * 250m, 5m/s = 0.33333333333333331 throttle; * 250m, 0m/s = .125 throttle; * 4m, 100m/s = 0 throttle; * 4m, 5m/s = 0 throttle; * 4m, 0m/s = 0 throttle; */ bool returnVal = true; TrajectoryModel testTrajectoryModel = new TrajectoryModel(24, 8, 8, 5000, 5, 100, 5, 500); if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(10000, 1000) == 0); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(10000, 100) == 0); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(10000, 0) == 0); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(4999, 500) == 1); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(4999, 100) == 0.33333333333333331); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(4999, 0) == 0); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(501, 500) == 1); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(501, 100) == 0.33333333333333331); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(501, 0) == 0); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(250, 75) == 1); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(250, 5) == 0.33333333333333331); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(250, 0) == .125); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(4, 100) == 0); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(4, 5) == 0); } if (returnVal == true) { returnVal = (testTrajectoryModel.calcThrottle(4, 0) == 0); } return(returnVal); }