Skip to content
forked from UMich-CURLY/drift

Dead Reckoning In Field Time: Symmetry-Preserving State Estimation Library for Various Robotic Platforms

License

Notifications You must be signed in to change notification settings

jaskifstad/drift

 
 

Repository files navigation

DRIFT: Dead Reckoning In Field Time

all_robots

Description

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.

Detailed documentations and tutorials can be found at https://umich-curly.github.io/DRIFT_Website/.

Framework

flow_chart

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.

run_time

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.

About

Dead Reckoning In Field Time: Symmetry-Preserving State Estimation Library for Various Robotic Platforms

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 90.1%
  • CMake 2.8%
  • Shell 2.6%
  • C 2.3%
  • Python 2.2%