May 20, 2021

Racing the Beam

I wrote a low-latency LiDAR mapping algorithm for fast-moving drones and autonomous vehicles. State of the art accuracy, 100x faster, half the compute.

Intro

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec interdum elit metus, nec bibendum nibh lacinia a. Aenean nec bibendum leo. Pellentesque dictum pellentesque enim, at dictum nulla accumsan vitae. Donec sit amet viverra nisi. Integer a iaculis lectus, eget pulvinar purus. Vestibulum vel eleifend dui, nec euismod purus. Etiam et imperdiet nisl. Nunc ac elit rhoncus, cursus dui id, sagittis ante. Sed placerat risus vel congue porttitor. Cras sagittis lorem ut lacus tempor, a hendrerit libero consequat. Donec molestie mollis dolor, sit amet consectetur urna mattis non. Suspendisse vel facilisis ex, et luctus leo.

Etiam non dignissim mauris, vitae euismod tortor. Praesent in felis enim. Morbi mollis faucibus scelerisque. Suspendisse at finibus diam. Cras sodales, magna ac iaculis efficitur, neque nunc pharetra justo, et blandit elit massa ac erat. Curabitur vestibulum neque in sem mollis convallis nec id neque. Proin rhoncus sapien urna, in tempus tortor maximus sit amet. Duis sed consectetur lectus.

jfLOAM — Jordan's Fast Lidar Odometry and Mapping

Proin commodo dignissim interdum. Ut eu malesuada erat, ut laoreet tellus. Maecenas eget lorem eget elit dignissim tempus fermentum eget nisi. Praesent sit amet sapien elementum tortor ultricies gravida ac eu velit. Integer quis efficitur odio. Proin non ante ac diam eleifend maximus. Pellentesque nulla nulla, scelerisque vitae lectus ac, dapibus hendrerit risus. Proin interdum suscipit dolor vitae porta. Ut sed augue blandit urna suscipit sollicitudin non dictum nulla. Proin id justo consectetur, vestibulum augue vitae, dictum magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut sit amet pellentesque ante.

jfLOAM: Feature Extraction

Multi-line LiDAR scanners like the VLP-16 produce thousands of points in every scan—far too many to process in realtime. Fortunately, accurate mapping requires only a subset of the points in each LiDAR scan. Feature points lying on sharp corners and flat planes are easy to recognize and match between consecutive LiDAR scans. Feature extraction is the preprocessing step that identifies these points and separates them out for further processing.

LiDAR Scan Organization

LiDAR scans can be organized or disorganized, depending on their source and the care with which they've been handled. A disorganized scan is a list of XYZ points in unknown order. Without knowing the relationships between adjacent points in the list, disorganized scans cannot be used to identify feature points. They must be organized first.

Organized point clouds represent the LiDAR scan as a 2D array of XYZ points. Each row in the array represents one of the sensor's scanlines, and points within each scanline are sorted by the sensor's angle at the time of capture. To maintain the structure of the 2D array, measurements beyond the sensor's working range are set to a flag value such as (0,0,0) or (NaN, NaN, NaN).

Most spinning LiDAR sensors produce organized point clouds, but naive filtering, serialization, and compression algorithms sometimes neglect to maintain the scan's 2D structure. Regardless, jfLOAM begins by sorting input scans into organized order. Sorting is fast and removes a source of friction for users of the jfLOAM library. To simplify its use, jfLOAM does not require organized input scans. jfLOAM sorts scans into organized order automatically. In the case of organized input

Pseudo-Curvature

Best Corners

All Corners

Best Planes

All Planes

Integer vel ipsum enim. Nunc luctus tempus lectus sit amet venenatis. Aliquam commodo dignissim sodales. Fusce aliquam augue placerat feugiat aliquam. Suspendisse potenti. Pellentesque ultricies velit massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultricies augue a sagittis fermentum. Nullam et elementum quam, quis congue lacus. Aliquam et eros pretium, ultrices nisi vel, ultricies quam.

jfLOAM: Coarse ICP

