You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/benchmark.md
+20-31Lines changed: 20 additions & 31 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,15 +4,9 @@ One of the PicoTree examples is a small [benchmark](../examples/benchmark/) that
4
4
5
5
# Data sets
6
6
7
-
The [Robotic 3D Scan Repository](http://kos.informatik.uni-osnabrueck.de/3Dscans/) provides several 3D point clouds. The following two have been used for the comparison benchmark:
7
+
The [Robotic 3D Scan Repository](http://kos.informatik.uni-osnabrueck.de/3Dscans/) provides several 3D point clouds that have been generated using a LiDAR scanner. The following has been used for the comparison benchmark:
8
8
9
-
*#25 - Würzburg marketplace. Authors: Johannes Schauer, Andreas Nüchter from the University of Würzburg, Germany.
10
-
*#26 - Maria-Schmerz-Kapelle Randersacker. Authors: Andreas Nüchter, Helge Andreas Lauterbach from the University of Würzburg, Germany.
11
-
12
-
Both have been generated using a LiDAR scanner and represent different types of environments. The running time of the benchmark was kept reasonable by using a subset of points and storing those in a simple binary format. The final point cloud sizes were as follows:
*#21 - Bremen Gaussian Point. Authors: Dorit Borrmann and Andreas Nüchter from Jacobs University Bremen gGmbH, Germany.
16
10
17
11
# Results
18
12
@@ -21,43 +15,38 @@ The different KdTree implementations are compared to each other with respect to
21
15
* Build algorithm: Compile-time vs. run-time tree dimension for the following building techniques:
22
16
* Nanoflann Midpoint variation.
23
17
* PicoTree Sliding Midpoint (along the longest axis).
24
-
* PicoTree Longest Axis Median.
25
-
* Radius search algorithm: The radius in meters divided by 10 (i.e. 0.2m and 0.4m).
18
+
* Radius search algorithm: The radius in meters divided by 10 (i.e. 1.5m and 3.0m).
26
19
* Knn algorithm: The amount of neighbors searched.
27
-
* For a "special" case of the knn algorithm, where `k` is set to `1`, the search speed is compared with respect to the three previously mentioned tree building techniques.
28
-
29
-
Note that the run time describes a single invocation of a build algorithm and n invocations of the others.
30
-
31
-
It is interesting to see that finding a single nearest neighbor can be quite a bit faster using the Longest Axis Median splitting technique. However, building the tree or querying multiple neighbors is slower. The extra time it takes to build the tree is no longer a factor when the tree is queried multiple times (on the test sets this was about `2n-4n` times). This means the splitting technique can be useful in combination with an algorithm like [ICP](https://en.wikipedia.org/wiki/Iterative_closest_point).
32
20
33
-
Results were generated on: 12-04-2021 using MinGW GCC 10.1.
34
-
35
-
## #25 - Würzburg marketplace.
21
+
The running time of the benchmark was kept reasonable by using two subsets of points and storing those in a simple binary format. The final point cloud sizes were as follows:
Both parts are 360 degree scans taken from different positions. The first is used to build a tree and the second for querying that tree. Note that each run time describes a single invocation of a build algorithm and n invocations of the others.
40
27
41
-
## #26 - Maria-Schmerz-Kapelle Randersacker.
28
+
Results were generated on: 12-04-2021 using MinGW GCC 10.1.
The following steps can be taken to reproduce the data sets:
36
+
The following steps can be taken to generate data sets:
37
+
38
+
1. Download and unpack a data set. This results in a directory containing pairs of `.3d` and `.pose` files, each representing a LiDAR scan.
39
+
2. Select any of the scans (corresponding pairs of `.3d` and `.pose` files) to compile into a binary.
40
+
3. Run the `uosr_to_bin` executable as a sibling to the selected scans to generate a `scans.bin` file.
41
+
4. Two point clouds are required for a benchmark. The first should be named `scans0.bin` and the second `scans1.bin`.
50
42
51
-
1. Download and unpack a data set. This results in a directory containing several pairs of `.3d` and `.pose` files, each representing a LiDAR scan.
52
-
2. Delete all scans but the first one (only keeping `scan000.3d` and `scan000.pose`).
53
-
3. Run the `uosr_to_bin` executable as a sibling to the scan to generate a `scans.bin` file.
43
+
To reproduce the exact point clouds used by the benchmark on the Bremen Gaussian Point dataset, use scans 0-8 for the first cloud and scans 9-17 for the second.
54
44
55
45
To get performance statistics:
56
46
57
-
4. Run the `benchmark` executable as a sibling to the `scans.bin` file and set the output format to `json`.
58
-
5. Run `plot_benchmarks.py` to show and store the performance plots (requires Python with [Matplotlib](https://matplotlib.org/)).
47
+
5. Run the `bm_pico_kd_tree` or `bm_nanoflann` executables as a sibling to the `scans.bin` file and set the output format to `json`.
48
+
6. Run `plot_benchmarks.py` to show and store the performance plots (requires Python with [Matplotlib](https://matplotlib.org/)).
59
49
60
50
Note the following:
61
51
62
-
* The `uosr_to_bin` tool simply combines all pairs of `.3d` and `.pose` files into a single `.bin` file. This means a bigger point cloud can be used for benchmarking.
63
-
* A `.txt` file can be generated from the `.bin` file by running the `bin_to_ascii` executable (as a sibling to the binary file). Each line in the output file is a 3D point.
52
+
* A `scans.txt` file can be generated from the `scans.bin` file by running the `bin_to_ascii` executable (as a sibling to the binary file). Each line in the output file is a 3D point.
0 commit comments