Skip to content

Class inertialsim::sensors::INS

ClassList > inertialsim > sensors > INS

INS sensor simulation.More...

  • #include <ins.h>

Public Functions

Type Name
INS (const INSModel & model, const INSSpecification & specification, std::optional< uint64_t > seed=0, INSSimulationMode mode=INSSimulationMode::BATCH)
Construct an INS .
std::optional< INSData > Initialize (const std::optional< geodesy::GlobalPose > & pose=std::nullopt, const std::optional< geometry::Vector > & angular_rate=std::nullopt, const std::optional< geometry::Vector > & specific_force=std::nullopt)
Initialize the INS with a GlobalPose.
void Reset (const std::optional< geometry::Rotation > & attitude=std::nullopt, const std::optional< geodesy::Coordinates > & position=std::nullopt, const std::optional< geometry::Vector > & velocity=std::nullopt)
Reset the INS state.
INSData Simulate (const geometry::Vector & angular_rate, const geometry::Vector & specific_force)
Simulate INS measurements fromIMU inputs.
INSData Simulate (const Measurement & angular_rate, const Measurement & specific_force)
Simulate INS measurements fromMeasurement inputs.
bool initialized () const
Check if the INS is initialized.
INSSimulationMode mode () const
Get the simulation mode.
const INSModel & model () const
Get the INS model.
const std::mt19937_64 & rng () const
Get the random number generator.
const INSSpecification & specification () const
Get the INS specification.
const INSState & state () const
Get the simulation state.

Protected Attributes

Type Name
Eigen::Vector3d earth_rate_
std::optional< geodesy::GeodeticDatum > geodetic_datum_
std::shared_ptr< geodesy::Gravity > gravity_model_
WhiteNoiseBuffer gravity_noise_
bool initialized_ = false
INSSimulationMode mode_
INSModel model_
InternalPose pose_
std::mt19937_64 rng_
INSSpecification specification_
INSState state_
WhiteNoiseBuffer time_jitter_
std::optional< geodesy::TopocentricDatum > topocentric_datum_

Protected Functions

Type Name
std::pair< Vector3D, Vector3D > ApparentForces (const Vector3D & p, const Vector3D & v)
Get Coriolis and centripetal forces.
geodesy::Coordinates Coordinates (const Vector3D & p, const Timestamps & time)
Convert Coordinates from internal position.
Vector3D Gravity (const Vector3D & p, const Timestamps & time)
Get gravity at a position.
std::tuple< Vector3D, Vector3D, Vector3D > IncrementalPose (const Vector3D & angular_rate, const Vector3D & specific_force, const Timestamps & time)
Compute incremental pose updates.
InternalPose InitialConditions (const geodesy::GlobalPose & pose, const std::optional< geometry::Vector > & angular_rate, const std::optional< geometry::Vector > & specific_force)
Set up initial conditions from GlobalPose.
std::tuple< RotationMatrixArray, Vector3D, Vector3D, Timestamps > Integrate (const Vector3D & angular_rate, const Vector3D & specific_force, const Timestamps & time)
Integrate the navigation equations.
std::pair< RotationMatrixArray, Vector3D > IntegrateAttitude (const RotationMatrix & R0, const Vector3D & dphi, const Timestamps & time)
Integrate attitude using rotation matrices.
std::pair< Vector3D, Vector3D > IntegrateTranslation (const RotationMatrixArray & R, const Eigen::Vector3d & p0, const Eigen::Vector3d & v0, const Vector3D & dphi, const Vector3D & dzeta, const Vector3D & deta, const Timestamps & time)
Integrate position and velocity.
void SetFixedErrors ()
Set fixed errors (called at initialization).
INSData SimulateDataInterface (const RotationMatrixArray & R, const Vector3D & p, const Vector3D & v, const Timestamps & time)
Simulate data interface effects.
void SimulateGravityNoise (Vector3D & gravity)
Apply gravity noise.
void SimulateGravityScaleFactor (Vector3D & gravity)
Apply gravity scale factor.
void SimulateInitialBias (InternalPose & pose, const RotationMatrix & geodetic_rotation)
Apply initial condition bias.
void SimulateInitialRandomError (InternalPose & pose, const RotationMatrix & geodetic_rotation)
Apply initial condition random error.
void SimulateTimeJitter (Timestamps & time)
Apply time jitter.

Protected Static Functions

Type Name
geometry::ExtendedPose::AlgebraArray PoseRate (const geometry::ExtendedPose::AlgebraArray & pose, const Vector3D & omega, const Vector3D & asf)
Calculate pose rate using SE(3) Lie algebra.
geometry::ExtendedPose::AlgebraArray RK4 (const Vector3D & omega, const Vector3D & asf, const Timestamps & time)
RK4 integration for navigation equations.
Vector3D ScrollingRate (const geometry::ExtendedPose::AlgebraArray & pose, const Vector3D & phi_rate)
Calculate scrolling rate (position rate derivative).

Detailed Description

INS integrates gyro and accelerometer data to produce attitude (orientation), position, and velocity outputs. The class supports both batch and real-time simulation modes.

