Tight Learned Inetrial Odometry (TLIO) Data Loader

IMU drift is a major obstacle in long-duration robot navigation, degrading localization accuracy over time. This project builds a data pipeline using a VICON motion capture system and D-Flow treadmill to collect ground truth motion profiles for the Digit robot, then leverages that data to develop a Python data loader for the TLIO framework, reducing IMU drift by 40 cm/min. As a research assistant, I built both the data collection pipeline and the loader implementation.

The TLIO Data Loader Model focuses on creating a reliable dataloader using Python for our motion capture (MOCAP) and Inertial Measurment Unit (IMU) data pipeline.

Tight Learned Inertial Odometry (TLIO) Flowchart

Reinforcement Learning is used to determine the displacement estimates of the IMU at any point in time. Then an Extended Kalman Filter (EKF) was used to integrate the displacement and determine the roll, pitch, and yaw.

Data collection using the MOCAP, IMU, and Treadmill was conducted as shown below for 30 different motion profiles:

The D-Flow,VICON Software, and Digit robot used to capture the experimental data to be fed into model
Left depicts the device used to calibrate the MOCAP Cameras. Right depicts the software to calibrate the IMU

Once the data was collected, It needed to be transformed to match the format required for the TLIO network and EKF. The main problem was data incompletness - A lack of readings directly from the MOCAP system such as the acceleration and angular velocity. A Custom Data Loader with smoothing, integration, and derivation functionalities was made.

Once transformed, the IMU and MOCAP data needed to be time aligned, interpolated, and calibrated using external JSON files. The entire process was automated to ensure replaceability. The results are as follows:

Left depicts raw IMU and MOCAP Data for data set 01 and the Right depicts the same processed for the TLIO

To debug the model, a learning curve plotting function was added to the train file

Learning curve for 33,66,and 99 epochs for data set 05 (left to right)

The model was then trained on the same data and tested with different train-test-val batches. Both were 60%-20%-20% splits - one was a random choice and the other had a train set which was filled with the complex motion profiles.

Left depicts test result of random split and Right depicts test result of specific split for data set 05

As seen above the model for which train data was handpicked shows only around a drift of ~20 cm in either direction whereas the random train data set shows ~50 cm drift