Skip to content

Commit 3c3b702

Browse files
committed
Updated benchmark documentation.
1 parent b05705a commit 3c3b702

File tree

1 file changed

+20
-31
lines changed

1 file changed

+20
-31
lines changed

docs/benchmark.md

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,9 @@ One of the PicoTree examples is a small [benchmark](../examples/benchmark/) that
44

55
# Data sets
66

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:
88

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:
13-
14-
* #25 - Würzburg marketplace: 13729039 points.
15-
* #26 - Maria-Schmerz-Kapelle Randersacker: 20793160 points.
9+
* #21 - Bremen Gaussian Point. Authors: Dorit Borrmann and Andreas Nüchter from Jacobs University Bremen gGmbH, Germany.
1610

1711
# Results
1812

@@ -21,43 +15,38 @@ The different KdTree implementations are compared to each other with respect to
2115
* Build algorithm: Compile-time vs. run-time tree dimension for the following building techniques:
2216
* Nanoflann Midpoint variation.
2317
* 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).
2619
* 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).
3220

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:
3622

37-
![Square Build Time](./images/benchmark_square_build_time.png)![Square Radius Search Time](./images/benchmark_square_radius_search_time.png)
23+
* Part 1: 7733372 points.
24+
* Part 2: 7200863 points.
3825

39-
![Square Knn Search Time](./images/benchmark_square_knn_search_time.png)![Square Knn1 Search Time](./images/benchmark_square_knn1_search_time.png)
26+
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.
4027

41-
## #26 - Maria-Schmerz-Kapelle Randersacker.
28+
Results were generated on: 12-04-2021 using MinGW GCC 10.1.
4229

43-
![Square Build Time](./images/benchmark_church_build_time.png)![Square Radius Search Time](./images/benchmark_church_radius_search_time.png)
30+
![Build Time](./images/benchmark_gauss_build_time.png)![Radius Search Time](./images/benchmark_gauss_radius_search_time.png)
4431

45-
![Square Knn Search Time](./images/benchmark_church_knn_search_time.png)![Square Knn1 Search Time](./images/benchmark_church_knn1_search_time.png)
32+
![Knn Search Time](./images/benchmark_gauss_knn_search_time.png)
4633

4734
# Running a new benchmark
4835

49-
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`.
5042

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.
5444

5545
To get performance statistics:
5646

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/)).
5949

6050
Note the following:
6151

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

Comments
 (0)