Source code for test_attRefCorrection

# 
#  ISC License
# 
#  Copyright (c) 2021, Autonomous Vehicle Systems Lab, University of Colorado Boulder
# 
#  Permission to use, copy, modify, and/or distribute this software for any
#  purpose with or without fee is hereby granted, provided that the above
#  copyright notice and this permission notice appear in all copies.
# 
#  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
#  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
#  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
#  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
#  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
#  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# 
# 

import math

import pytest
from Basilisk.architecture import messaging
from Basilisk.fswAlgorithms import attRefCorrection
from Basilisk.utilities import SimulationBaseClass
from Basilisk.utilities import macros
from Basilisk.utilities import unitTestSupport


[docs]@pytest.mark.parametrize("accuracy", [1e-12]) def test_attRefCorrection(show_plots, accuracy): r""" **Validation Test Description** Checks the output of the module that the correct orientation adjustment is applied **Test Parameters** Args: accuracy (float): absolute accuracy value used in the validation tests **Description of Variables Being Tested** The ``sigma_RN`` variable of the output message is tested """ [testResults, testMessage] = attRefCorrectionTestFunction(show_plots, accuracy) assert testResults < 1, testMessage
[docs]def attRefCorrectionTestFunction(show_plots, accuracy): """Test method""" testFailCount = 0 testMessages = [] unitTaskName = "unitTask" unitProcessName = "TestProcess" unitTestSim = SimulationBaseClass.SimBaseClass() testProcessRate = macros.sec2nano(0.5) testProc = unitTestSim.CreateNewProcess(unitProcessName) testProc.addTask(unitTestSim.CreateNewTask(unitTaskName, testProcessRate)) # setup module to be tested module = attRefCorrection.attRefCorrection() module.ModelTag = "attRefCorrectionTag" unitTestSim.AddModelToTask(unitTaskName, module) module.sigma_BcB = [math.tan(math.pi/4), 0.0, 0.0] # Configure blank module input messages attRefInMsgData = messaging.AttRefMsgPayload() attRefInMsgData.sigma_RN = [math.tan(math.pi/8), 0.0, 0.0] attRefInMsg = messaging.AttRefMsg().write(attRefInMsgData) # subscribe input messages to module module.attRefInMsg.subscribeTo(attRefInMsg) # setup output message recorder objects attRefOutMsgRec = module.attRefOutMsg.recorder() unitTestSim.AddModelToTask(unitTaskName, attRefOutMsgRec) unitTestSim.InitializeSimulation() unitTestSim.ConfigureStopTime(macros.sec2nano(1.0)) unitTestSim.ExecuteSimulation() # pull module data and make sure it is correct trueVector = [ [-math.tan(math.pi / 8), 0.0, 0.0], [-math.tan(math.pi / 8), 0.0, 0.0], [-math.tan(math.pi / 8), 0.0, 0.0] ] # compare the module results to the truth values for i in range(0, len(trueVector)): # check a vector values if not unitTestSupport.isArrayEqual(attRefOutMsgRec.sigma_RN[i], trueVector[i], 3, accuracy): testFailCount += 1 testMessages.append("FAILED: " + module.ModelTag + " Module failed sigma_RN unit test at t=" + str(attRefOutMsgRec.times()[i] * macros.NANO2SEC) + "sec\n") if testFailCount == 0: print("PASSED: " + module.ModelTag) else: print(testMessages) return [testFailCount, "".join(testMessages)]
if __name__ == "__main__": test_attRefCorrection(False, 1e-12)