DRIFT
|
DRIFT is a real-time symmetry-preserving propioceptive state estimation framework. The current implementation is based on the Invariant Kalman Filtering (InEKF). By default, DRIFT supports legged robots, differential-drive wheeled robots, full-size vehicles with shaft encoders and marine robots with Doppler Velocity Log (DVL).
DRIFT is designed to be modular and easy to expand to different platforms. It can be used as a standalone C++ library. Alternatively, we provide a ROS1 wrapper for easy communication between sensors.
We perform runtime evaluations using a personal laptop with an Intel i5-11400H CPU and an NVIDIA Jetson AGX Xavier (CPU). DRIFT can operate at an extremely high frequency using CPU-only computation, even on the resourced-constrained Jetson AGX Xavier. For the optional contact estimator, the inference speed on an NVIDIA RTX 3090 GPU is approximately 1100 Hz, and the inference speed on a Jetson AGX Xavier (GPU) is around 830 Hz after TensorRT optimization.
We have tested the library in Ubuntu 20.04 and 22.04, but it should be easy to compile in other platforms.
We use the threading functionalities of C++17.
Required by header files. Download and install instructions can be found at: http://eigen.tuxfamily.org. Requires at least 3.1.0.
Required by header files. Download and install instructions can be found at: https://github.com/jbeder/yaml-cpp.
Building with ROS1 is optional. Instructions are found below.
Clone the repository:
Create another directory which we will name 'build' and use cmake and make to compile an build project:
After building the library, you can install the library to the system. This will allow other projects to find the library without needing to specify the path to the library.
Then, you can include the library in your project by adding the following line to your CMakeLists.txt file:
We provide several examples in the ROS/examples
directory.
/ROS/drift
to the ROS_PACKAGE_PATH
environment variable. Open your ~/.bashrc file in a text editor and add the following line to the end. Replace PATH/TO with the directory path to where you cloned drift:Then
build_ros.sh
script in the repository root directory:Clearpath Husky robot:
Fetch robot with the gyro filter:
Full-size vehicle:
MIT mini-cheetah robot:
Girona500 (Marine robot):
Please refer to the tutorial here: https://umich-curly.github.io/DRIFT_Website/tutorials/.
The contact estimation and the contact data set can be found in https://github.com/UMich-CURLY/deep-contact-estimator.
If you find this work useful, please kindly cite the following papers
DRIFT is released under a BSD 3-Clause License.