from configUtil import CreateRWAClass
import fswClasses
[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()
# Initialize all objects
self.InitAllFSWObjects(masterSim)
def SetLocalConfigData(self, masterSim):
# Set RW Config Data
rwClass = CreateRWAClass()
masterSim.TotalSim.CreateNewMessage("FSWProcess", "rwa_config_data", rwClass.getStructSize(), 2, "RWConstellation")
masterSim.TotalSim.WriteMessageData("rwa_config_data", rwClass.getStructSize(), 0, 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]
self.VehConfigData.outputPropsName = "adcs_config_data"
def SetRWConfigDataFSW(self):
self.rwConfigData.rwConstellationInMsgName = "rwa_config_data"
self.rwConfigData.vehConfigInMsgName = "adcs_config_data"
self.rwConfigData.rwParamsOutMsgName = "rwa_config_data_parsed"
def SetInertial3DPoint(self):
self.inertial3DData.sigma_R0N = [0.2, -0.3, 0.4]
self.inertial3DData.outputDataName = "att_ref_output_base"
def setAttTrackingError_base(self):
self.attTrackingData_base.inputRefName = "att_ref_output_base"
self.attTrackingData_base.inputNavName = "simple_att_nav_output"
self.attTrackingData_base.outputDataName = "nom_att_guid_out"
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.inputGuidName = "nom_att_guid_out"
self.MRP_FeedbackRWAData.vehConfigInMsgName = "adcs_config_data"
self.MRP_FeedbackRWAData.outputDataName = "controlTorqueRaw"
self.MRP_FeedbackRWAData.rwParamsInMsgName = "rwa_config_data_parsed"
# self.MRP_FeedbackRWAData.rwAvailInMsgName = "rw_availability"
self.MRP_FeedbackRWAData.inputRWSpeedsName = "reactionwheel_output_states"
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.inputVehControlName = "controlTorqueRaw"
self.rwMotorTorqueData.outputDataName = "reactionwheel_torques" # "reactionwheel_cmds_raw"
self.rwMotorTorqueData.rwParamsInMsgName = "rwa_config_data_parsed"
def InitAllFSWObjects(self, masterSim):
self.SetLocalConfigData(masterSim)
self.SetVehConfigData()
self.SetRWConfigDataFSW()
self.SetInertial3DPoint()
self.setAttTrackingError_base()
self.SetMRP_FeedbackRWA()
self.SetRWMotorTorque()