mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-04-23 00:26:36 +00:00
initial structure implemented
docs -> _docs
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
from .gps_point import GPSPoint
|
||||
from .camera_parameters import CameraParameters
|
||||
from .pose import Pose
|
||||
from .polygon import Polygon
|
||||
from .validation_result import ValidationResult
|
||||
|
||||
__all__ = [
|
||||
"GPSPoint",
|
||||
"CameraParameters",
|
||||
"Pose",
|
||||
"Polygon",
|
||||
"ValidationResult",
|
||||
]
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class CameraParameters(BaseModel):
|
||||
focal_length: float
|
||||
sensor_width: float
|
||||
sensor_height: float
|
||||
resolution_width: int
|
||||
resolution_height: int
|
||||
principal_point: tuple[float, float] | None = None
|
||||
distortion_coefficients: list[float] | None = None
|
||||
|
||||
def get_principal_point(self) -> tuple[float, float]:
|
||||
if self.principal_point:
|
||||
return self.principal_point
|
||||
return (self.resolution_width / 2.0, self.resolution_height / 2.0)
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
from pydantic import BaseModel, field_validator
|
||||
|
||||
|
||||
class GPSPoint(BaseModel):
|
||||
lat: float
|
||||
lon: float
|
||||
|
||||
@field_validator("lat")
|
||||
@classmethod
|
||||
def validate_lat(cls, v: float) -> float:
|
||||
if not -90 <= v <= 90:
|
||||
raise ValueError("Latitude must be between -90 and 90")
|
||||
return v
|
||||
|
||||
@field_validator("lon")
|
||||
@classmethod
|
||||
def validate_lon(cls, v: float) -> float:
|
||||
if not -180 <= v <= 180:
|
||||
raise ValueError("Longitude must be between -180 and 180")
|
||||
return v
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
from pydantic import BaseModel
|
||||
from .gps_point import GPSPoint
|
||||
|
||||
|
||||
class Polygon(BaseModel):
|
||||
north_west: GPSPoint
|
||||
south_east: GPSPoint
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
import numpy as np
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
|
||||
class Pose(BaseModel):
|
||||
model_config = ConfigDict(arbitrary_types_allowed=True)
|
||||
|
||||
frame_id: int
|
||||
position: np.ndarray
|
||||
orientation: np.ndarray
|
||||
timestamp: datetime
|
||||
covariance: Optional[np.ndarray] = None
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class ValidationResult(BaseModel):
|
||||
valid: bool
|
||||
errors: list[str] = []
|
||||
|
||||
Reference in New Issue
Block a user