# 3rd party / std lib imports
import pytest
from Basilisk.architecture import messaging
# Modules to test
from Basilisk.fswAlgorithms import hillStateConverter
# Utilities/macros
from Basilisk.utilities import SimulationBaseClass as sbc
from Basilisk.utilities import macros
#from Basilisk.simulation import simFswInterfaceMessages
[docs]
def test_hillStateConverter(show_plots):
"""
Tests the hillStateConverter module for the following:
1. Accepts both a hill and deputy message;
2. Correctly converts those messages into the hill frame.
"""
sim = sbc.SimBaseClass()
procName = 'process'
taskName = 'task'
proc = sim.CreateNewProcess(procName)
task = sim.CreateNewTask(taskName, macros.sec2nano(1.0))
proc.addTask(task)
# Set up two spacecraft position messages
chief_r = [7100,0,0]
chief_v = [0,7.000,0]
dep_r = [7101, 0, 0]
dep_v = [0,7.010,0]
chiefNavMsgData = messaging.NavTransMsgPayload()
chiefNavMsgData.r_BN_N = chief_r
chiefNavMsgData.v_BN_N = chief_v
chiefNavMsg = messaging.NavTransMsg().write(chiefNavMsgData)
depNavMsgData = messaging.NavTransMsgPayload()
depNavMsgData.r_BN_N = dep_r
depNavMsgData.v_BN_N = dep_v
depNavMsg = messaging.NavTransMsg().write(depNavMsgData)
# Set up the hillStateConverter
hillStateNav = hillStateConverter.hillStateConverter()
hillStateNav.ModelTag = "dep_hillStateNav"
hillStateNav.chiefStateInMsg.subscribeTo(chiefNavMsg)
hillStateNav.depStateInMsg.subscribeTo(depNavMsg)
hillRecorder = hillStateNav.hillStateOutMsg.recorder()
sim.AddModelToTask(taskName, hillStateNav)
sim.AddModelToTask(taskName, hillRecorder)
sim.ConfigureStopTime(macros.sec2nano(1.0))
sim.InitializeSimulation()
sim.ExecuteSimulation()
hill_positions = hillRecorder.r_DC_H
hill_velocities = hillRecorder.v_DC_H
ref_pos = [1,0,0]
ref_vel = [0,0.00901408,0]
# Test the position calculation:
for val1, val2 in zip(hill_positions[-1], ref_pos):
assert val1 == pytest.approx(val2)
for val1, val2 in zip(hill_velocities[-1], ref_vel):
assert val1 == pytest.approx(val2)
if __name__=="__main__":
test_hillStateConverter(False)