DualQuat-LOAM: LiDAR Odometry and Mapping parametrized on Dual Quaternions
Edison P. Velasco-Sánchez, Luis F. Recalde, Guanrui Li, Francisco A. Candelas-Herias, Santiago T. Puente-Mendez, Fernando Torres-Medina
TL;DR
This work targets LiDAR odometry with minimal drift by parameterizing both motion and descriptors in dual quaternions, providing a compact and singularity-free $SE(3)$ representation. It integrates edge, surface, and STD descriptors within a unified dual-quaternion optimization framework, leveraging Plücker lines, planes, and unit dual quaternions to form three residuals solved in Ceres on a custom manifold. Empirical validation on KITTI shows competitive translation and rotation accuracy with real-time performance (~$53$ ms per pose), and additional evaluations on a robotics platform and public benchmarks illustrate robustness and limitations across diverse environments. The approach advances LiDAR-only odometry by enabling tight fusion of pose and local geometry through dual-quaternion algebra and STD-based descriptors, with clear pathways for extending to IMU integration and Jacobian-efficient optimization.
Abstract
This paper reports on a novel method for LiDAR odometry estimation, which completely parameterizes the system with dual quaternions. To accomplish this, the features derived from the point cloud, including edges, surfaces, and Stable Triangle Descriptor (STD), along with the optimization problem, are expressed in the dual quaternion set. This approach enables the direct combination of translation and orientation errors via dual quaternion operations, greatly enhancing pose estimation, as demonstrated in comparative experiments against other state-of-the-art methods. Our approach reduced drift error compared to other LiDAR-only-odometry methods, especially in scenarios with sharp curves and aggressive movements with large angular displacement. DualQuat-LOAM is benchmarked against several public datasets. In the KITTI dataset it has a translation and rotation error of 0.79% and 0.0039°/m, with an average run time of 53 ms.
