Paparazzi UAS  v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
ins_ekf2 module

simple INS and AHRS using EKF2 from PX4

No detailed description...

Example for airframe file

Add to your firmware section:

<module name="ins_ekf2"/>

Module functions

Init Functions

These initialization functions are called once on startup.

Periodic Functions

These functions are called periodically at the specified frequency from the module periodic loop.

  • ins_ekf2_update()
    • Running at maximum module frequency.
    • Autorun: TRUE
      Periodic function automatically starts after init.

Files

Header Files

The following headers are automatically included in modules.h

Source Files

  • subsystems/ins.c
  • subsystems/ins/ins_ekf2.cpp
  • ecl/mathlib/mathlib.cpp
  • ecl/geo/geo.cpp
  • ecl/geo_lookup/geo_mag_declination.cpp
  • ecl/EKF/airspeed_fusion.cpp
  • ecl/EKF/control.cpp
  • ecl/EKF/covariance.cpp
  • ecl/EKF/drag_fusion.cpp
  • ecl/EKF/ekf.cpp
  • ecl/EKF/ekf_helper.cpp
  • ecl/EKF/estimator_interface.cpp
  • ecl/EKF/gps_checks.cpp
  • ecl/EKF/mag_fusion.cpp
  • ecl/EKF/optflow_fusion.cpp
  • ecl/EKF/sideslip_fusion.cpp
  • ecl/EKF/terrain_estimator.cpp
  • ecl/EKF/vel_pos_fusion.cpp
  • ecl/EKF/gps_yaw_fusion.cpp

Raw ins_ekf2.xml file:

<!DOCTYPE module SYSTEM "module.dtd">
<module name="ins_ekf2" dir="ins">
<doc>
<description>
simple INS and AHRS using EKF2 from PX4
</description>
</doc>
<settings>
<dl_settings NAME="INS">
<!-- EKF2 Configuration parameters -->
<dl_settings name="ekf2">
<dl_setting var="ekf2_params.mag_fusion_type" min="0" step="1" max="5" shortname="mag_fusion" values="AUTO|HEADING|3D|AUTOFW|INDOOR|NONE" module="subsystems/ins/ins_ekf2" handler="change_param"/>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="ins_ekf2.h" dir="subsystems/ins"/>
</header>
<init fun="ins_ekf2_init()"/>
<periodic fun="ins_ekf2_update()" autorun="TRUE"/>
<makefile target="ap|nps">
<configure name="CXXSTANDARD" value="-std=c++11"/>
<!-- EKF2 files -->
<define name="INS_TYPE_H" value="subsystems/ins/ins_ekf2.h" type="string"/>
<file name="ins.c" dir="subsystems"/>
<file name="ins_ekf2.cpp" dir="subsystems/ins"/>
<!-- Include the ecl and matrix libraries from ext -->
<include name="$(PAPARAZZI_SRC)/sw/ext/ecl/"/>
<include name="$(PAPARAZZI_SRC)/sw/ext/matrix/"/>
<define name="__PAPARAZZI" value="true"/>
<define name="ECL_STANDALONE" value="true"/>
<define name="USE_MAGNETOMETER" value="true"/> <!-- Needed for IMU to get scaled version -->
<!-- Compile needed ecl files -->
<file name="mathlib.cpp" dir="ecl/mathlib"/>
<file name="geo.cpp" dir="ecl/geo"/>
<file name="geo_mag_declination.cpp" dir="ecl/geo_lookup"/>
<file name="airspeed_fusion.cpp" dir="ecl/EKF"/>
<file name="control.cpp" dir="ecl/EKF"/>
<file name="covariance.cpp" dir="ecl/EKF"/>
<file name="drag_fusion.cpp" dir="ecl/EKF"/>
<file name="ekf.cpp" dir="ecl/EKF"/>
<file name="ekf_helper.cpp" dir="ecl/EKF"/>
<file name="estimator_interface.cpp" dir="ecl/EKF"/>
<file name="gps_checks.cpp" dir="ecl/EKF"/>
<file name="mag_fusion.cpp" dir="ecl/EKF"/>
<file name="optflow_fusion.cpp" dir="ecl/EKF"/>
<file name="sideslip_fusion.cpp" dir="ecl/EKF"/>
<file name="terrain_estimator.cpp" dir="ecl/EKF"/>
<file name="vel_pos_fusion.cpp" dir="ecl/EKF"/>
<file name="gps_yaw_fusion.cpp" dir="ecl/EKF"/>
</makefile>
</module>