Source code for desktopFswSim

import sys, os
path = os.path.dirname(os.path.abspath(__file__))
sys.path.append(path + '/../')
from Basilisk.utilities import (SimulationBaseClass, macros)
from desktopFswModels import FSWModels
from fswPlotter import FSWPlotter


[docs]class DesktopFSW(SimulationBaseClass.SimBaseClass): """ Class defining the FSW scenario """ def __init__(self): SimulationBaseClass.SimBaseClass.__init__(self) # Create a sim module as an empty container self.modeRequest = 'None' self.fswProc = self.CreateNewProcess("FSWProcess", 100) self.fswModels = FSWModels(self) self.fsw_rate = int(5E8) self.populateFswTasks() self.create_FSW_events() self.fsw_plotter = None def populateFswTasks(self): self.fswProc.addTask(self.CreateNewTask("initOnlyTask", int(1E10)), 200000) self.AddModelToTask("initOnlyTask", self.fswModels.VehConfigDataWrap, self.fswModels.VehConfigData, 2) self.AddModelToTask("initOnlyTask", self.fswModels.rwConfigWrap, self.fswModels.rwConfigData, 1) self.fswProc.addTask(self.CreateNewTask("inertial3DPointTask", self.fsw_rate), 120) self.AddModelToTask("inertial3DPointTask", self.fswModels.inertial3DWrap, self.fswModels.inertial3DData, 20) self.AddModelToTask("inertial3DPointTask", self.fswModels.attTrackingWrap_base, self.fswModels.attTrackingData_base, 19) self.fswProc.addTask(self.CreateNewTask("feedbackControlTask", self.fsw_rate), 110) self.AddModelToTask("feedbackControlTask", self.fswModels.MRP_FeedbackRWAWrap, self.fswModels.MRP_FeedbackRWAData, 10) self.AddModelToTask("feedbackControlTask", self.fswModels.rwMotorTorqueWrap, self.fswModels.rwMotorTorqueData, 9) self.fswProc.disableAllTasks() def create_FSW_events(self): self.createNewEvent("initiateInertialPoint", self.fsw_rate, True, ["self.modeRequest == 'inertialPoint'"], ["self.fswProc.disableAllTasks()", "self.enableTask('inertial3DPointTask')", "self.enableTask('feedbackControlTask')", "self.setEventActivity('initiateInertialPoint', True)"]) def log_outputs(self): self.vcRec = self.fswModels.VehConfigData.vecConfigOutMsg.recorder() self.rwParamRec = self.fswModels.rwConfigData.rwParamsOutMsg.recorder() self.in3dRec = self.fswModels.inertial3DData.attRefOutMsg.recorder() self.attErrRec = self.fswModels.attTrackingData_base.attGuidOutMsg.recorder() self.cmdTorRec = self.fswModels.MRP_FeedbackRWAData.cmdTorqueOutMsg.recorder() self.rwMotRec = self.fswModels.rwMotorTorqueData.rwMotorTorqueOutMsg.recorder() self.AddModelToTask("inertial3DPointTask", self.vcRec) self.AddModelToTask("inertial3DPointTask", self.rwParamRec) self.AddModelToTask("inertial3DPointTask", self.in3dRec) self.AddModelToTask("inertial3DPointTask", self.attErrRec) self.AddModelToTask("inertial3DPointTask", self.cmdTorRec) self.AddModelToTask("inertial3DPointTask", self.rwMotRec) def pull_outputs(self, plots_path=None): self.fsw_plotter = FSWPlotter(plots_path=plots_path, add_titles=False, name="fsw") ISCPntB_B = self.vcRec.ISCPntB_B CoM_B = self.vcRec.CoM_B print("ISCPntB_B = ", ISCPntB_B) print("CoM_B = ", CoM_B) GsMatrix_B = self.rwParamRec.GsMatrix_B[:, range(3 * self.fswModels.numRW)] JsList = self.rwParamRec.JsList[:, range(self.fswModels.numRW)] uMax = self.rwParamRec.uMax[:, range(self.fswModels.numRW)] print("GsMatrix_B = ", GsMatrix_B) print("JsList = ", JsList) print("uMax = ", uMax) sigma_RN = self.in3dRec.sigma_RN omega_RN_N = self.in3dRec.omega_RN_N print("sigma_RN = ", sigma_RN) print("omega_RN_N = ", omega_RN_N) self.fsw_plotter.plot_ref_attitude(sigma_RN, omega_RN_N) sigma_BR = self.attErrRec.sigma_BR omega_BR_B = self.attErrRec.omega_BR_B print( "sigma_BR = ", sigma_BR) print( "omega_BR_B = ", omega_BR_B) self.fsw_plotter.plot_track_error(sigma_BR, omega_BR_B) Lr = self.cmdTorRec.torqueRequestBody u_wheels = self.rwMotRec.motorTorque print( "Lr = ", Lr) print( "u_wheels = ", u_wheels) self.fsw_plotter.plot_rw_control(Lr, u_wheels) self.fsw_plotter.show_plots()
if __name__ == "__main__": theSim = DesktopFSW() theSim.InitializeSimulation() theSim.modeRequest = "inertialPoint" theSim.log_outputs() sim_time = macros.min2nano(4.0) theSim.ConfigureStopTime(int(sim_time)) theSim.ExecuteSimulation() theSim.pull_outputs()