Examination of Long Term Environment Effects on Robot Localization Using RI-EKF and the NCLT Dataset
University of Michigan ROB 530: Mobile Robotics Winter 2021
Final Project Team 16: Lars Grantz, Ting-Wei Hsu, Adarsh Karnati
This project aims at evaluating robustness of the right-invariant extended Kalman filter(RI-EKF) against long term environmental changes. RI-EKF localization is implemented on the NCLT dataset and its performance is analyzed across different sessions. This repository includes Python code that allows to:
- extract landmarks from 3-D lidar scans
- create a global reference map of landmarks
- implement RI-EKF localization on this map
- evaluate performance of RI-EKF localization
The NCLT Dataset is a large-scale, long-term dataset collected on the North Campus of the University of Michigan. The dataset consists of vision data, lidar data, GPS, and IMU data collected using a Segway robot. The reason for choosing this dataset is that it includes a wide range of long-term environmental changes, such as seasonal changes, lighting changes, and structural changes. The data can be downloaded here. Use the provided downloader.py
to download sensor data, Velodyne(3D lidar)data, and the ground truth.
Landmarks extraction and mapping are implemented using the algorithm proposed in this paper (Schaefer et al. 2019). Use Python code in this repository and install all the required modules to generate the global reference map. The resulting global map is shown in Fig. 1.
Fig. 1: global reference map
The RI-EKF localization is implemented using inEKF.py
. In inEKF.py
:
- robot pose in SE(2) is considered
- for the process model, the odometry data are used to propagate the states
- for the measurement model, a ball tree search algorithm is employed for data association between online lidar scans and the landmarks in the global reference map. Mahalanobis distance is used as the distance metric and the landmarks are accepted/rejected based on Chi-square tests.
Once complete downloading the data from NCLT dataset and building the dependencies, run ncltpoles.py
for the overall maping and localization process. In ncltpoles.py
:
save_global_map()
builds the global reference map of landmarkssave_local_maps(session_name)
builds the local map (i.e. online lidar scans) of detected landmarkslocalize(session_name, visualize = False)
implements RI-EKF localization on the global reference map; it also plots the NEES (normalized estimation error squared) graph to evaluate the consistency of the RI-EKF, as shown in Fig. 2.plot_trajectories()
plots the trajectories of both the estimated and ground truth poses, as shown in Fig. 3.evaluate()
computes the mean error and root-mean-square error of between the estimated and ground truth poses
Fig. 2: the NEES plot
Fig. 3: estimated and ground truth trajectories