TypingCat / spatial-topology-teleoperation

Teleoperation for Mobile Robot using Semantics
GNU General Public License v3.0
4 stars 0 forks source link

Local topology extraction history #12

Closed TypingCat closed 3 years ago

TypingCat commented 3 years ago

This feature was developed before this package was created and tested on issue #6. There were two issues and LiDAR-Thinning approach was adopted. Let me introduce the history.

TypingCat commented 3 years ago

Topology extraction proceeded in two stages. Detect the movable area, and specify the structure of the space as a graph. For example, the second image is the movable area in the first image. The third image is the result of world-coordinate transform. Finally, the topology was extracted in the fourth image.

local_topology_extraction_plan

There were following issues:

TypingCat commented 3 years ago

There are two options for detecting the movable area.

The first option is to use Light Detection and Ranging(LiDAR). The coordinates detected by LiDAR are the vertices of the movable area. Simple, but it cannot respond to obstacles such as chairs and stairs because 3D scanning is not supported. Operates up to 10Hz.

area_detection_LiDAR

Another option is to use a RGBD camera. Ground can be detected with semantic segmentation from the camera image. I tested the semantic segmentation packages of Nvidia, MIT, PixelLib, and CSAIL. There is a critical problem that it cannot respond to reflected light. Operate up to 1Hz.

area_detection_camera

Therefore, LiDAR was adopted as the detection method.

TypingCat commented 3 years ago

There are two options for extracting topology.

The first option is Generalized Voronoi Diagram(GVD)(left). This method is traditionally used in the field of mobile robots. It is advantageous to keep the distance from obstacles. Another option is the thinning of image processing(right). It doesn't draw a strict spatial structure like GVD, but parallel computation is possible.

topology_extraction

Thinning was adopted considering reasonable results and fast processing.

TypingCat commented 3 years ago

Converting the above image to a graph is simple. Extract the outline, and build the graph by traversing it. Here is the result. See issue #6 for details.

extract_topology