Subsystem/ins

Subsystems
== INS subsystem ==
The INS (Inertial Navigation System) subsystem specifies which position and velocity estimation algorithm you are using.
Most of the INS filters are only providing position and speed, and they need to be used together with an AHRS (Attitude and Heading Reference System) filter for attitude. Currently, only the experimental invariant filter is a full INS.
Currently possible INS subsystem types are:
Type 	Point Type	Firmwares	Notes
ekf2 	floating 	all 	external
alt_float 	floating 	fixedwing	
gps_passthrough 	 	all 	
xsens 	 	all 	external
xsens700 	 	all 	external
no_type 	 	all 	
Horizontal Filter Float (hff)	floating 	 	
extended 	floating? 	all 	
vectornav 	 	all 	external
float_invariant 	floating 	all 	
e.g. for the extended filter:
== Implementations ==
=== ekf2 ===
ekf2 is an Extended Kalman Filter based on the Estimation and Control Library (ECL) from PX4. This filter is able to estimate at best:
* Quaternion defining the rotation from North, East, Down local earth frame to X, Y, Z body frame
* Velocity at the IMU - North, East, Down (m/s)
* Position at the IMU - North, East, Down (m)
* IMU delta angle bias estimates - X, Y, Z (rad)
* IMU delta velocity bias estimates - X, Y, Z(m/s)
* Earth Magnetic field components - North, East, Down (gauss)
* Vehicle body frame magnetic field bias - X, Y, Z (gauss)
* Wind velocity - North, East (m/s)
More information on the filter can be found at: https://docs.px4.io/master/en/advanced_config/tuning_the_ecl_ekf.html
Compatible sensors
The most complete INS available on Paparazzi can be interfaced with a high number of sensors, to increase robustness and accuracy. Messages that can be fused in the filter are obtained from:
* AGL sensor (e.g. mateksys_3901_l0x)
* Barometer (e.g. MS5611 (SPI))
* IMU (e.g. MPU6000)
* Magnetometer (e.g. ST IST8310)
* GPS (e.g. Ublox)
* Optical Flow (e.g. mateksys_3901_l0x)
Optical Flow
Optical flow interface allows for robust and velocity estimation when the necessary conditions are met (close to ground, good lighting, good texture, no excessive speed etc.). Optical flow usage is ideal in combination with GPS as it takes over inaccurate dead reckoning when GPS signal is lost. To be sure that optical flow fusion is enabled when the sensor can perform optimally, the user can set several parameters that match the specifications of the used sensor. These parameters are:
Additional information for a correct sensor reading from the module are:
* The interface expects flow values in deg/sec
* The IMU output is used to compensate for rotation. To increase the accuracy of the compensation, an optical flow sensor with mounted IMU should be used (see https://docs.cubepilot.org/user-guides/flow-senor/here-flow)
* Matching the expected flow rotation of the EKF2 with the output of the sensor can be tricky: this guide (https://docs.px4.io/master/en/sensor/optical_flow.html) from PX4 gives a good overview on how the sensor should be mounted on the vehicle for correct functioning. 
=== alt_float ===
Filters altitude and climb rate for fixedwings.
A 2-state Kalman filter that estimates vertical position and vertical velocity from GPS and barometric data.
When USE_BAROMETER is defined to TRUE:
* GPS horizontal position and horizontal velocity is directly passed through
* GPS vertical position sets the altitude for the barometric reference pressure (QFE)
* Vertical position and velocity is a filtered based on barometric pressure with respect to the reference pressure and GPS vertical velocity readings.
When USE_BAROMETER is not defined, FALSE or 0:
* GPS velocity is directly passed through to the vehicle's state.
* GPS horizontal position is directly passed through.
* Altitude is filtered based on GPS height and vertical velocity data.
Parameters
USE_BAROMETER - Enables the use of barometric data
DEBUG_ALT_KALMAN - Enables debug messages from the subsystem (Default: not defined)
e.g. to use with barometer:
=== GPS passthrough (gps_passthrough) ===
"dummy" INS that does no filtering whatsoever. It directly passes GPS position and velocity through.
=== xsens ===
XSens Mti-G
=== xsens700 ===
XSens Mti-G
=== no_type ===
Vertical filter (in float) estimating altitude, vertical velocity and accelerometer bias.
If USE_GPS, horizontal position and velocity is set directly by GPS.
=== Horizontal Filter Float (hff) ===
simple with float vertical and horizontal filters for INS
=== extended ===
Extended vertical filter (in float).
A 4-state Kalman filter that estimates:
* vertical position
* vertical speed
* accelerometer bias
* barometric offset
Parameters
INS_PROPAGATE_FREQUENCY - Defines the frequency (Hz) of the propagation model (Default: PERIODIC_FREQUENCY)
=== vectornav ===
Driver for the Vectornav VN-200 INS, see also Sensors/imu#Vectornav_VN-200.
=== float_invariant ===
A full INS estimating attitude, velocity, position and biases via invariant filter
Category:User_Documentation Category:Subsystems