Source code for test_rwConfigData

#
#   Unit Test Script
#   Module Name:        rwConfigData
#   Creation Date:      October 5, 2018
#

from Basilisk.utilities import SimulationBaseClass
from Basilisk.utilities import unitTestSupport  # general support file with common unit test functions
from Basilisk.utilities import macros
from Basilisk.fswAlgorithms.rwConfigData import rwConfigData
from Basilisk.fswAlgorithms.fswMessages import fswMessages

import numpy as np

[docs]def test_rwConfigData(): """Module Unit Test""" [testResults, testMessage] = rwConfigDataTestFunction() assert testResults < 1, testMessage
[docs]def rwConfigDataTestFunction(): """ Test the rwConfigData module """ testFailCount = 0 # zero unit test result counter testMessages = [] # create empty array to store test log messages unitTaskName = "unitTask" # arbitrary name (don't change) unitProcessName = "TestProcess" # arbitrary name (don't change) # Create a sim module as an empty container unitTestSim = SimulationBaseClass.SimBaseClass() # This is needed if multiple unit test scripts are run # This create a fresh and consistent simulation environment for each test run # Create test thread testProcessRate = macros.sec2nano(0.5) # update process rate update time testProc = unitTestSim.CreateNewProcess(unitProcessName) testProc.addTask(unitTestSim.CreateNewTask(unitTaskName, testProcessRate)) # Add a new task to the process # Construct the cssComm module moduleConfig = rwConfigData.rwConfigData_Config() # Create a config struct # Populate the config moduleConfig.rwParamsOutMsgName = "rwConfigParamsOutMsg" moduleConfig.vehConfigInMsgName = "vehConfigInMsg" moduleConfig.rwConstellationInMsgName = "rwConstellationInMsg" # Create the messages vehConfigFswMsg = fswMessages.VehicleConfigFswMsg() rwConstellationFswMsg = fswMessages.RWConstellationFswMsg() numRW = 3 rwConstellationFswMsg.numRW = 3 gsHat_initial = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) js_initial = np.array([0.08, 0.09, 0.07]) uMax_initial = np.array([0.2, 0.1, 0.3]) # Iterate over all of the reaction wheels, create a rwConfigElementFswMsg, and add them to the rwConstellationFswMsg rwConfigElementList = list() for rw in range(numRW): rwConfigElementMsg = fswMessages.RWConfigElementFswMsg() rwConfigElementMsg.gsHat_B = gsHat_initial[rw] # Spin axis unit vector of the wheel in structure # [1, 0, 0] rwConfigElementMsg.Js = js_initial[rw] # Spin axis inertia of wheel [kgm2] rwConfigElementMsg.uMax = uMax_initial[rw] # maximum RW motor torque [Nm] # Add this to the list rwConfigElementList.append(rwConfigElementMsg) # Set the array of the reaction wheels in RWConstellationFswMsg to the list created above rwConstellationFswMsg.reactionWheels = rwConfigElementList # Set these messages unitTestSupport.setMessage(unitTestSim.TotalSim, unitProcessName, moduleConfig.vehConfigInMsgName, vehConfigFswMsg) unitTestSupport.setMessage(unitTestSim.TotalSim, unitProcessName, moduleConfig.rwConstellationInMsgName, rwConstellationFswMsg) moduleWrap = unitTestSim.setModelDataWrap(moduleConfig) # This calls the algContain to setup the selfInit, crossInit, and update moduleWrap.ModelTag = "rwConfigData" # Add the module to the task unitTestSim.AddModelToTask(unitTaskName, moduleWrap, moduleConfig) # Log the output message unitTestSim.TotalSim.logThisMessage(moduleConfig.rwParamsOutMsgName, testProcessRate) # Initialize the simulation unitTestSim.InitializeSimulation() unitTestSim.ConfigureStopTime(testProcessRate) unitTestSim.ExecuteSimulation() # Get the output from this simulation JsListLog = unitTestSim.pullMessageLogData(moduleConfig.rwParamsOutMsgName+'.JsList', list(range(numRW))) uMaxLog = unitTestSim.pullMessageLogData(moduleConfig.rwParamsOutMsgName+'.uMax', list(range(numRW))) GsMatrix_B_Log = unitTestSim.pullMessageLogData(moduleConfig.rwParamsOutMsgName+'.GsMatrix_B', list(range(3*numRW))) accuracy = 1e-6 # At each timestep, make sure the vehicleConfig values haven't changed from the initial values testFailCount, testMessages = unitTestSupport.compareArrayND([js_initial], JsListLog, accuracy, "rwConfigData JsList", 3, testFailCount, testMessages) testFailCount, testMessages = unitTestSupport.compareArrayND([uMax_initial], uMaxLog, accuracy, "rwConfigData uMax", 3, testFailCount, testMessages) testFailCount, testMessages = unitTestSupport.compareArrayND([gsHat_initial.flatten()], GsMatrix_B_Log, accuracy, "rwConfigData GsMatrix_B", 3*numRW, testFailCount, testMessages) if testFailCount == 0: print("PASSED: " + moduleWrap.ModelTag) return [testFailCount, ''.join(testMessages)]
if __name__ == '__main__': test_rwConfigData()