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.
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:
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:
To debug the model, a learning curve plotting function was added to the train file
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.
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