2024-05-22 23:47:02 +02:00

42 lines
1.1 KiB
Python

import math
import numpy as np
from typing import Any, List
from numpy.linalg import norm
from numpy.typing import ArrayLike
from pandas import NA
from spatz.dataset import ArrayLike, Dataset
from spatz.logger import ArrayLike, Logger
from spatz.sensors import Sensor
from spatz.transforms import Transform
# WG84 googlen (world model GPS)
class GPS(Sensor):
def __init__(self, dataset: Dataset, logger: Logger, transforms: List[Transform] = []):
"""GPS Module which provides the following information:
- Longitude (in °)
- Latitiude (in °)
- Altitude (in m)
"""
super().__init__(dataset, logger, transforms)
def _get_data(self) -> ArrayLike:
vel = self._dataset.get_total_velocity()
# TODO: At which speed do we assume that GPS becomes unreliable?
if vel / self._dataset.get_speed_of_sound() > 1:
return np.array([0, 0, 0])
x = self._dataset.fetch_values(['latitude', 'longitude', 'altitude'])
x = self._sensor_specific_effects(x)
# Convert to degrees.
x *= 180 / math.pi
return x