BYU Invariant Extended Kalman Filter Library
Project description
Invariant Extended Kalman Filter
InEKF is a C++ library that implements the Invariant Extend Kalman Filter (InEKF) in a modular to enable easy application to any system.
Features
- Support for Right & Left filters.
- Base classes provided easy extension via inheritance.
- Coded using static Eigen types for efficient structure.
- Fully featured python interface for use in classroom, testing, etc.
- C++14 and above supported.
- Fullly templated Lie Groups SO2, SO3, SE2, SE3 to enable additional tracking of Euclidean states and multiple extra columns in SE2/SE3.
- Dynamic Lie Groups types to add columns to SE2/SE3 on the fly (for InEKF SLAM).
- Various examples to get started.
Building & Linking
To use InEKF, only Eigen
is necessary. This can be installed via apt-get
or from source. Also, a version of python with numpy and matplotlib installed for plotting reasons (I recommend systemwide, conda gave me fits).
InEKF is built via cmake, and thus can be built in the usual cmake fashion:
mkdir build
cd build
cmake ..
make
sudo make install
This will install a custom target that can be linked via CMake as
find_package(Eigen3 CONFIG REQUIRED)
find_package(InEKF CONFIG REQUIRED)
target_link_libraries(mytarget PUBLIC InEKF::Core InEKF::Inertial InEKF::SE2Models)
A python wrapper is also available.
Structure
InEKF is split into a couple different libraries
Core
This library includes all the Lie Groups, InEKF
, and GenericMeasureModel
classes along with the base classes MeasureModel
, ProcessModel
.
Inertial
This is the implementation of the Lie Group SE_2(3)
along with an augmented bias state. Along with it are various process/measurement models defined on this group including as of now DVLSensor
, DepthSensor
, and InertialProcess
.
SE2Models
Exactly what it sounds like, is used for SLAM in SE2.
Extending
InEKF is set up so your process/measure models will be an easy extension and continue to function with InEKF
and LieGroups
if defined properly. Note this can be done in python or C++. The following is what must be defined/done to successfully do this. The following methods/variables for each base class must be implemented/set
MeasureModel
All methods are already implemented in the MeasureModel
class, so overriding them can be decided on a case by case basis. There is a few constants that must be set though.
Method | Use |
---|---|
error_ |
Type of invariant measurement, either ERROR::LEFT or ERROR::Right |
M_ |
Noise parameter. A default should be set in the constructor, and possible a method made to set it |
H_ |
Linearized innovation matrix H . Will be hit with adjoint depending on type of filter. Use H_error_ in calcSInverse(z, state) |
processZ(z, state) |
Any preprocessing that needs to be done on z should be done here. This could include adding 0s and 1s on the end, change of frames, etc. |
calcV(z, state) |
Accepts an exact size of z, and calculates/returns the innovation. Likely will not need to be overriden. |
calcSInverse(state) |
Calculates and returns S^{-1}, the inverse of the measurement covariance. Also likely won't need to be overriden. |
ProcessModel
In contrast, the process model implements a few things that MUST be overriden.
Method | Use |
---|---|
f(u, dt, state) |
State process model. Returns the state. |
MakePhi(u, dt, state) |
Creates exp(A*dt) to use. Make sure to check what type of error State is and make A accordingly |
Q_ |
Noise parameter. A default should be set in the constructor, and possible a method made to set it |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
File details
Details for the file inekf-0.1.0.dev1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
.
File metadata
- Download URL: inekf-0.1.0.dev1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 776.5 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0bb3ebbc1bca738aed01eb60b82878107d50e22db467d4d8c1f8f9d75ad8ba8f |
|
MD5 | cc58436a02127f93217c7ee199e7b452 |
|
BLAKE2b-256 | ae216c51564d7b4a4bb1c2b3c9f3179902d7969e57aef7e1ef379e759136854f |
File details
Details for the file inekf-0.1.0.dev1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
.
File metadata
- Download URL: inekf-0.1.0.dev1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 776.3 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad00e9dea5a9fe5c1d9eae22ef4a63fb12057b03583da4cde05e312822bd5f8a |
|
MD5 | 0977088c8f464f94da243af629fd00d8 |
|
BLAKE2b-256 | 7c8af7870af64d86282cb3a13ba69c812cdaa6af669767575b617e24d022e0b9 |
File details
Details for the file inekf-0.1.0.dev1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
.
File metadata
- Download URL: inekf-0.1.0.dev1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 776.3 kB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bf37703c3dfc005dc0f56604eb36308029589e24ec9a69c59b44b40cc5c4a190 |
|
MD5 | 8294989d5f1fdb4b39fe715a09795c8f |
|
BLAKE2b-256 | 9776bf891311aef36536a8ea8316a3828b273776b5fcc56945c2bc7f079e7d20 |
File details
Details for the file inekf-0.1.0.dev1-cp36-cp36m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
.
File metadata
- Download URL: inekf-0.1.0.dev1-cp36-cp36m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 776.2 kB
- Tags: CPython 3.6m, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f1f1ac90997bccc1c907c49350972e90569c21bba38e2a02bdecdaadb888e2bc |
|
MD5 | a93858516d18442e085852193bcdd4ad |
|
BLAKE2b-256 | f1860ae4ba91af43c0d1ee3619a27fbf4553f3ba81486ae3212f2733e3b61165 |