Source code for desktopFswModels

from configUtil import CreateRWAClass
import fswClasses
from Basilisk.architecture import messaging

[docs]class FSWModels(object): """ Class instantiating the FSW modules and initializing them """ def __init__(self, masterSim): # Create a sim module as an empty container self.simBasePath = masterSim.simBasePath # Instantiate C classes fsw = fswClasses.FSWClasses(masterSim) self.VehConfigData, self.VehConfigDataWrap = fsw.vehConfigDataClass() self.rwConfigData, self.rwConfigWrap = fsw.rwConfigDataClass() self.inertial3DData, self.inertial3DWrap = fsw.inertial3DClass() self.attTrackingData_base, self.attTrackingWrap_base = fsw.attTrackingError_baseClass() self.MRP_FeedbackRWAData, self.MRP_FeedbackRWAWrap = fsw.MRP_FeedbackRWAClass() self.rwMotorTorqueData, self.rwMotorTorqueWrap = fsw.rwMotorTorqueClass() sNavData = messaging.NavAttMsgPayload() self.sNavMsg = messaging.NavAttMsg().write(sNavData) rwSpeedData = messaging.RWSpeedMsgPayload() self.rwSpeedMsg = messaging.RWSpeedMsg().write(rwSpeedData) # Initialize all objects self.InitAllFSWObjects(masterSim) def SetLocalConfigData(self, masterSim): # Set RW Config Data rwClass = CreateRWAClass() self.fswRwConstMsg = messaging.RWConstellationMsg().write(rwClass) self.numRW = rwClass.numRW def SetVehConfigData(self): self.VehConfigData.ISCPntB_B = [700.0, 0.0, 0.0, 0.0, 700.0, 0.0, 0.0, 0.0, 800] # kg * m^2 self.VehConfigData.CoM_B = [0.0, 0.0, 1.0] def SetRWConfigDataFSW(self): self.rwConfigData.rwConstellationInMsg.subscribeTo(self.fswRwConstMsg) def SetInertial3DPoint(self): self.inertial3DData.sigma_R0N = [0.2, -0.3, 0.4] def setAttTrackingError_base(self): self.attTrackingData_base.attRefInMsg.subscribeTo(self.inertial3DData.attRefOutMsg) self.attTrackingData_base.attNavInMsg.subscribeTo(self.sNavMsg) self.attTrackingData_base.sigma_R0R = [0.0, 0.0, 1.0] def SetMRP_FeedbackRWA(self): self.MRP_FeedbackRWAData.K = 4.0#1. # rad/sec self.MRP_FeedbackRWAData.P = 30.0#3. # N*m*sec self.MRP_FeedbackRWAData.Ki = -1.0 # N*m - negative values turn off the integral feedback self.MRP_FeedbackRWAData.integralLimit = 0.0 # rad self.MRP_FeedbackRWAData.guidInMsg.subscribeTo(self.attTrackingData_base.attGuidOutMsg) self.MRP_FeedbackRWAData.vehConfigInMsg.subscribeTo(self.VehConfigData.vecConfigOutMsg) self.MRP_FeedbackRWAData.rwParamsInMsg.subscribeTo(self.rwConfigData.rwParamsOutMsg) self.MRP_FeedbackRWAData.rwSpeedsInMsg.subscribeTo(self.rwSpeedMsg) def SetRWMotorTorque(self): controlAxes_B = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] self.rwMotorTorqueData.controlAxes_B = controlAxes_B self.rwMotorTorqueData.vehControlInMsg.subscribeTo(self.MRP_FeedbackRWAData.cmdTorqueOutMsg) self.rwMotorTorqueData.rwParamsInMsg.subscribeTo(self.rwConfigData.rwParamsOutMsg) def InitAllFSWObjects(self, masterSim): self.SetLocalConfigData(masterSim) self.SetVehConfigData() self.SetRWConfigDataFSW() self.SetInertial3DPoint() self.setAttTrackingError_base() self.SetMRP_FeedbackRWA() self.SetRWMotorTorque()