Class inertialsim::sensors::INS¶
ClassList > inertialsim > sensors > INS
#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:
modelINS model options.specificationINS specification.seedRandom number generator seed (0 for random).modeSimulation 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:
poseInitial pose (nullopt for default local frame).angular_rateInitial angular rate (for real-time mode only).specific_forceInitial 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:
attitudeNew attitude (nullopt to keep current).positionNew position (nullopt to keep current).velocityNew 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_rateAngular rate of the INS relative to inertial space.specific_forceSpecific force experienced by the INS.
Returns:
INSData containing simulated measurements.
Exception:
std::runtime_errorif INS is not initialized.std::invalid_argumentif 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_rateAngular rate measurement.specific_forceSpecific force measurement.
Returns:
INSData containing simulated measurements.
function initialized¶
Check if the INS is initialized.
Returns:
True if initialized.
function mode¶
Get the simulation mode.
Returns:
Simulation mode.
function model¶
Get the INS model.
Returns:
Reference to the model.
function rng¶
Get the random number generator.
Returns:
Reference to the RNG.
function specification¶
Get the INS specification.
Returns:
Reference to the specification.
function state¶
Get the simulation state.
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_errorif INS is not initialized.
Protected Attributes Documentation¶
variable earth_rate_¶
variable geodetic_datum_¶
variable gravity_model_¶
variable gravity_noise_¶
variable initialized_¶
variable mode_¶
variable model_¶
variable pose_¶
variable rng_¶
variable specification_¶
variable state_¶
variable time_jitter_¶
variable 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.
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).
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.
function SimulateGravityScaleFactor¶
Apply gravity scale factor.
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.
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:
poseN×9 matrix: [orientation(3), position(3), velocity(3)].omegaN×3 matrix: angular rate from gyros.asfN×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:
omegaN×3 matrix: angular rate from gyros.asfN×3 matrix: accelerometer specific force.timeN×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:
poseN×9 matrix: [orientation(3), position(3), velocity(3)].phi_rateN×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