/lidar-obstacle-detection

Project: Lidar Obstacle Detection || Udacity: Sensor Fusion Engineer Nanodegree

Primary LanguageC++MIT LicenseMIT

Lidar Obstacle Detection

Sensor Fusion Engineer Nanodegree

This project contains code that demonstrates techniques of working with the real point cloud data collected with the Lidar sensor. The code extensively utilizes the Point Cloud Library (PCL).

  • The RANSAC algorithm is responsible for the separation between the road plane and obstacles. One can either choose between the PCL implementation of this algorithm or use the implementation provided in the src/Ransac.hpp file.
  • The obstacle identification is made using the Euclidean clustering algorithm, which internally uses a k-d tree to speed up the search of points in the point cloud. One can either choose between the PCL implementation of this algorithm or use the implementation provided in the src/EuclideanClusterExtraction.hpp file.
  • Internally, Euclidean clustering algorithm uses the k-d tree to speed-up the search of points lying in the close proximity with the provided target point. The implementation of the Euclidean clustering algorithm provided in the src/EuclideanClusterExtraction.hpp file utilizes the k-d tree implementation from the file src/KDTree.hpp.

Dependencies

  • cmake >= 3.14
  • gcc/g++ >= 8.0
  • PCL >= 1.2

Build

$> mkdir build
$> cd build
$> cmake ..
$> make
$> cd ..

Run

$> build/lidar_obstacle_detection

or

$> lidar_obstacle_detection data/pcd/data_<num> <use_pcl>

where <num> can be 1 or 2 and <use_pcl> can be true or false. By default, <num> is set to 1 and <use_pcl> is set to false, meaning that implementations of RANSAC, Euclidean clustering, and k-d tree algorithms presented in this repository will be used.

Demo

First set of point clouds

ANIMATION ANIMATION

Second set of point clouds

ANIMATION ANIMATION

Results Description

On the upper side in the Demo section, the initial (unprocessed) point clouds are presented. On the lower side, there are processed point clouds, with identified and clustered points belonging to obstacles (cars, road signs, bicyclists). Bounding boxes illustrate this separation.