opengnc.sensors package
Submodules
opengnc.sensors.altimeter module
Radar / Altimeter sensor model.
- class opengnc.sensors.altimeter.Altimeter(noise_std: float = 1.0, bias: float = 0.0, name: str = 'Altimeter')[source]
Bases:
SensorRadar / Altimeter sensor model.
Measures height above a reference surface (altitude).
- Parameters:
noise_std (float, optional) – Standard deviation of measurement noise (m). Default is 1.0.
bias (float, optional) – Constant bias in altitude (m). Default is 0.0.
name (str, optional) – Sensor name. Default is “Altimeter”.
- measure(true_altitude: float | None = None, *args: Any, **kwargs: Any) float[source]
Generate altitude measurement.
- Parameters:
true_altitude (float) – True altitude above surface (m).
**kwargs (dict) – Additional parameters.
- Returns:
Measured altitude (m). Guaranteed to be non-negative.
- Return type:
float
opengnc.sensors.camera module
Simple pinhole camera model.
- class opengnc.sensors.camera.Camera(focal_length: float = 1.0, resolution: tuple[int, int] = (1024, 1024), sensor_size: tuple[float, float] = (1.0, 1.0), noise_std: float = 0.0, name: str = 'Camera')[source]
Bases:
SensorSimple pinhole camera model.
Projects 3D points in the body frame onto a 2D image plane.
- Parameters:
focal_length (float, optional) – Focal length (m). Default is 1.0.
resolution (tuple[int, int], optional) – (width, height) in pixels. Default is (1024, 1024).
sensor_size (tuple[float, float], optional) – (width, height) in physical units (e.g., m). Default is (1.0, 1.0).
noise_std (float, optional) – Pixel noise standard deviation. Default is 0.0.
name (str, optional) – Sensor name. Default is “Camera”.
- measure(true_point_body: ndarray | None = None, *args: Any, **kwargs: Any) ndarray | None[source]
Project 3D point onto image plane.
- Parameters:
true_point_body (np.ndarray) – 3D point in the camera/body frame (m). Assumes Z is along the optical axis.
**kwargs (dict) – Additional parameters.
- Returns:
(u, v) pixel coordinates, or None if outside FOV or behind camera.
- Return type:
np.ndarray | None
opengnc.sensors.gnss_receiver module
GNSS Receiver sensor model.
- class opengnc.sensors.gnss_receiver.GNSSReceiver(pos_noise_std: float = 10.0, vel_noise_std: float = 0.1, name: str = 'GNSS', pos_bias: ndarray | None = None, vel_bias: ndarray | None = None, **kwargs: Any)[source]
Bases:
SensorGNSS Receiver sensor model.
Simulates position and velocity measurements in ECEF or ECI frame.
- Parameters:
pos_noise_std (float, optional) – Position measurement noise standard deviation (m). Default is 10.0.
vel_noise_std (float, optional) – Velocity measurement noise standard deviation (m/s). Default is 0.1.
name (str, optional) – Sensor name. Default is “GNSS”.
pos_bias (np.ndarray, optional) – Constant position bias (3,).
vel_bias (np.ndarray, optional) – Constant velocity bias (3,).
- measure(true_pos: ndarray | None = None, true_vel: ndarray | None = None, *args: Any, **kwargs: Any) tuple[ndarray, ndarray][source]
Generate GNSS position and velocity measurements.
Measurements are simulated by adding Gaussian noise and bias to the true values. The coordinate frame (ECEF/ECI) is determined by the input true_pos and true_vel.
- Parameters:
true_pos (np.ndarray) – True position vector (m).
true_vel (np.ndarray) – True velocity vector (m/s).
**kwargs (dict) – Additional parameters.
- Returns:
(meas_pos, meas_vel).
- Return type:
tuple[np.ndarray, np.ndarray]
opengnc.sensors.gyroscope module
Gyroscope sensor model.
- class opengnc.sensors.gyroscope.Gyroscope(noise_std: float = 0.0, bias_stability: float = 0.0, initial_bias: ndarray | None = None, dt: float = 0.1, misalignment: ndarray | None = None, scale_factor: float | ndarray = 1.0, name: str = 'Gyroscope')[source]
Bases:
SensorGyroscope sensor model. Measures angular velocity: w_meas = w_true + bias + noise Includes bias instability (random walk).
opengnc.sensors.horizon_sensor module
Earth / Horizon sensor model.
- class opengnc.sensors.horizon_sensor.HorizonSensor(noise_std: float = 0.01, bias: ndarray | None = None, name: str = 'HorizonSensor')[source]
Bases:
SensorEarth / Horizon sensor model.
Measures the nadir vector in the body frame.
- Parameters:
noise_std (float, optional) – Standard deviation of measurement noise (rad). Default is 0.01.
bias (np.ndarray, optional) – Constant bias in roll/pitch equivalent (rad). Default is [0, 0].
name (str, optional) – Sensor name. Default is “HorizonSensor”.
- measure(true_nadir_vec: ndarray | None = None, *args: Any, **kwargs: Any) ndarray[source]
Generate nadir vector measurement.
- Parameters:
true_nadir_vec (np.ndarray) – True nadir unit vector in body frame.
**kwargs (dict) – Additional parameters.
- Returns:
Measured nadir unit vector in body frame.
- Return type:
np.ndarray
opengnc.sensors.imu module
Inertial Measurement Unit (IMU) with Accelerometer and Gyroscope.
- class opengnc.sensors.imu.Accelerometer(noise_std: float = 0.0, bias: ndarray | None = None, scale_factor: float = 1.0, name: str = 'Accelerometer')[source]
Bases:
SensorAccelerometer sensor model.
Measures non-gravitational acceleration: a_meas = a_true + bias + noise.
- Parameters:
noise_std (float, optional) – Standard deviation of measurement noise (m/s^2). Default is 0.0.
bias (np.ndarray, optional) – Constant bias vector (m/s^2). Default is zero vector.
scale_factor (float, optional) – Scale factor error (1.0 = no error). Default is 1.0.
name (str, optional) – Sensor name. Default is “Accelerometer”.
- measure(true_accel: ndarray | None = None, *args: Any, **kwargs: Any) ndarray[source]
Generate acceleration measurement.
Equation: $mathbf{a}_{meas} = S mathbf{a}_{true} + mathbf{b} + mathbf{eta}$
- Parameters:
true_accel (np.ndarray) – True non-gravitational acceleration ($m/s^2$).
**kwargs (Any) – Additional parameters.
- Returns:
Measured acceleration vector ($m/s^2$).
- Return type:
np.ndarray
- class opengnc.sensors.imu.IMU(gyro_params: dict | None = None, accel_params: dict | None = None, name: str = 'IMU')[source]
Bases:
SensorInertial Measurement Unit (IMU) combining Gyroscope and Accelerometer.
- Parameters:
gyro_params (dict, optional) – Parameters for Gyroscope initialization.
accel_params (dict, optional) – Parameters for Accelerometer initialization.
name (str, optional) – Sensor name. Default is “IMU”.
- measure(true_omega: ndarray | None = None, true_accel: ndarray | None = None, *args: Any, **kwargs: Any) tuple[ndarray, ndarray][source]
Generate dual IMU measurements.
- Parameters:
true_omega (np.ndarray) – True angular velocity (rad/s).
true_accel (np.ndarray) – True non-gravitational acceleration ($m/s^2$).
**kwargs (Any) – Additional parameters.
- Returns:
(measured_omega, measured_accel).
- Return type:
tuple[np.ndarray, np.ndarray]
opengnc.sensors.lidar module
Lidar sensor model.
- class opengnc.sensors.lidar.Lidar(range_noise_std: float = 0.01, los_noise_std: float = 0.001, name: str = 'Lidar')[source]
Bases:
SensorLidar sensor model.
Measures range and line-of-sight (LOS) vector to a target point.
- Parameters:
range_noise_std (float, optional) – Range measurement noise standard deviation (m). Default is 0.01.
los_noise_std (float, optional) – Angular noise standard deviation for LOS vector (rad). Default is 0.001.
name (str, optional) – Sensor name. Default is “Lidar”.
- measure(true_relative_pos: ndarray | None = None, *args: Any, **kwargs: Any) tuple[float, ndarray][source]
Generate Lidar range and LOS measurement.
- Parameters:
true_relative_pos (np.ndarray) – True relative position vector in body frame (m).
**kwargs (dict) – Additional parameters.
- Returns:
(measured_range, measured_los_vec). measured_range : Range to target (m). measured_los_vec : Unit LOS vector in body frame.
- Return type:
tuple[float, np.ndarray]
opengnc.sensors.magnetometer module
Magnetometer sensor model.
- class opengnc.sensors.magnetometer.Magnetometer(noise_std: float = 0.0, bias: ndarray | None = None, misalignment: ndarray | None = None, scale_factor: float | ndarray = 1.0, name: str = 'Magnetometer')[source]
Bases:
SensorMagnetometer sensor model.
Measures magnetic field vector in body frame.
- Parameters:
noise_std (float, optional) – Standard deviation of measurement noise (Tesla). Default is 0.0.
bias (np.ndarray, optional) – Hard-iron bias vector (Tesla). Default is zero vector.
misalignment (np.ndarray, optional) – 3x3 soft-iron / misalignment matrix. Default is None.
scale_factor (float | np.ndarray, optional) – Scale factor error. Default is 1.0.
name (str, optional) – Sensor name. Default is “Magnetometer”.
- measure(true_mag_vec_body: ndarray | None = None, *args: Any, **kwargs: Any) ndarray[source]
Generate magnetic field measurement.
- Parameters:
true_mag_vec_body (np.ndarray) – True magnetic field vector in body frame (Tesla).
**kwargs (dict) – Additional parameters.
- Returns:
Measured magnetic field vector (Tesla).
- Return type:
np.ndarray
opengnc.sensors.sensor module
Abstract base class for all sensors.
- class opengnc.sensors.sensor.Sensor(name: str = 'Sensor')[source]
Bases:
ABCAbstract Base Class for all sensors.
- Parameters:
name (str, optional) – Sensor name. Default “Sensor”.
- add_gaussian_noise(value: ndarray | float, std_dev: float) ndarray | float[source]
Helper to add zero-mean Gaussian noise.
- Parameters:
value (np.ndarray | float) – Nominal value.
std_dev (float) – Standard deviation of noise.
- Returns:
Noisy value.
- Return type:
np.ndarray | float
- apply_calibration(value: ndarray | float, misalignment: ndarray | None = None, scale_factor: ndarray | float = 1.0, bias: ndarray | float | None = None) ndarray | float[source]
Apply calibration residuals: val_cal = (I + M) * S * val_true + b.
- Parameters:
value (np.ndarray | float) – True value to be calibrated.
misalignment (np.ndarray, optional) – Skew/misalignment matrix (3x3 for vectors).
scale_factor (np.ndarray | float, optional) – Scale factor error (scalar or vector). Default is 1.0.
bias (np.ndarray | float, optional) – Constant bias vector or scalar.
- Returns:
Calibrated value.
- Return type:
np.ndarray | float
- apply_faults(value: ndarray | float) ndarray | float[source]
Inject faults into the measurement.
- Parameters:
value (np.ndarray | float) – Clean measurement value.
- Returns:
Faulted measurement value.
- Return type:
np.ndarray | float
- apply_fogm_noise(current_val: ndarray | float, sigma: float, tau: float, dt: float) ndarray | float[source]
Apply First-Order Gauss-Markov (FOGM) noise.
x[k+1] = exp(-dt/tau) * x[k] + sigma * sqrt(1 - exp(-2*dt/tau)) * w[k]
- Parameters:
current_val (np.ndarray | float) – Current noise state value.
sigma (float) – Steady-state standard deviation.
tau (float) – Correlation time constant (s).
dt (float) – Time step (s).
- Returns:
Updated noise state.
- Return type:
np.ndarray | float
opengnc.sensors.star_catalog module
Utility for managing and searching star catalogs.
- class opengnc.sensors.star_catalog.StarCatalog(catalog_path: str | None = None)[source]
Bases:
objectUtility for managing and searching star catalogs (e.g., Hipparcos).
- get_stars_in_fov(boresight: ndarray, fov_deg: float, min_mag: float | None = None) list[_StarEntry][source]
Filters stars within a given Field of View (FOV).
- Parameters:
boresight (np.ndarray) – Unit vector of the camera boresight in J2000.
fov_deg (float) – Full Field of View in degrees.
min_mag (float) – Minimum magnitude (brightness threshold).
- Returns:
list
- Return type:
Stars within the FOV.
opengnc.sensors.star_tracker module
Star Tracker sensor model.
- class opengnc.sensors.star_tracker.StarTracker(noise_std: float = 0.0, bias: ndarray | None = None, name: str = 'StarTracker')[source]
Bases:
SensorStar Tracker Attitude Sensor.
Measures the attitude quaternion [x, y, z, w].
- Parameters:
noise_std (float, optional) – Standard deviation of noise (rad). Default 0.0.
bias (np.ndarray | None, optional) – Constant bias rotation vector (rad).
name (str, optional) – Sensor name. Default “StarTracker”.
- measure(true_quat: ndarray | None = None, *args: Any, **kwargs: Any) ndarray[source]
Simulate attitude measurement with error quaternion.
- Parameters:
true_quat (np.ndarray) – True attitude quaternion [x, y, z, w].
**kwargs (Any) – Additional parameters.
- Returns:
Measured quaternion [x, y, z, w].
- Return type:
np.ndarray
opengnc.sensors.sun_sensor module
Sun Sensor model.
- class opengnc.sensors.sun_sensor.SunSensor(noise_std: float = 0.0, bias: ndarray | None = None, misalignment: ndarray | None = None, scale_factor: float | ndarray = 1.0, name: str = 'SunSensor')[source]
Bases:
SensorSun Sensor model.
Measures the sun vector in the body frame.
- Parameters:
noise_std (float, optional) – Standard deviation of noise (rad or unitless depending on vector norm). Default is 0.0.
bias (np.ndarray, optional) – Bias vector to add. Default is zero vector.
misalignment (np.ndarray, optional) – 3x3 misalignment matrix. Default is None.
scale_factor (float | np.ndarray, optional) – Scale factor error. Default is 1.0.
name (str, optional) – Sensor name. Default is “SunSensor”.
- measure(true_sun_vec_body: ndarray | None = None, *args: Any, **kwargs: Any) ndarray[source]
Generate sun vector measurement.
- Parameters:
true_sun_vec_body (np.ndarray) – True sun vector in body frame.
**kwargs (dict) – Additional parameters.
- Returns:
Measured (and normalized) sun vector in body frame.
- Return type:
np.ndarray
opengnc.sensors.sun_sensor_array module
Coarse Sun Sensor Array model.
- class opengnc.sensors.sun_sensor_array.CoarseSunSensorArray(boresights: list[ndarray] | None = None, i_max: float = 1.0, noise_std: float = 0.01, name: str = 'CSSArray')[source]
Bases:
SensorArray of Coarse Sun Sensors (CSS).
Each CSS measures the cosine of the angle between the sun vector and its boresight. $I = I_{max} cos(theta) = I_{max} (S cdot N)$
- Parameters:
boresights (list[np.ndarray], optional) – Unit vectors representing the boresight direction of each CSS in the body frame. Default is 6 faces of a cube.
i_max (float, optional) – Maximum current/output when sun is aligned with boresight. Default is 1.0.
noise_std (float, optional) – Standard deviation of measurement noise. Default is 0.01.
name (str, optional) – Sensor name. Default is “CSSArray”.
- measure(true_sun_vec: ndarray | None = None, *args: Any, **kwargs: Any) ndarray[source]
Generate measurements from each CSS in the array.
- Parameters:
true_sun_vec (np.ndarray) – True sun unit vector in body frame.
**kwargs (dict) – Additional parameters.
- Returns:
Array of measurements (typically current or voltage) from each CSS.
- Return type:
np.ndarray