def setUp(self): simDef = SimDefinition("MAPLEAF/Examples/Simulations/Canards.mapleaf", silent=True) simDef.setValue("SimControl.loggingLevel", "0") simDef.setValue("Rocket.ControlSystem.MomentController.gainTableFilePath", "MAPLEAF/Examples/TabulatedData/testPIDControlLaw.txt") simDef.setValue("Rocket.Sustainer.Canards.Actuators.deflectionTablePath","MAPLEAF/Examples/TabulatedData/testFinDeflectionLaw.txt") simDef.removeKey("Rocket.ControlSystem.FlightPlan.filePath") simRunner = Simulation(simDefinition=simDef, silent=True) self.rocket = simRunner.createRocket()
def test_pinkNoiseStdDev(self): simDef = SimDefinition("MAPLEAF/Examples/Simulations/Wind.mapleaf", silent=True) simDef.setValue("Environment.TurbulenceModel", "PinkNoise1D") simDef.setValue("Environment.PinkNoiseModel.velocityStdDeviation", "1") simDef.setValue("Environment.PinkNoiseModel.randomSeed1", "63583") simDef.setValue("Environment.turbulenceOffWhenUnderChute", "False") # Make sure turbulence intensity is not present since it overrides the given std deviation simDef.removeKey("Environment.PinkNoiseModel.turbulenceIntensity") envReader = SubDictReader("Environment", simDef) turbModel = turbulenceModelFactory(envReader) v1 = turbModel.getTurbVelocity(1, Vector(1, 0, 0), None) self.assertAlmostEqual(v1[0], 0.7946604314895807 / 2.26) v2 = turbModel.getTurbVelocity(1, Vector(1, 0, 0), None) self.assertAlmostEqual(v2[0], 0.5874110050866364 / 2.26)
def test_rocketCGCalculation(self): # Check actual CG Loc Calculation # Top stage CG: # # Nosecone: 1 kg @ 0m # Recovery: 5 kg @ -2m # BodyTube: 1 kg @ -0.762m # Mass: 50 kg @ -2.6m # Motor: 11.4885 kg @ 2.130434783 # Fins: 1 kg @ -4.011m # Total Weight = 69.4885 kg # Stage 1 CG: -2.4564359077698 expectedCG = Vector(0, 0, -1.731185736) # Remove overrides from rocket definition file simDef = SimDefinition("MAPLEAF/Examples/Simulations/Wind.mapleaf", silent=True) simDef.removeKey("Rocket.Sustainer.constCG") simDef.removeKey("Rocket.Sustainer.constMass") simDef.removeKey("Rocket.Sustainer.constMOI") rocketDictReader = SubDictReader("Rocket", simDef) rocket = Rocket(rocketDictReader, silent=True) rocketInertia = rocket.getInertia(0, rocket.rigidBody.state) assertVectorsAlmostEqual(self, rocketInertia.CG, expectedCG, n=4)
def test_readInitialParticlePositions(self): simDef = SimDefinition( "MAPLEAF/Examples/Simulations/InitializedOptimization.mapleaf", silent=True) opt = optimizationRunnerFactory(simDefinition=simDef, silent=True) # Check that initial position has been loaded bW1 = opt.initPositions[0][0] self.assertAlmostEqual(bW1, 0.1) # Check that the other initial position has been generated and is inside the expected bands bW2 = opt.initPositions[1][0] self.assertGreaterEqual(bW2, 0.01) self.assertLessEqual(bW2, 0.2) # Check that additional unexpected variables cause a crash extraVariableKey = 'Optimization.IndependentVariables.InitialParticlePositions.p1.extraVariable' with self.assertRaises(ValueError): simDef.setValue(extraVariableKey, '25') opt = optimizationRunnerFactory(simDefinition=simDef, silent=True) simDef.removeKey(extraVariableKey) # Check that an out of bounds value causes a crash with self.assertRaises(ValueError): simDef.setValue( 'Optimization.IndependentVariables.InitialParticlePositions.p1.bodyWeight', '0.21') opt = optimizationRunnerFactory(simDefinition=simDef, silent=True) # Check that specifying the position of too many particles causes a crash with self.assertRaises(ValueError): simDef.setValue( 'Optimization.IndependentVariables.InitialParticlePositions.p2.bodyWeight', '0.15') simDef.setValue( 'Optimization.IndependentVariables.InitialParticlePositions.p3.bodyWeight', '0.15') opt = optimizationRunnerFactory(simDefinition=simDef, silent=True)