Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
ahrs_float_mlkf module

AHRS using MLKF filter.

Multiplicative Linearized Kalman Filter in quaternion formulation. Estimates the gyro bias and needs magnetometer to update all 3 axes. Not suitable for fixedwings! Suitable for rotorcraft. The magnetometer is used and needs to be well calibrated. Estimates attitude and heading. Does not use GPS.

Example for airframe file

Add to your firmware section: This example contains all possible configuration options, not all of them are mandatory!

<module name="ahrs_float_mlkf">
b'<define name="AHRS_MAG_UPDATE_ALL_AXES" value="FALSE|TRUE" />\n '
b'<define name="AHRS_MLKF_IMU_ID" value="ABI_BROADCAST" />\n '
b'<define name="AHRS_MLKF_MAG_ID" value="ABI_BROADCAST" />\n '
b'<configure name="AHRS_MLKF_TYPE" value="AHRS_PRIMARY|AHRS_SECONDARY" />\n '
b'<configure name="AHRS_ALIGNER_LED" value="1" />\n '
</module>

Module configuration options

Configure Options

  • name: AHRS_MLKF_TYPE value: AHRS_PRIMARY|AHRS_SECONDARY
    Description: set if the AHRS is the primary source (default) or one of the secondary sources
  • name: AHRS_ALIGNER_LED value: 1
    Description: LED number to indicate AHRS alignment, none to disable (default is board dependent)

Define Options

  • name: AHRS_MAG_UPDATE_ALL_AXES value: FALSE|TRUE
    Description: Use magnetometer to update all axes and not only yaw
  • name: AHRS_MLKF_IMU_ID value: ABI_BROADCAST
    Description: ABI sender id of IMU to use
  • name: AHRS_MLKF_MAG_ID value: ABI_BROADCAST
    Description: ABI sender id of magnetometer to use

Files

Source Files

Raw ahrs_float_mlkf.xml file:

<!DOCTYPE module SYSTEM "module.dtd">
<module name="ahrs_float_mlkf" dir="ahrs" task="estimation">
<doc>
<description>
AHRS using MLKF filter.
Multiplicative Linearized Kalman Filter in quaternion formulation.
Estimates the gyro bias and needs magnetometer to update all 3 axes.
Not suitable for fixedwings!
Suitable for rotorcraft. The magnetometer is used and needs to be well calibrated. Estimates attitude and heading. Does not use GPS.
</description>
<configure name="AHRS_MLKF_TYPE" value="AHRS_PRIMARY|AHRS_SECONDARY" description="set if the AHRS is the primary source (default) or one of the secondary sources"/>
<configure name="AHRS_ALIGNER_LED" value="1" description="LED number to indicate AHRS alignment, none to disable (default is board dependent)"/>
<define name="AHRS_MAG_UPDATE_ALL_AXES" value="FALSE|TRUE" description="Use magnetometer to update all axes and not only yaw"/>
<define name="AHRS_MLKF_IMU_ID" value="ABI_BROADCAST" description="ABI sender id of IMU to use"/>
<define name="AHRS_MLKF_MAG_ID" value="ABI_BROADCAST" description="ABI sender id of magnetometer to use"/>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="AHRS MLKF">
<dl_setting var="ahrs_mlkf_enable" min="0" step="1" max="1" module="modules/ahrs/ahrs_float_mlkf_wrapper" values="DISABLE|ENABLE" handler="enable"/>
<dl_setting var="ahrs_mlkf.mag_noise.x" min="0.0" step="0.02" max="1.0" module="modules/ahrs/ahrs_float_mlkf" shortname="mag_noise_x" param="AHRS_MAG_NOISE_X" type="float" persistent="true"/>
<dl_setting var="ahrs_mlkf.mag_noise.y" min="0.0" step="0.02" max="1.0" module="modules/ahrs/ahrs_float_mlkf" shortname="mag_noise_y" param="AHRS_MAG_NOISE_Y" type="float" persistent="true"/>
<dl_setting var="ahrs_mlkf.mag_noise.z" min="0.0" step="0.02" max="1.0" module="modules/ahrs/ahrs_float_mlkf" shortname="mag_noise_z" param="AHRS_MAG_NOISE_Z" type="float" persistent="true"/>
</dl_settings>
</dl_settings>
</settings>
<dep>
<depends>ahrs_common,@imu,@mag</depends>
<provides>ahrs</provides>
</dep>
<makefile target="!sim|fbw">
<configure name="AHRS_MLKF_TYPE" default="AHRS_PRIMARY"/>
<define name="AHRS_MLKF_TYPE" value="$(AHRS_MLKF_TYPE)"/>
<configure name="USE_MAGNETOMETER" default="1"/>
<define name="USE_MAGNETOMETER" cond="ifeq (,$(findstring $(USE_MAGNETOMETER),0 FALSE))"/>
<file name="ahrs_float_mlkf.c"/>
<file name="ahrs_float_mlkf_wrapper.c"/>
<test>
<define name="AHRS_MLKF_TYPE" value="AHRS_PRIMARY"/>
</test>
</makefile>
</module>