Public Functions Documentation

function INS

Construct an INS .

inertialsim::sensors::INS::INS (
    const INSModel & model,
    const INSSpecification & specification,
    std::optional< uint64_t > seed=0,
    INSSimulationMode mode=INSSimulationMode::BATCH
) 

Parameters:

  • model INS model options.
  • specification INS specification.
  • seed Random number generator seed (0 for random).
  • mode Simulation mode (batch or real-time).

function Initialize

Initialize the INS with a GlobalPose.

std::optional< INSData > inertialsim::sensors::INS::Initialize (
    const std::optional< geodesy::GlobalPose > & pose=std::nullopt,
    const std::optional< geometry::Vector > & angular_rate=std::nullopt,
    const std::optional< geometry::Vector > & specific_force=std::nullopt
) 

Sets the initial attitude, position, and velocity. For real-time mode, also requires initial angular rate and specific force.

Parameters:

  • pose Initial pose (nullopt for default local frame).
  • angular_rate Initial angular rate (for real-time mode only).
  • specific_force Initial specific force (for real-time mode only).

Returns:

INSData with initial pose (only in real-time mode).


function Reset

Reset the INS state.

void inertialsim::sensors::INS::Reset (
    const std::optional< geometry::Rotation > & attitude=std::nullopt,
    const std::optional< geodesy::Coordinates > & position=std::nullopt,
    const std::optional< geometry::Vector > & velocity=std::nullopt
) 

Parameters:

  • attitude New attitude (nullopt to keep current).
  • position New position (nullopt to keep current).
  • velocity New velocity (nullopt to keep current).

function Simulate [½]

Simulate INS measurements fromIMU inputs.

INSData inertialsim::sensors::INS::Simulate (
    const geometry::Vector & angular_rate,
    const geometry::Vector & specific_force
) 

Integrates angular rate and specific force to produce attitude, position, and velocity outputs.

Parameters:

  • angular_rate Angular rate of the INS relative to inertial space.
  • specific_force Specific force experienced by the INS.

Returns:

INSData containing simulated measurements.

Exception:

  • std::runtime_error if INS is not initialized.
  • std::invalid_argument if inputs are invalid.

function Simulate [2/2]

Simulate INS measurements fromMeasurement inputs.

INSData inertialsim::sensors::INS::Simulate (
    const Measurement & angular_rate,
    const Measurement & specific_force
) 

Parameters:

  • angular_rate Angular rate measurement.
  • specific_force Specific force measurement.

Returns:

INSData containing simulated measurements.


function initialized

Check if the INS is initialized.

inline bool inertialsim::sensors::INS::initialized () const

Returns:

True if initialized.


function mode

Get the simulation mode.

inline INSSimulationMode inertialsim::sensors::INS::mode () const

Returns:

Simulation mode.


function model

Get the INS model.

inline const INSModel & inertialsim::sensors::INS::model () const

Returns:

Reference to the model.


function rng

Get the random number generator.

inline const std::mt19937_64 & inertialsim::sensors::INS::rng () const

Returns:

Reference to the RNG.


function specification

Get the INS specification.

inline const INSSpecification & inertialsim::sensors::INS::specification () const

Returns:

Reference to the specification.


function state

Get the simulation state.

const INSState & inertialsim::sensors::INS::state () const

Returns the simulation state including all internal sensor parameters required to replicate the simulated measurement outputs.

Returns:

Reference to the INS state.

Exception:

  • std::runtime_error if INS is not initialized.

Protected Attributes Documentation

variable earth_rate_

Eigen::Vector3d inertialsim::sensors::INS::earth_rate_;

variable geodetic_datum_

std::optional<geodesy::GeodeticDatum> inertialsim::sensors::INS::geodetic_datum_;

variable gravity_model_

std::shared_ptr<geodesy::Gravity> inertialsim::sensors::INS::gravity_model_;

variable gravity_noise_

WhiteNoiseBuffer inertialsim::sensors::INS::gravity_noise_;

variable initialized_

bool inertialsim::sensors::INS::initialized_;

variable mode_

INSSimulationMode inertialsim::sensors::INS::mode_;

variable model_

INSModel inertialsim::sensors::INS::model_;

variable pose_

InternalPose inertialsim::sensors::INS::pose_;

variable rng_

std::mt19937_64 inertialsim::sensors::INS::rng_;

variable specification_

INSSpecification inertialsim::sensors::INS::specification_;

variable state_

INSState inertialsim::sensors::INS::state_;

variable time_jitter_

WhiteNoiseBuffer inertialsim::sensors::INS::time_jitter_;

variable topocentric_datum_

std::optional<geodesy::TopocentricDatum> inertialsim::sensors::INS::topocentric_datum_;

Protected Functions Documentation

function ApparentForces

Get Coriolis and centripetal forces.

std::pair< Vector3D, Vector3D > inertialsim::sensors::INS::ApparentForces (
    const Vector3D & p,
    const Vector3D & v
) 


function Coordinates

Convert Coordinates from internal position.

geodesy::Coordinates inertialsim::sensors::INS::Coordinates (
    const Vector3D & p,
    const Timestamps & time
) 


