DRIFT
DRIFT: Dead Reckoning In Field Time

Description

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.

Run Time Analysis

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.

Dependencies

We have tested the library in Ubuntu 20.04 and 22.04, but it should be easy to compile in other platforms.

C++17 Compiler

We use the threading functionalities of C++17.

Eigen3

Required by header files. Download and install instructions can be found at: http://eigen.tuxfamily.org. Requires at least 3.1.0.

Yaml-cpp

Required by header files. Download and install instructions can be found at: https://github.com/jbeder/yaml-cpp.

ROS1 (Optional)

Building with ROS1 is optional. Instructions are found below.

Building DRIFT library

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

Install the library

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)

ROS

Examples

We provide several examples in the ROS/examples directory.

Building the ROS1 node

  1. Add /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:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/TO/drift/ROS/drift

Then

source ~/.bashrc
  1. Execute build_ros.sh script in the repository root directory:
cd <PATH>/<TO>/drift
chmod +x build_ros.sh
./build_ros.sh

Run examples

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

Run the repo with your own robots:

Please refer to the tutorial here: https://umich-curly.github.io/DRIFT_Website/tutorials/.

Contact Estimation

The contact estimation and the contact data set can be found in https://github.com/UMich-CURLY/deep-contact-estimator.

Citations

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}
    }

License

DRIFT is released under a BSD 3-Clause License.