![]() |
AMS Advanced Air Mobility Sensors UG
|
The FreeRTOS operating system with CMSIS API is used.
Rationale 1: we need multiple tasks that are executed at different frequencies.
Rationale 2: we use FreeRTOS because
Rationale 3: we use CMSIS API v2 because
The software is written in C and C++. The languages can be mixed.
Rationale: C++ features are handy for implementation of sensor fusion algorithms, at the same time HAL libraries and FreeRTOS source files are in C.
All the source code files shall fall into one of the following categories:
A software component is a class that realizes one or more primary or auxiliary system functions mapped to the software. A wrapper that inplements a C-API of a software component belongs to the software component.
All the operating system source files including API wrappers belong to the operating system.
Everything that is neither a software component nor a piece of an operating system. Examples: linear algebra library, runtime environment (RTE) implementation, STM32 HAL libraries.
Dynamic memory shall not be used. Consequently, functions, templates, and objects from the standard C++ library that rely on dynamic memory shall not be used.
Exceptions:
Remark: the aforementioned design patterns shall help to fulfill the software component design principles listed in the previous section.
Example of a SWC declaration: CSoftwareComponentExample.
Runtime environment (RTE) is an object that aggregates all SWC ports.
Attitude and vertical motion (including altitude and vertical velocity) are estimated using data from a 6D IMU and a barometer. A Kalman filter is employed to fuse the signals from both sensors. This approach represents the current state-of-the-art and offers several key advantages:
The estimator is implement in the form of a closed-loop error state Kalman filter. In this formulation, a linear Kalman filter is used to estimate the error in the state accumulated during the nonlinear state prediction process. This estimated state error is then applied to correct the predicted state, allowing the nonlinear prediction process to continue from the corrected value.
The state vector has dimension 12 and includes
The state error vector has dimension 10 and includes
Magnetic heading is estimated separately from attitude and vertical motion.
Rationale:
Magnetometer signals are highly susceptible to environmental disturbances that vary significantly by location. These disturbances can degrade the performance and stability of a Kalman filter, reducing the accuracy and reliability of the estimated attitude and vertical motion parameters. Additionally, we have no control over where customers install EULER-NAV devices within the target vehicle, and they may choose a location prone to intense magnetic interference. Because our device cannot predict or compensate for these disturbances, incorporating magnetometer data into the core attitude and vertical motion estimates could lead to corrupted results, potentially giving customers a false impression of our product’s performance and quality.
Rationale:
Allowing the Kalman filter to switch IMU input sources would necessitate re-initializing the estimation process for inertial sensor biases each time a switch occurs. Frequent re-initializations – such as those triggered by IMU monitor's false alarms – could degrade output accuracy, reduce filter stability, and endanger output integrity.