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: Sensor

Radar / altimeter sensor model.

frame: str | None = 'local_vertical'
measure(true_altitude: float | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'altitude'
units: str | tuple[str, ...] = 'm'

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: Sensor

Simple pinhole camera model.

frame: str | None = 'image_plane'
measure(true_point_body: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'pixel_coordinates'
units: str | tuple[str, ...] = 'px'

opengnc.sensors.factory module

Sensor factory helpers for configuration-driven sensor suites.

opengnc.sensors.factory.build_sensor(sensor_type: str, params: dict[str, Any] | None = None) Sensor[source]

Instantiate a sensor from its registry name and parameter dictionary.

opengnc.sensors.factory.load_sensor_suite(config: str | Path | dict[str, Any]) list[Sensor][source]

Load a list of sensors from a config dictionary or JSON/YAML file.

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: Sensor

GNSS receiver sensor model.

frame: str | None = 'state_frame'
measure(true_pos: ndarray | None = None, true_vel: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_bias() ndarray | None[source]
measurement_noise_std() ndarray[source]
quantity = 'position_velocity'
units: str | tuple[str, ...] = ('m', 'm/s')

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: Sensor

Gyroscope sensor model.

frame: str | None = 'body'
measure(true_omega: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'angular_rate'
units: str | tuple[str, ...] = 'rad/s'

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: Sensor

Earth / horizon sensor model.

frame: str | None = 'body'
measure(true_nadir_vec: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_bias() ndarray | None[source]
quantity = 'nadir_vector'
units: str | tuple[str, ...] = 'unit_vector'

opengnc.sensors.imu module

Inertial Measurement Unit (IMU) with accelerometer and gyroscope channels.

class opengnc.sensors.imu.Accelerometer(noise_std: float = 0.0, bias: ndarray | None = None, scale_factor: float = 1.0, name: str = 'Accelerometer')[source]

Bases: Sensor

Accelerometer sensor model.

frame: str | None = 'body'
measure(true_accel: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'specific_force'
units: str | tuple[str, ...] = 'm/s^2'
class opengnc.sensors.imu.IMU(gyro_params: dict | None = None, accel_params: dict | None = None, name: str = 'IMU')[source]

Bases: Sensor

IMU combining gyroscope and accelerometer channels.

frame: str | None = 'body'
measure(true_omega: ndarray | None = None, true_accel: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_noise_std() ndarray[source]
quantity = 'imu'
units: str | tuple[str, ...] = ('rad/s', 'm/s^2')

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: Sensor

Lidar sensor model.

frame: str | None = 'body'
measure(true_relative_pos: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_noise_std() ndarray[source]
quantity = 'range_los'
units: str | tuple[str, ...] = ('m', 'unit_vector')

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: Sensor

Magnetometer sensor model.

frame: str | None = 'body'
measure(true_mag_vec_body: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'magnetic_field'
units: str | tuple[str, ...] = 'T'

opengnc.sensors.sensor module

Abstract sensor interfaces and standardized measurement containers.

class opengnc.sensors.sensor.Sensor(name: str = 'Sensor')[source]

Bases: ABC

Abstract base class for all sensors.

add_gaussian_noise(value: ndarray | float, std_dev: float) ndarray | float[source]
apply_calibration(value: ndarray | float, misalignment: ndarray | None = None, scale_factor: ndarray | float = 1.0, bias: ndarray | float | None = None) ndarray | float[source]
apply_faults(value: ndarray | float) ndarray | float[source]
apply_fogm_noise(current_val: ndarray | float, sigma: float, tau: float, dt: float) ndarray | float[source]
build_measurement(raw_value: Any, *, covariance: ndarray | None = None, metadata: dict[str, Any] | None = None, frame: str | None = None) SensorMeasurement[source]

Build a standardized measurement packet from a raw value.

fault_state: str | None
frame: str | None = None
abstractmethod measure(*args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_bias() ndarray | None[source]
measurement_covariance(value: Any) ndarray[source]
measurement_metadata(value: Any) dict[str, Any][source]
measurement_noise_std() ndarray[source]
noise_model() SensorNoiseModel[source]
noise_model_name = 'gaussian'
quantity = 'measurement'
stuck_value: ndarray | float | None
units: str | tuple[str, ...] = ''
class opengnc.sensors.sensor.SensorMeasurement(sensor_name: str, quantity: str, value: ~numpy.ndarray, units: str | tuple[str, ...], frame: str | None, covariance: ~numpy.ndarray, noise_model: ~opengnc.sensors.sensor.SensorNoiseModel, metadata: dict[str, ~typing.Any] = <factory>)[source]

Bases: object

Standardized measurement packet emitted by all sensors.

covariance: ndarray
frame: str | None
metadata: dict[str, Any]
noise_model: SensorNoiseModel
quantity: str
sensor_name: str
units: str | tuple[str, ...]
value: ndarray
class opengnc.sensors.sensor.SensorNoiseModel(model: str, std_dev: ndarray, bias: ndarray | None = None, correlation_time: float | None = None, metadata: dict[str, ~typing.Any]=<factory>)[source]

Bases: object

Describe a sensor’s stochastic error convention.

bias: ndarray | None = None
correlation_time: float | None = None
covariance() ndarray[source]

Return a diagonal covariance matrix derived from std_dev.

metadata: dict[str, Any]
model: str
std_dev: ndarray

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: object

Utility 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.

load_catalog(path: str) None[source]

Dummy implementation for catalog loading. In a real scenario, this would parse Hipparcos or similar data.

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: Sensor

Star tracker attitude sensor.

frame: str | None = 'body_to_inertial'
measure(true_quat: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_noise_std() ndarray[source]
quantity = 'attitude_quaternion'
units: str | tuple[str, ...] = 'quaternion'

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: Sensor

Sun sensor model.

frame: str | None = 'body'
measure(true_sun_vec_body: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'sun_vector'
units: str | tuple[str, ...] = 'unit_vector'

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: Sensor

Array of coarse sun sensors (CSS).

frame: str | None = 'body'
measure(true_sun_vec: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_noise_std() ndarray[source]
quantity = 'sun_intensity_array'
units: str | tuple[str, ...] = 'sensor_unit'

Module contents

class opengnc.sensors.Accelerometer(noise_std: float = 0.0, bias: ndarray | None = None, scale_factor: float = 1.0, name: str = 'Accelerometer')[source]

Bases: Sensor

Accelerometer sensor model.

frame: str | None = 'body'
measure(true_accel: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'specific_force'
units: str | tuple[str, ...] = 'm/s^2'
class opengnc.sensors.Altimeter(noise_std: float = 1.0, bias: float = 0.0, name: str = 'Altimeter')[source]

Bases: Sensor

Radar / altimeter sensor model.

frame: str | None = 'local_vertical'
measure(true_altitude: float | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'altitude'
units: str | tuple[str, ...] = 'm'
class opengnc.sensors.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: Sensor

Simple pinhole camera model.

frame: str | None = 'image_plane'
measure(true_point_body: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'pixel_coordinates'
units: str | tuple[str, ...] = 'px'
class opengnc.sensors.CoarseSunSensorArray(boresights: list[ndarray] | None = None, i_max: float = 1.0, noise_std: float = 0.01, name: str = 'CSSArray')[source]

Bases: Sensor

Array of coarse sun sensors (CSS).

frame: str | None = 'body'
measure(true_sun_vec: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_noise_std() ndarray[source]
quantity = 'sun_intensity_array'
units: str | tuple[str, ...] = 'sensor_unit'
class opengnc.sensors.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: Sensor

GNSS receiver sensor model.

frame: str | None = 'state_frame'
measure(true_pos: ndarray | None = None, true_vel: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_bias() ndarray | None[source]
measurement_noise_std() ndarray[source]
quantity = 'position_velocity'
units: str | tuple[str, ...] = ('m', 'm/s')
class opengnc.sensors.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: Sensor

Gyroscope sensor model.

frame: str | None = 'body'
measure(true_omega: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'angular_rate'
units: str | tuple[str, ...] = 'rad/s'
class opengnc.sensors.HorizonSensor(noise_std: float = 0.01, bias: ndarray | None = None, name: str = 'HorizonSensor')[source]

Bases: Sensor

Earth / horizon sensor model.

frame: str | None = 'body'
measure(true_nadir_vec: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_bias() ndarray | None[source]
quantity = 'nadir_vector'
units: str | tuple[str, ...] = 'unit_vector'
class opengnc.sensors.IMU(gyro_params: dict | None = None, accel_params: dict | None = None, name: str = 'IMU')[source]

Bases: Sensor

IMU combining gyroscope and accelerometer channels.

frame: str | None = 'body'
measure(true_omega: ndarray | None = None, true_accel: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_noise_std() ndarray[source]
quantity = 'imu'
units: str | tuple[str, ...] = ('rad/s', 'm/s^2')
class opengnc.sensors.Lidar(range_noise_std: float = 0.01, los_noise_std: float = 0.001, name: str = 'Lidar')[source]

Bases: Sensor

Lidar sensor model.

frame: str | None = 'body'
measure(true_relative_pos: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_noise_std() ndarray[source]
quantity = 'range_los'
units: str | tuple[str, ...] = ('m', 'unit_vector')
class opengnc.sensors.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: Sensor

Magnetometer sensor model.

frame: str | None = 'body'
measure(true_mag_vec_body: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'magnetic_field'
units: str | tuple[str, ...] = 'T'
class opengnc.sensors.Sensor(name: str = 'Sensor')[source]

Bases: ABC

Abstract base class for all sensors.

add_gaussian_noise(value: ndarray | float, std_dev: float) ndarray | float[source]
apply_calibration(value: ndarray | float, misalignment: ndarray | None = None, scale_factor: ndarray | float = 1.0, bias: ndarray | float | None = None) ndarray | float[source]
apply_faults(value: ndarray | float) ndarray | float[source]
apply_fogm_noise(current_val: ndarray | float, sigma: float, tau: float, dt: float) ndarray | float[source]
build_measurement(raw_value: Any, *, covariance: ndarray | None = None, metadata: dict[str, Any] | None = None, frame: str | None = None) SensorMeasurement[source]

Build a standardized measurement packet from a raw value.

fault_state: str | None
frame: str | None = None
abstractmethod measure(*args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_bias() ndarray | None[source]
measurement_covariance(value: Any) ndarray[source]
measurement_metadata(value: Any) dict[str, Any][source]
measurement_noise_std() ndarray[source]
noise_model() SensorNoiseModel[source]
noise_model_name = 'gaussian'
quantity = 'measurement'
stuck_value: ndarray | float | None
units: str | tuple[str, ...] = ''
class opengnc.sensors.SensorMeasurement(sensor_name: str, quantity: str, value: ~numpy.ndarray, units: str | tuple[str, ...], frame: str | None, covariance: ~numpy.ndarray, noise_model: ~opengnc.sensors.sensor.SensorNoiseModel, metadata: dict[str, ~typing.Any] = <factory>)[source]

Bases: object

Standardized measurement packet emitted by all sensors.

covariance: ndarray
frame: str | None
metadata: dict[str, Any]
noise_model: SensorNoiseModel
quantity: str
sensor_name: str
units: str | tuple[str, ...]
value: ndarray
class opengnc.sensors.SensorNoiseModel(model: str, std_dev: ndarray, bias: ndarray | None = None, correlation_time: float | None = None, metadata: dict[str, ~typing.Any]=<factory>)[source]

Bases: object

Describe a sensor’s stochastic error convention.

bias: ndarray | None = None
correlation_time: float | None = None
covariance() ndarray[source]

Return a diagonal covariance matrix derived from std_dev.

metadata: dict[str, Any]
model: str
std_dev: ndarray
class opengnc.sensors.StarTracker(noise_std: float = 0.0, bias: ndarray | None = None, name: str = 'StarTracker')[source]

Bases: Sensor

Star tracker attitude sensor.

frame: str | None = 'body_to_inertial'
measure(true_quat: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

measurement_noise_std() ndarray[source]
quantity = 'attitude_quaternion'
units: str | tuple[str, ...] = 'quaternion'
class opengnc.sensors.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: Sensor

Sun sensor model.

frame: str | None = 'body'
measure(true_sun_vec_body: ndarray | None = None, *args: Any, **kwargs: Any) SensorMeasurement[source]

Generate a standardized measurement packet.

quantity = 'sun_vector'
units: str | tuple[str, ...] = 'unit_vector'
opengnc.sensors.build_sensor(sensor_type: str, params: dict[str, Any] | None = None) Sensor[source]

Instantiate a sensor from its registry name and parameter dictionary.

opengnc.sensors.load_sensor_suite(config: str | Path | dict[str, Any]) list[Sensor][source]

Load a list of sensors from a config dictionary or JSON/YAML file.