Unified groundstation offset

TX Gain and Pathloss sensors now recieve the groundstation offset the same way. Allso added constants file for ease of use
This commit is contained in:
Vincent Bareiss
2024-04-19 11:25:20 +02:00
parent 42b6bbdd16
commit 33e04d19b3
5 changed files with 65487 additions and 66250 deletions

View File

@@ -0,0 +1,6 @@
import numpy as np
STAHR_GS_OFFSET = np.array([-1810,-1500,100]) #Radar hill is approx 1.81km west. 1.5km south, 100higher
STAHR_LORA_FREQ = 2.45e9
STAHR_BEACON_FREQ = 144.8e6
STAHR_TELEMEGA_FREQ = 433e6

View File

@@ -125,9 +125,10 @@ Returns the gain in dBi per timestep.
class AntennaTxGain(Sensor):
def __init__(self, dataset: Dataset, logger: Logger, transforms: List[Transform] = [], gain_pattern_path = "data/gain_pattern/farfield.txt", step_size=1):
def __init__(self, dataset: Dataset, logger: Logger, transforms: List[Transform] = [], gain_pattern_path = "data/gain_pattern/farfield.txt", step_size=1, rx_antenna_offset: ArrayLike = np.array([0,0,0])):
super().__init__(dataset, logger, transforms)
self._pattern = GainPattern(gain_pattern_path,step_size)
self._rx_antenna_offset = rx_antenna_offset
def _get_data(self) -> ArrayLike | float:
magic_matrix = np.array([
@@ -139,8 +140,7 @@ class AntennaTxGain(Sensor):
# Get current position of rocket in FL Frame (Launcher Frame).
pos_fl = self._dataset.fetch_values(['x', 'y', 'z']) #X,Y,Z is in FL (Launcher frame) -> Z is up, X is east
gs_offset_fl = np.array([-1810,-1500,100]) #Radar hill is approx 1.81km west. 1.5km south, 100higher
rocket_to_gs_fl = pos_fl-gs_offset_fl
rocket_to_gs_fl = pos_fl-self._rx_antenna_offset
rocket_to_gs_fl_n = rocket_to_gs_fl/np.linalg.norm(rocket_to_gs_fl)
# Rocket in body frame is simply [1,0,0]^T by definition
@@ -163,15 +163,15 @@ class AntennaTxGain(Sensor):
#return phi
#Get Theta cut for this angle
angles, gains = self._pattern.get_theta_cut(np.round(theta))
#angles, gains = self._pattern.get_theta_cut(np.round(theta))
min_gain = np.min(gains)
#min_gain = np.min(gains)
#min_ix = np.argmin(gains)
#min_angle = angles[min_ix]
#self._log("works_case_angle",min_angle)
#min_gain = self._pattern.get_gain(45,theta)
min_gain = self._pattern.get_gain(45,theta)
# Fetch gain in this direction
return min_gain