Source code for test_planetHeading

#
#  ISC License
#
#  Copyright (c) 2016, Autonomous Vehicle Systems Lab, University of Colorado at 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 pytest
from Basilisk.architecture import messaging
from Basilisk.simulation import planetHeading
from Basilisk.utilities import SimulationBaseClass
from Basilisk.utilities import orbitalMotion as om


[docs] def test_planetHeading(show_plots=False, relTol=1e-8): """ **Test Description** Test that a planet heading is properly calculated from a spacecraft and planet position and spacecraft attitude. To test this, the earth is placed at the inertial origin. A spacecraft with inertial attitude is placed at 1AU in the z-direction. The heading is checked to be [0, 0, -1]. These values were chosen arbitrarily. They are checked to be accurate to within a relative tolerance of the input ``relTol``, 1e-8 by default. Args: relTol (float): positive, the relative tolerance to which the result is checked. **Variables Being Tested** This test checks that ``headingOut`` stores the pulled log of the module ``bodyHeadingOutMsg``. """ sim = SimulationBaseClass.SimBaseClass() proc = sim.CreateNewProcess("proc") task = sim.CreateNewTask("task", int(1e9)) proc.addTask(task) earthPositionMessage = messaging.SpicePlanetStateMsgPayload() earthPositionMessage.PositionVector = [0., 0., 0.] plMsg = messaging.SpicePlanetStateMsg().write(earthPositionMessage) scPositionMessage = messaging.SCStatesMsgPayload() scPositionMessage.r_BN_N = [0., 0., om.AU*1000] scMsg = messaging.SCStatesMsg().write(scPositionMessage) ph = planetHeading.PlanetHeading() ph.ModelTag = "planetHeading" sim.AddModelToTask(task.Name, ph) ph.planetPositionInMsg.subscribeTo(plMsg) ph.spacecraftStateInMsg.subscribeTo(scMsg) dataLog = ph.planetHeadingOutMsg.recorder() sim.AddModelToTask(task.Name, dataLog) sim.InitializeSimulation() sim.TotalSim.SingleStepProcesses() headingOut = dataLog.rHat_XB_B[-1] assert headingOut == pytest.approx([0., 0., -1.], rel=relTol)
if __name__ == "__main__": test_planetHeading()