function Gravity

Get gravity at a position.

Vector3D inertialsim::sensors::INS::Gravity (
    const Vector3D & p,
    const Timestamps & time
) 


function IncrementalPose

Compute incremental pose updates.

std::tuple< Vector3D, Vector3D, Vector3D > inertialsim::sensors::INS::IncrementalPose (
    const Vector3D & angular_rate,
    const Vector3D & specific_force,
    const Timestamps & time
) 


function InitialConditions

Set up initial conditions from GlobalPose.

InternalPose inertialsim::sensors::INS::InitialConditions (
    const geodesy::GlobalPose & pose,
    const std::optional< geometry::Vector > & angular_rate,
    const std::optional< geometry::Vector > & specific_force
) 


function Integrate

Integrate the navigation equations.

std::tuple< RotationMatrixArray, Vector3D, Vector3D, Timestamps > inertialsim::sensors::INS::Integrate (
    const Vector3D & angular_rate,
    const Vector3D & specific_force,
    const Timestamps & time
) 


function IntegrateAttitude

Integrate attitude using rotation matrices.

std::pair< RotationMatrixArray, Vector3D > inertialsim::sensors::INS::IntegrateAttitude (
    const RotationMatrix & R0,
    const Vector3D & dphi,
    const Timestamps & time
) 


function IntegrateTranslation

Integrate position and velocity.

std::pair< Vector3D, Vector3D > inertialsim::sensors::INS::IntegrateTranslation (
    const RotationMatrixArray & R,
    const Eigen::Vector3d & p0,
    const Eigen::Vector3d & v0,
    const Vector3D & dphi,
    const Vector3D & dzeta,
    const Vector3D & deta,
    const Timestamps & time
) 


function SetFixedErrors

Set fixed errors (called at initialization).

void inertialsim::sensors::INS::SetFixedErrors () 


function SimulateDataInterface

Simulate data interface effects.

INSData inertialsim::sensors::INS::SimulateDataInterface (
    const RotationMatrixArray & R,
    const Vector3D & p,
    const Vector3D & v,
    const Timestamps & time
) 


function SimulateGravityNoise

Apply gravity noise.

void inertialsim::sensors::INS::SimulateGravityNoise (
    Vector3D & gravity
) 


function SimulateGravityScaleFactor

Apply gravity scale factor.

void inertialsim::sensors::INS::SimulateGravityScaleFactor (
    Vector3D & gravity
) 


function SimulateInitialBias

Apply initial condition bias.

void inertialsim::sensors::INS::SimulateInitialBias (
    InternalPose & pose,
    const RotationMatrix & geodetic_rotation
) 


function SimulateInitialRandomError

Apply initial condition random error.

void inertialsim::sensors::INS::SimulateInitialRandomError (
    InternalPose & pose,
    const RotationMatrix & geodetic_rotation
) 


function SimulateTimeJitter

Apply time jitter.

void inertialsim::sensors::INS::SimulateTimeJitter (
    Timestamps & time
) 


Protected Static Functions Documentation

function PoseRate

Calculate pose rate using SE(3) Lie algebra.

static geometry::ExtendedPose::AlgebraArray inertialsim::sensors::INS::PoseRate (
    const geometry::ExtendedPose::AlgebraArray & pose,
    const Vector3D & omega,
    const Vector3D & asf
) 

Computes the Lie algebra differential equations using the SE(3) group jacobian and the Savage scrolling rate.

Parameters:

  • pose N×9 matrix: [orientation(3), position(3), velocity(3)].
  • omega N×3 matrix: angular rate from gyros.
  • asf N×3 matrix: accelerometer specific force.

Returns:

N×9 matrix: pose rate [φ_rate(3), ζ_rate(3), η_rate(3)].


function RK4

RK4 integration for navigation equations.

static geometry::ExtendedPose::AlgebraArray inertialsim::sensors::INS::RK4 (
    const Vector3D & omega,
    const Vector3D & asf,
    const Timestamps & time
) 

Integrates over three samples at a time using the RK4 method, specialized for the inertial navigation problem. The initial state is always zero. Divides time into overlapping 3-sample sets and integrates each set, producing fewer outputs than inputs.

Parameters:

  • omega N×3 matrix: angular rate from gyros.
  • asf N×3 matrix: accelerometer specific force.
  • time N×1 vector: time samples.

Returns:

(N-1)/2 × 9 matrix: incremental pose changes [dφ, dζ, dη].


function ScrollingRate

Calculate scrolling rate (position rate derivative).

static Vector3D inertialsim::sensors::INS::ScrollingRate (
    const geometry::ExtendedPose::AlgebraArray & pose,
    const Vector3D & phi_rate
) 

Computes the position increment rate accounting for scrolling effects from rotation-translation coupling in strapdown navigation.

Parameters:

  • pose N×9 matrix: [orientation(3), position(3), velocity(3)].
  • phi_rate N×3 matrix: orientation rate (time derivative).

Returns:

N×3 matrix: position rate.



The documentation for this class was generated from the following file cpp/include/inertialsim/sensors/ins.h