dstl / Stone-Soup

A software project to provide the target tracking community with a framework for the development and testing of tracking algorithms.
https://stonesoup.rtfd.io
MIT License
384 stars 126 forks source link

Inertia navigation and landmarks tracking #907

Open A-acuto opened 6 months ago

A-acuto commented 6 months ago

In this PR we present a set of measurement models regarding inertia navigation, in particular the measurement models from accelerometer and gyroscope on board of sensors. To use these measurement models a set of navigation functions have been added (including tests). Summarising this PR consists in:

  1. Navigation functions and Euler angles calculations;
  2. Accelerometer measurement model
  3. Gyroscope Measurement model
  4. Azimuth-Elevation and Azimuth-Elevation-Range measurement model with fixed targets (for navigation calibration)
  5. an example of tracking using these measurement models.
  6. set of tests for the functions and measurement models.
A-acuto commented 6 months ago

In the comparison example I was not able to use the metric manager (in particular the SIAP metric) because the track associator was trying to iterate the GroundTruthState (doing something like next(state) from the GroundTruthPath) and it was failing. Therefore I used a less elegant solution to show the positional accuracy.

Here is a gist that shows the problem: https://gist.github.com/A-acuto/3c182d049e4df181e35c2a82307544fc

A-acuto commented 5 months ago

@sdhiscocks thanks for the comments and suggestions, I'll apply them and double check the degree-radians transformations to keep the code uniform. As well, I'll check if PyMap3D does contain functions needed.

A-acuto commented 5 months ago

In the last commits I answered the comments provided, in details:

The only point I am not sure about, but as presented works fine, is the use of function Build_rotation_matrix which assumes angles being 1-dimensional, which should be fine when dealing with Kalman filter tracking but not for Particle filter. However allowing it to be multi-dimensional (arrays of (3, N) dimension) is messing up the tracking with the particle filter.