Source code for RCAIDE.Library.Mission.Common.Update.planet_position
# RCAIDE/Library/Missions/Common/Update/planet_position.py
#
#
# Created: Jul 2023, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports
from RCAIDE.Framework.Core import Units
# package imports
import numpy as np
# ----------------------------------------------------------------------------------------------------------------------
# Update Planet Position
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def planet_position(segment):
""" Updates the location of the vehicle relative to the Planet throughout the mission
Assumptions:
This is valid for small movements and times as it does not account for the rotation of the Planet beneath the vehicle
Inputs:
segment.state.conditions:
freestream.velocity [meters/second]
freestream.altitude [meters]
frames.body.inertial_rotations [Radians]
segment.analyses.planet.mean_radius [meters]
segment.state.numerics.time.integrate [float]
Outputs:
segment.state.conditions:
frames.planet.latitude [Radians]
frames.planet.longitude [Radians]
Properties Used:
N/A
"""
# unpack
conditions = segment.state.conditions
# unpack orientations and velocities
V = conditions.freestream.velocity[:,0]
altitude = conditions.freestream.altitude[:,0]
theta = conditions.frames.body.inertial_rotations[:,1]
psi = segment.true_course
alpha = conditions.aerodynamics.angles.alpha[:,0]
I = segment.state.numerics.time.integrate
Re = segment.analyses.planet.mean_radius
# The flight path and radius
gamma = theta - alpha
R = altitude + Re
# Find the velocities and integrate the positions
lamdadot = (V/R)*np.cos(gamma)*np.cos(psi)
lamda = np.dot(I,lamdadot) / Units.deg # Latitude
mudot = (V/R)*np.cos(gamma)*np.sin(psi)/np.cos(lamda)
mu = np.dot(I,mudot) / Units.deg # Longitude
# Reshape the size of the vectorss
shape = np.shape(conditions.freestream.velocity)
mu = np.reshape(mu,shape)
lamda = np.reshape(lamda,shape)
phi = np.array([[np.cos(psi),-np.sin(psi),0],[np.sin(psi),np.cos(psi),0],[0,0,1]])
# Pack
lat = conditions.frames.planet.latitude[0,0]
lon = conditions.frames.planet.longitude[0,0]
conditions.frames.planet.latitude = lat + lamda
conditions.frames.planet.longitude = lon + mu
conditions.frames.planet.true_course = np.tile(phi[None,:,:],(len(V),1,1))
return