# **************************************************************************** # CUI # # The Advanced Framework for Simulation, Integration, and Modeling (AFSIM) # # The use, dissemination or disclosure of data in this file is subject to # limitation or restriction. See accompanying README and LICENSE for details. # **************************************************************************** // converted BRAWLER v7.5 alt3g.f and brlrol.f // Replicates the barrel roll 3,16,1,1 alternative behavior // DO A BARREL ROLL! - Peppy behavior alt3G11_barrel_roll script_debug_writes off script_variables WsfQuantumTaskerProcessor processor; WsfBrawlerPlatform brawlerPlatform; //**********************************************************************// //** debugging parameters **// //**********************************************************************// bool mDrawSteering = false; //**********************************************************************// //** alternative parameters **// //**********************************************************************// // Flag used to enable/disable this alternative // Takes the place of 'brlflg' bool mAlternative3G11Enabled = true; // Alternative ID int ilevel = 3; int kalt = 16; int icall = 1; int lcall = 1; // Barrel Roll Generation Parameters (formerly from rules file) // See Brawler Production Rule Handbook 2.1.2.4 Barrel Roll - brlrol double rolrat = 15; // Desired roll rate in degrees/sec double ptchrt = 30; // Desired pitch rate in degrees/sec double lgees = 0; // Desired longitudinal acceleration in units of gees. // Maneuver Alternative flight values Vec3 mA0 = Vec3(); Vec3 mAl0 = Vec3(); double mAccmod = 0.0; //**********************************************************************// //********* VARIABLES BELOW THIS LINE ARE NOT FOR USER EDITING *********// //**********************************************************************// double grav = 32.17405; // From pcon.fi end_script_variables on_init if (PROCESSOR.IsA_TypeOf("WSF_QUANTUM_TASKER_PROCESSOR")) { processor = (WsfQuantumTaskerProcessor)PROCESSOR; } brawlerPlatform = (WsfBrawlerPlatform)PLATFORM; end_on_init precondition #writeln_d(PLATFORM.Name(), " precondition behavior_alt3G11_barrel_roll, T=", TIME_NOW); ### Evaluate conditions that would prevent behavior alternative from running if (!PROCESSOR.IsA_TypeOf("WSF_QUANTUM_TASKER_PROCESSOR")) { writeln_d("not a quantum tasker!"); return Failure("behavior not attached to a WSF_QUANTUM_TASKER_PROCESSOR"); } if (!mAlternative3G11Enabled) { writeln_d("behavior not enabled!"); return Failure("behavior alternative not enabled"); } // ALL CONDITIONS PASS ### Generate Maneuver Alternative # brlrol.f #--NEXT LINE ALLOWS ALT3G TO GENERATE ALTERNATIVE #brlflg=.true. #if(lprnt) write(ioutp,1000) rolrat,ptchrt,lgees #--SET DESIRED RATES #w0(1)=rolrat*rad #w0(2)=ptchrt*rad #w0(3)=0.0 #al0 = grav*lgees #accmod = desacc #call xmit(5,althld(5),baralt) mA0.SetX(rolrat * Math.RAD_PER_DEG()); mA0.SetY(ptchrt * Math.RAD_PER_DEG()); mA0.SetZ(0.0); mAl0.SetX(grav * lgees); // Note al0 is actually a singe value, it is set to vector accreq(1) in command.f //mAccmod = ??; where do we get desacc? # alt3g.f #iactn = 1 #lenalt=lactn(iactn) #altdsc = indpk(3,16,1,1) #call xmit(5,baralt,althld(5)) <- copy predefined barrel roll maneuver into alternative storage ### Evaluate [Projected] Maneuver Alternative double score = brawlerPlatform.EvaluateRates(mA0, mAl0, ilevel, kalt, icall, lcall); return score; end_precondition execute ## what was evaluated should be actually performed now brawlerPlatform.FlyRates(mA0, mAl0); end_execute end_behavior