Skip to content

origovi/uricones

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UriCones

UriCones is a point-cloud-only DBSCAN-based cone detector specifically designed for Formula Student driverless events.

It explodes the fact that in Formula Student, cones delimit the track and are isolated from any other object, i.e. the only thing close to cones are (other) cones.

It takes as input the raw LiDAR scan(s) and produces for each new frame, a set of detections.

Pipeline

These are the key concepts that lead to its performance.

1. Point cloud accumulation

When coupling these package to the output of a LiDAR-based slam, it can take the point cloud produced at each slam iteration (deskewed and transformed) and accumulate them using a temporal buffer to enhance the point cloud's resolution and obtain better results.

2. Ground removal

Ground removal is an essential step for the algorithm, to get a clear view of the cones and to make sure the methods in following points work well, point cloud should be polished as much as possible, we should then remove the ground.

3. Clustering (DBSCAN)

Now that we have a clean point cloud without ground, we will exploit the fact that cones represent very dense areas in space. We can cluster points based on density using DBSCAN. Now we have a set of clusters, some of which are cones.

4. Convex-hull and diameter

To now filter the clusters and obtain cones, we take advantage of:

  1. Big structures do not have any cones near → discard clusters close to big clusters.
  2. The bigger the object is, the less probable it is that there is a cone nearby.

To quantize how big a cluster is, we do it by taking the diameter of the cluster's point cloud, this is the segment obtained from the points which are the farthest apart from each other. To avoid a double for loop with quadratic complexity, we first compute the convex hull of the cluster's point cloud and then find the max distance points.

Now we remove clusters that are within a radius of other clusters. This radius is computed from the cluster's diameter and a weighting factor $f_\text{weight}$. So if we have two clusters $c_1$, $c_2$ with diameters $d_1$, $d_2$ and the distance between the two segments (diameters) is $d_{1,2}$, then $c_2$ is filtered out if: $$\min(d_1* f_\text{weight}, d_\text{max}) > d_{1,2}$$

Note that the $\min$ function is to avoid very large objects to remove everything.

Of course we also filter out big remaining clusters by a threshold on its diameter, i.e.: $$d_i > d_\text{max}$$

Now every cluster remaining should either be a cone or lonely objects, but remember, lonely objects are likely not a cone and can also be removed.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages