Git Product home page Git Product logo

lidar-search's Introduction

LiDAR Object Detection - Region ikd-Trees & RANSAC

Raw data

raw

Radius tree search

radius

Box tree search

box

How does a K dimensional tree work?

Building / Insertion

Assuming k = 2 dimensions, below is a short demo

  1. The first inserted node, (3,6) will be the root.
  2. To insert (17,15), we have to compare it along the X axis with (3,6). Since 17 > 3, we insert it to the RIGHT
  3. To insert (13,16), we have to compare it along the X axis with (3,6), as well as the Y axis of (17,15). Since 13 > 3 and 16 > 15, we insert it to the RIGHT of (17,15)
  4. To insert (6,12), we have to compare it along the X axis with (3,6), as well as Y of (17,15). Since 6 > 3 and 6 < 15, we insert it to the LEFT of (17,15)
  5. To insert (9,1), we compare it with X of (3,6), Y of (17,15) and X of (6,12). Since 9 > 3 and 1 < 15 and 9 > 6, it goes to the RIGHT of (6,2)
  6. To insert (10,19) we compare it with X of (3,6), Y of (17,15) and X of (13,15). Since 10 > 3 and 19 > 15 and 10 < 13, it goes to the LEFT of (13,15)
  7. Lastly, to insert (2,7), we compare it to the X of (3,6), and since 2 < 7, we put it to the LEFT of the root node.

Searching

Since at every step we get rid of one dimension (either X or Y), we make twice the progress we would make by iterating linearly through the three, which means the search is performed in logarithmic time (in this example a log of base 2), so this speeds up things while marking all the clusters of points and then telling them apart via Euclidian distance between neighboring points

To look up (10,19) for instance, we:

  1. Eliminate the LEFT side (2,7) of the tree from the root since 10 > 3, and proceed to only search to the RIGHT
  2. Eliminate the LEFT side (6,12) -> (9,1) of the subtree having the root (17,15) since 19 > 15, and proceed to only search to the RIGHT
  3. Find (10,19) to the LEFT side the subtree having the root (13,15)

Here is a more in depth example using the same numbers

How does RANSAC work?

Again taking a two dimensional example, one can clearly see there is a linear trend in the data below.

However, applying linear regression here would be shifted by the numerous outliers, so to find the best line (and not necesarily the one that accomodates all the points), random sample consensus is used

The algorithm for this is the following:

  1. Randomly select two points to get a line
  2. Compute the line equation via:
$$ax + by + c = 0$$
  1. Get the distance between the formed line and the rest of points using:
$$d = \frac{|ax + by + c|}{\sqrt{a^2 + b^2}}$$
  1. For each point, if its distance from the line is within the chosen threshold, consider the distanced point an inlier
  2. Repeat 1-4 for a chosen number of iterations

This way, only the line which accomodates the most inliers is the one considered.

This is extremly useful for segmenting out the drivable plane/road in three dimensions.

Examples:

Note

The biggest selling point of the region constrained search is that you can choose where you want to look, which makes a lot of sense for some applications.

track (1)

trackFPS

Painless installation of the Point Cloud Library on Windows

(if you want to try out this code):

  • Install vcpkg, Microsoft's unofficial C++ package manager
> git clone https://github.com/microsoft/vcpkg
> .\vcpkg\bootstrap-vcpkg.bat

There is a lot more info to be found at the original repo, but really, this is all you need

  • Install PCL x64
> vcpkg install pcl[vtk]:x64-windows --featurepackages --recurse

Warning If you do not explicitly declare an x64 build, vcpkg will default it to x86 and cmake will probably fail.

  • Next you need to specify the toolchain path to the cmake file
-DCMAKE_TOOLCHAIN_FILE=C:\Path\vcpkg.cmake
  • If you are on a Windows machine, vcpckg will also default your toolchain to MSVC, so you will have to download Visual Studio and use it as the compiler

It looks like this for me (CLion):

image

Based on the original paper:

@misc{https://doi.org/10.48550/arxiv.2102.10808,
  doi = {10.48550/ARXIV.2102.10808}, 
  url = {https://arxiv.org/abs/2102.10808},
  author = {Cai, Yixi and Xu, Wei and Zhang, Fu},
  keywords = {Robotics (cs.RO), FOS: Computer and information sciences, FOS: Computer and information sciences},
  title = {ikd-Tree: An Incremental K-D Tree for Robotic Applications},
  publisher = {arXiv},
  year = {2021},
  copyright = {Creative Commons Attribution 4.0 International}
}

and original repos:

ikd-Tree

LiDAR

lidar-search's People

Contributors

andreimoraru123 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.