Nulla vehicula libero nec consectetur vestibulum. In tincidunt nisi nec libero mattis, ac molestie velit consectetur. Morbi sed ex at dui egestas tincidunt. Cras eget dignissim lorem. Praesent rutrum aliquet sem non tincidunt. Curabitur vehicula metus elit, non luctus felis vestibulum non. Ut vehicula id lacus a molestie. Vestibulum id tempus mi. Sed eget metus ligula. Pellentesque eleifend mauris et aliquet dictum. Donec tincidunt aliquet vestibulum. Curabitur fermentum tortor quis aliquam dictum. Integer eget consectetur ante. Suspendisse egestas arcu sit amet libero sodales, eu consectetur lectus vulputate. Sed ornare fringilla ante, non egestas elit imperdiet eget. Maecenas sit amet arcu hendrerit, sodales enim placerat, ultrices dolor.

jfLOAM: Fine ICP

Nulla vehicula libero nec consectetur vestibulum. In tincidunt nisi nec libero mattis, ac molestie velit consectetur. Morbi sed ex at dui egestas tincidunt. Cras eget dignissim lorem. Praesent rutrum aliquet sem non tincidunt. Curabitur vehicula metus elit, non luctus felis vestibulum non. Ut vehicula id lacus a molestie. Vestibulum id tempus mi. Sed eget metus ligula. Pellentesque eleifend mauris et aliquet dictum. Donec tincidunt aliquet vestibulum. Curabitur fermentum tortor quis aliquam dictum. Integer eget consectetur ante. Suspendisse egestas arcu sit amet libero sodales, eu consectetur lectus vulputate. Sed ornare fringilla ante, non egestas elit imperdiet eget. Maecenas sit amet arcu hendrerit, sodales enim placerat, ultrices dolor.

Racing the Beam

Nulla vehicula libero nec consectetur vestibulum. In tincidunt nisi nec libero mattis, ac molestie velit consectetur. Morbi sed ex at dui egestas tincidunt. Cras eget dignissim lorem. Praesent rutrum aliquet sem non tincidunt. Curabitur vehicula metus elit, non luctus felis vestibulum non. Ut vehicula id lacus a molestie. Vestibulum id tempus mi. Sed eget metus ligula. Pellentesque eleifend mauris et aliquet dictum. Donec tincidunt aliquet vestibulum. Curabitur fermentum tortor quis aliquam dictum. Integer eget consectetur ante. Suspendisse egestas arcu sit amet libero sodales, eu consectetur lectus vulputate. Sed ornare fringilla ante, non egestas elit imperdiet eget. Maecenas sit amet arcu hendrerit, sodales enim placerat, ultrices dolor.

Nulla vehicula libero nec consectetur vestibulum. In tincidunt nisi nec libero mattis, ac molestie velit consectetur. Morbi sed ex at dui egestas tincidunt. Cras eget dignissim lorem. Praesent rutrum aliquet sem non tincidunt. Curabitur vehicula metus elit, non luctus felis vestibulum non. Ut vehicula id lacus a molestie. Vestibulum id tempus mi. Sed eget metus ligula. Pellentesque eleifend mauris et aliquet dictum. Donec tincidunt aliquet vestibulum. Curabitur fermentum tortor quis aliquam dictum. Integer eget consectetur ante. Suspendisse egestas arcu sit amet libero sodales, eu consectetur lectus vulputate. Sed ornare fringilla ante, non egestas elit imperdiet eget. Maecenas sit amet arcu hendrerit, sodales enim placerat, ultrices dolor.

Benchmarks

Nulla vehicula libero nec consectetur vestibulum. In tincidunt nisi nec libero mattis, ac molestie velit consectetur. Morbi sed ex at dui egestas tincidunt. Cras eget dignissim lorem. Praesent rutrum aliquet sem non tincidunt. Curabitur vehicula metus elit, non luctus felis vestibulum non. Ut vehicula id lacus a molestie. Vestibulum id tempus mi. Sed eget metus ligula. Pellentesque eleifend mauris et aliquet dictum. Donec tincidunt aliquet vestibulum. Curabitur fermentum tortor quis aliquam dictum. Integer eget consectetur ante. Suspendisse egestas arcu sit amet libero sodales, eu consectetur lectus vulputate. Sed ornare fringilla ante, non egestas elit imperdiet eget. Maecenas sit amet arcu hendrerit, sodales enim placerat, ultrices dolor.