#
# 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.
#
from Basilisk import __path__
from Basilisk.topLevelModules import pyswice
from Basilisk.utilities.pyswice_spk_utilities import spkRead
bskPath = __path__[0]
[docs]
def planetPositionVelocity(planetName, time, ephemerisPath = '/supportData/EphemerisData/pck00010.tpc', observer = 'SSB', frame = 'J2000'):
"""
A convenience function to get planet position from spice
Parameters
----------
planetName : name of planet to get position of
planet name must be a valid SPICE celestial body string.
time : UTC time as string
ephemerisPath : a string path to ephemeris file if something other than the default is desired
observer : observer to get vectors relative to
Returns
-------
position and velocity vector of planet in Solar System Barycenter inertial frame as lists [m], [m/s]
"""
pyswice.furnsh_c(bskPath + '/supportData/EphemerisData/de430.bsp')
pyswice.furnsh_c(bskPath + '/supportData/EphemerisData/naif0012.tls') #load leap seconds
pyswice.furnsh_c(bskPath + ephemerisPath)
positionVelocity = spkRead(planetName, time, frame, observer)
position = positionVelocity[0:3] * 1000
velocity = positionVelocity[3:6] * 1000
pyswice.unload_c(bskPath + ephemerisPath)
return position, velocity # [m], [m/s]