Dead Reckoning In Field Time (DRIFT) is an open-source C++ software library designed to provide accurate and high-frequency proprioceptive state estimation for a variety of mobile robot architectures. By default, DRIFT supports legged robots, differential-drive wheeled robots, full-size vehicles with shaft encoders and marine robots with a Doppler Velocity Log (DVL). Leveraging symmetry-preserving filters such as Invariant Kalman Filtering (InEKF), this modular library empowers roboticists and engineers with a robust and adaptable tool to estimate instantaneous local pose and velocity in diverse environments. The software is structured in a modular fashion, allowing users to define their own sensor types, and propagation and correction methods, offering a high degree of customization.
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:
git clone https://github.com/UMich-CURLY/drift.git
Create another directory which we will name 'build' and use cmake and make to compile an build project:
mkdir build
cd build
cmake ..
make -j4
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.
sudo make install
Then, you can include the library in your project by adding the following line to your CMakeLists.txt file:
find_package(drift REQUIRED)
We provide several examples in the ROS/examples
directory.
- Add
/ROS/drift
to theROS_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:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/TO/drift/ROS/drift
Then
source ~/.bashrc
- Execute
build_ros.sh
script in the repository root directory:
cd <PATH>/<TO>/drift
chmod +x build_ros.sh
./build_ros.sh
Clearpath Husky robot:
rosrun drift husky
Fetch robot with the gyro filter:
rosrun drift fetch
Full-size vehicle:
rosrun drift neya
MIT mini-cheetah robot:
rosrun drift mini_cheetah
Girona500 (Marine robot):
rosrun drift girona500
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
- Tzu-Yuan Lin, Tingjun Li, Wenzhe Tong, and Maani Ghaffari. "Proprioceptive Invariant Robot State Estimation." arXiv preprint arXiv:2311.04320 (2023). (Under review for Transaction on Robotics)
@article{lin2023proprioceptive,
title={Proprioceptive Invariant Robot State Estimation},
author={Lin, Tzu-Yuan and Li, Tingjun and Tong, Wenzhe and Ghaffari, Maani},
journal={arXiv preprint arXiv:2311.04320},
year={2023}
}
- Tzu-Yuan Lin, Ray Zhang, Justin Yu, and Maani Ghaffari. "Legged Robot State Estimation using Invariant Kalman Filtering and Learned Contact Events." In Conference on robot learning. PMLR, 2021
@inproceedings{
lin2021legged,
title={Legged Robot State Estimation using Invariant Kalman Filtering and Learned Contact Events},
author={Tzu-Yuan Lin and Ray Zhang and Justin Yu and Maani Ghaffari},
booktitle={5th Annual Conference on Robot Learning },
year={2021},
url={https://openreview.net/forum?id=yt3tDB67lc5}
}
DRIFT is released under a BSD 3-Clause License.