small-gicp 0.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. small_gicp-0.0.3/.clang-format +168 -0
  2. small_gicp-0.0.3/.github/workflows/build-linux.yml +40 -0
  3. small_gicp-0.0.3/.github/workflows/build-windows.yml +32 -0
  4. small_gicp-0.0.3/.github/workflows/coverage.yml +55 -0
  5. small_gicp-0.0.3/.github/workflows/test.yml +38 -0
  6. small_gicp-0.0.3/.gitignore +10 -0
  7. small_gicp-0.0.3/.pytest_cache/.gitignore +2 -0
  8. small_gicp-0.0.3/.pytest_cache/CACHEDIR.TAG +4 -0
  9. small_gicp-0.0.3/.pytest_cache/README.md +8 -0
  10. small_gicp-0.0.3/.pytest_cache/v/cache/lastfailed +3 -0
  11. small_gicp-0.0.3/.pytest_cache/v/cache/nodeids +1 -0
  12. small_gicp-0.0.3/.pytest_cache/v/cache/stepwise +1 -0
  13. small_gicp-0.0.3/BENCHMARK.md +119 -0
  14. small_gicp-0.0.3/CMakeLists.txt +328 -0
  15. small_gicp-0.0.3/LICENSE +21 -0
  16. small_gicp-0.0.3/PKG-INFO +397 -0
  17. small_gicp-0.0.3/README.md +385 -0
  18. small_gicp-0.0.3/cmake/FindIridescence.cmake +21 -0
  19. small_gicp-0.0.3/cmake/small_gicp-config.cmake.in +28 -0
  20. small_gicp-0.0.3/codecov.yml +6 -0
  21. small_gicp-0.0.3/data/T_target_source.txt +4 -0
  22. small_gicp-0.0.3/data/source.ply +0 -0
  23. small_gicp-0.0.3/data/target.ply +0 -0
  24. small_gicp-0.0.3/docker/Dockerfile.build.gcc +23 -0
  25. small_gicp-0.0.3/docker/Dockerfile.build.llvm +33 -0
  26. small_gicp-0.0.3/docker/Dockerfile.test.gcc +31 -0
  27. small_gicp-0.0.3/docker/Dockerfile.test.llvm +41 -0
  28. small_gicp-0.0.3/docs/assets/downsampling_comp.png +0 -0
  29. small_gicp-0.0.3/docs/assets/downsampling_threads.png +0 -0
  30. small_gicp-0.0.3/docs/assets/kdtree_time.png +0 -0
  31. small_gicp-0.0.3/docs/assets/odometry_native.png +0 -0
  32. small_gicp-0.0.3/docs/assets/odometry_time.png +0 -0
  33. small_gicp-0.0.3/include/small_gicp/ann/flat_container.hpp +146 -0
  34. small_gicp-0.0.3/include/small_gicp/ann/gaussian_voxelmap.hpp +88 -0
  35. small_gicp-0.0.3/include/small_gicp/ann/incremental_voxelmap.hpp +251 -0
  36. small_gicp-0.0.3/include/small_gicp/ann/kdtree.hpp +105 -0
  37. small_gicp-0.0.3/include/small_gicp/ann/kdtree_omp.hpp +22 -0
  38. small_gicp-0.0.3/include/small_gicp/ann/kdtree_tbb.hpp +22 -0
  39. small_gicp-0.0.3/include/small_gicp/ann/nanoflann.hpp +2048 -0
  40. small_gicp-0.0.3/include/small_gicp/ann/nanoflann_omp.hpp +657 -0
  41. small_gicp-0.0.3/include/small_gicp/ann/nanoflann_tbb.hpp +639 -0
  42. small_gicp-0.0.3/include/small_gicp/ann/traits.hpp +60 -0
  43. small_gicp-0.0.3/include/small_gicp/benchmark/benchmark.hpp +146 -0
  44. small_gicp-0.0.3/include/small_gicp/benchmark/benchmark_odom.hpp +118 -0
  45. small_gicp-0.0.3/include/small_gicp/benchmark/read_points.hpp +111 -0
  46. small_gicp-0.0.3/include/small_gicp/factors/general_factor.hpp +77 -0
  47. small_gicp-0.0.3/include/small_gicp/factors/gicp_factor.hpp +93 -0
  48. small_gicp-0.0.3/include/small_gicp/factors/icp_factor.hpp +69 -0
  49. small_gicp-0.0.3/include/small_gicp/factors/plane_icp_factor.hpp +74 -0
  50. small_gicp-0.0.3/include/small_gicp/pcl/pcl_point.hpp +35 -0
  51. small_gicp-0.0.3/include/small_gicp/pcl/pcl_point_traits.hpp +38 -0
  52. small_gicp-0.0.3/include/small_gicp/pcl/pcl_proxy.hpp +37 -0
  53. small_gicp-0.0.3/include/small_gicp/pcl/pcl_registration.hpp +116 -0
  54. small_gicp-0.0.3/include/small_gicp/pcl/pcl_registration_impl.hpp +248 -0
  55. small_gicp-0.0.3/include/small_gicp/points/eigen.hpp +19 -0
  56. small_gicp-0.0.3/include/small_gicp/points/point_cloud.hpp +98 -0
  57. small_gicp-0.0.3/include/small_gicp/points/traits.hpp +81 -0
  58. small_gicp-0.0.3/include/small_gicp/registration/optimizer.hpp +157 -0
  59. small_gicp-0.0.3/include/small_gicp/registration/reduction.hpp +65 -0
  60. small_gicp-0.0.3/include/small_gicp/registration/reduction_omp.hpp +71 -0
  61. small_gicp-0.0.3/include/small_gicp/registration/reduction_tbb.hpp +141 -0
  62. small_gicp-0.0.3/include/small_gicp/registration/registration.hpp +53 -0
  63. small_gicp-0.0.3/include/small_gicp/registration/registration_helper.hpp +85 -0
  64. small_gicp-0.0.3/include/small_gicp/registration/registration_result.hpp +32 -0
  65. small_gicp-0.0.3/include/small_gicp/registration/rejector.hpp +30 -0
  66. small_gicp-0.0.3/include/small_gicp/registration/termination_criteria.hpp +23 -0
  67. small_gicp-0.0.3/include/small_gicp/util/downsampling.hpp +105 -0
  68. small_gicp-0.0.3/include/small_gicp/util/downsampling_omp.hpp +91 -0
  69. small_gicp-0.0.3/include/small_gicp/util/downsampling_tbb.hpp +85 -0
  70. small_gicp-0.0.3/include/small_gicp/util/fast_floor.hpp +17 -0
  71. small_gicp-0.0.3/include/small_gicp/util/lie.hpp +96 -0
  72. small_gicp-0.0.3/include/small_gicp/util/normal_estimation.hpp +151 -0
  73. small_gicp-0.0.3/include/small_gicp/util/normal_estimation_omp.hpp +85 -0
  74. small_gicp-0.0.3/include/small_gicp/util/normal_estimation_tbb.hpp +83 -0
  75. small_gicp-0.0.3/include/small_gicp/util/sort_omp.hpp +75 -0
  76. small_gicp-0.0.3/include/small_gicp/util/vector3i_hash.hpp +26 -0
  77. small_gicp-0.0.3/package.xml +22 -0
  78. small_gicp-0.0.3/pyproject.toml +38 -0
  79. small_gicp-0.0.3/scripts/plot_downsampling.py +127 -0
  80. small_gicp-0.0.3/scripts/plot_kdtree.py +92 -0
  81. small_gicp-0.0.3/scripts/plot_odometry.py +89 -0
  82. small_gicp-0.0.3/scripts/plot_odometry_accuracy.py +91 -0
  83. small_gicp-0.0.3/scripts/plot_odometry_native.py +66 -0
  84. small_gicp-0.0.3/scripts/run_downsampling_benchmark.sh +11 -0
  85. small_gicp-0.0.3/scripts/run_kdtree_benchmark.sh +18 -0
  86. small_gicp-0.0.3/scripts/run_odometry_benchmark.sh +20 -0
  87. small_gicp-0.0.3/scripts/run_odometry_benchmark_native.sh +20 -0
  88. small_gicp-0.0.3/src/benchmark/downsampling_benchmark.cpp +137 -0
  89. small_gicp-0.0.3/src/benchmark/kdtree_benchmark.cpp +167 -0
  90. small_gicp-0.0.3/src/benchmark/odometry_benchmark.cpp +97 -0
  91. small_gicp-0.0.3/src/benchmark/odometry_benchmark_fast_gicp.cpp +66 -0
  92. small_gicp-0.0.3/src/benchmark/odometry_benchmark_fast_vgicp.cpp +69 -0
  93. small_gicp-0.0.3/src/benchmark/odometry_benchmark_pcl.cpp +63 -0
  94. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_gicp.cpp +60 -0
  95. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_gicp_model_tbb.cpp +75 -0
  96. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_gicp_omp.cpp +67 -0
  97. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_gicp_pcl.cpp +65 -0
  98. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_gicp_tbb.cpp +70 -0
  99. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_gicp_tbb_flow.cpp +183 -0
  100. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_vgicp_model_tbb.cpp +75 -0
  101. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_vgicp_omp.cpp +65 -0
  102. small_gicp-0.0.3/src/benchmark/odometry_benchmark_small_vgicp_tbb.cpp +73 -0
  103. small_gicp-0.0.3/src/example/01_basic_registration.cpp +71 -0
  104. small_gicp-0.0.3/src/example/02_basic_registration_pcl.cpp +107 -0
  105. small_gicp-0.0.3/src/example/03_registration_template.cpp +336 -0
  106. small_gicp-0.0.3/src/example/basic_registration.py +158 -0
  107. small_gicp-0.0.3/src/example/kitti_odometry.py +98 -0
  108. small_gicp-0.0.3/src/python/align.cpp +148 -0
  109. small_gicp-0.0.3/src/python/factors.cpp +86 -0
  110. small_gicp-0.0.3/src/python/kdtree.cpp +35 -0
  111. small_gicp-0.0.3/src/python/misc.cpp +27 -0
  112. small_gicp-0.0.3/src/python/pointcloud.cpp +53 -0
  113. small_gicp-0.0.3/src/python/preprocess.cpp +161 -0
  114. small_gicp-0.0.3/src/python/python.cpp +27 -0
  115. small_gicp-0.0.3/src/python/result.cpp +40 -0
  116. small_gicp-0.0.3/src/python/voxelmap.cpp +70 -0
  117. small_gicp-0.0.3/src/small_gicp/benchmark/benchmark_odom.cpp +29 -0
  118. small_gicp-0.0.3/src/small_gicp/registration/registration.cpp +5 -0
  119. small_gicp-0.0.3/src/small_gicp/registration/registration_helper.cpp +131 -0
  120. small_gicp-0.0.3/src/test/downsampling_test.cpp +94 -0
  121. small_gicp-0.0.3/src/test/kdtree_test.cpp +241 -0
  122. small_gicp-0.0.3/src/test/normal_estimation_test.cpp +263 -0
  123. small_gicp-0.0.3/src/test/points_test.cpp +60 -0
  124. small_gicp-0.0.3/src/test/python_test.py +190 -0
  125. small_gicp-0.0.3/src/test/registration_test.cpp +344 -0
  126. small_gicp-0.0.3/src/test/sort_omp_test.cpp +107 -0
  127. small_gicp-0.0.3/src/test/vector_test.cpp +31 -0
@@ -0,0 +1,168 @@
1
+ ---
2
+ Language: Cpp
3
+ # BasedOnStyle: Google
4
+ AccessModifierOffset: -2
5
+ AlignAfterOpenBracket: AlwaysBreak
6
+ AlignConsecutiveMacros: false
7
+ AlignConsecutiveAssignments: false
8
+ AlignConsecutiveDeclarations: false
9
+ AlignEscapedNewlines: Left
10
+ AlignOperands: true
11
+ AlignTrailingComments: true
12
+ AllowAllArgumentsOnNextLine: false
13
+ AllowAllConstructorInitializersOnNextLine: false
14
+ AllowAllParametersOfDeclarationOnNextLine: false
15
+ AllowShortBlocksOnASingleLine: Never
16
+ AllowShortCaseLabelsOnASingleLine: false
17
+ AllowShortFunctionsOnASingleLine: Inline
18
+ AllowShortLambdasOnASingleLine: All
19
+ AllowShortIfStatementsOnASingleLine: WithoutElse
20
+ AllowShortLoopsOnASingleLine: true
21
+ AlwaysBreakAfterDefinitionReturnType: None
22
+ AlwaysBreakAfterReturnType: None
23
+ AlwaysBreakBeforeMultilineStrings: true
24
+ AlwaysBreakTemplateDeclarations: Yes
25
+ BinPackArguments: false
26
+ BinPackParameters: false
27
+ BraceWrapping:
28
+ AfterCaseLabel: false
29
+ AfterClass: false
30
+ AfterControlStatement: false
31
+ AfterEnum: false
32
+ AfterFunction: false
33
+ AfterNamespace: false
34
+ AfterObjCDeclaration: false
35
+ AfterStruct: false
36
+ AfterUnion: false
37
+ AfterExternBlock: false
38
+ BeforeCatch: false
39
+ BeforeElse: false
40
+ IndentBraces: false
41
+ SplitEmptyFunction: true
42
+ SplitEmptyRecord: true
43
+ SplitEmptyNamespace: true
44
+ BreakBeforeBinaryOperators: None
45
+ BreakBeforeBraces: Attach
46
+ BreakBeforeInheritanceComma: false
47
+ BreakInheritanceList: BeforeColon
48
+ BreakBeforeTernaryOperators: true
49
+ BreakConstructorInitializersBeforeComma: false
50
+ BreakConstructorInitializers: BeforeColon
51
+ BreakAfterJavaFieldAnnotations: false
52
+ BreakStringLiterals: true
53
+ ColumnLimit: 180
54
+ CommentPragmas: '^ IWYU pragma:'
55
+ CompactNamespaces: false
56
+ ConstructorInitializerAllOnOneLineOrOnePerLine: true
57
+ ConstructorInitializerIndentWidth: 0
58
+ ContinuationIndentWidth: 2
59
+ Cpp11BracedListStyle: true
60
+ DeriveLineEnding: true
61
+ DerivePointerAlignment: false
62
+ DisableFormat: false
63
+ ExperimentalAutoDetectBinPacking: false
64
+ FixNamespaceComments: true
65
+ ForEachMacros:
66
+ - foreach
67
+ - Q_FOREACH
68
+ - BOOST_FOREACH
69
+ IncludeBlocks: Regroup
70
+ IncludeCategories:
71
+ - Regex: '^<ext/.*\.h>'
72
+ Priority: 2
73
+ SortPriority: 0
74
+ - Regex: '^<.*\.h>'
75
+ Priority: 1
76
+ SortPriority: 0
77
+ - Regex: '^<.*'
78
+ Priority: 2
79
+ SortPriority: 0
80
+ - Regex: '.*'
81
+ Priority: 3
82
+ SortPriority: 0
83
+ IncludeIsMainRegex: '([-_](test|unittest))?$'
84
+ IncludeIsMainSourceRegex: ''
85
+ IndentCaseLabels: true
86
+ IndentGotoLabels: true
87
+ IndentPPDirectives: None
88
+ IndentWidth: 2
89
+ IndentWrappedFunctionNames: false
90
+ JavaScriptQuotes: Leave
91
+ JavaScriptWrapImports: true
92
+ KeepEmptyLinesAtTheStartOfBlocks: false
93
+ MacroBlockBegin: ''
94
+ MacroBlockEnd: ''
95
+ MaxEmptyLinesToKeep: 1
96
+ NamespaceIndentation: None
97
+ ObjCBinPackProtocolList: Never
98
+ ObjCBlockIndentWidth: 2
99
+ ObjCSpaceAfterProperty: false
100
+ ObjCSpaceBeforeProtocolList: true
101
+ PenaltyBreakAssignment: 2
102
+ PenaltyBreakBeforeFirstCallParameter: 1
103
+ PenaltyBreakComment: 300
104
+ PenaltyBreakFirstLessLess: 120
105
+ PenaltyBreakString: 1000
106
+ PenaltyBreakTemplateDeclaration: 10
107
+ PenaltyExcessCharacter: 1000000
108
+ PenaltyReturnTypeOnItsOwnLine: 200
109
+ PointerAlignment: Left
110
+ RawStringFormats:
111
+ - Language: Cpp
112
+ Delimiters:
113
+ - cc
114
+ - CC
115
+ - cpp
116
+ - Cpp
117
+ - CPP
118
+ - 'c++'
119
+ - 'C++'
120
+ CanonicalDelimiter: ''
121
+ BasedOnStyle: google
122
+ - Language: TextProto
123
+ Delimiters:
124
+ - pb
125
+ - PB
126
+ - proto
127
+ - PROTO
128
+ EnclosingFunctions:
129
+ - EqualsProto
130
+ - EquivToProto
131
+ - PARSE_PARTIAL_TEXT_PROTO
132
+ - PARSE_TEST_PROTO
133
+ - PARSE_TEXT_PROTO
134
+ - ParseTextOrDie
135
+ - ParseTextProtoOrDie
136
+ CanonicalDelimiter: ''
137
+ BasedOnStyle: google
138
+ ReflowComments: true
139
+ SortIncludes: false
140
+ SortUsingDeclarations: true
141
+ SpaceAfterCStyleCast: false
142
+ SpaceAfterLogicalNot: false
143
+ SpaceAfterTemplateKeyword: true
144
+ SpaceBeforeAssignmentOperators: true
145
+ SpaceBeforeCpp11BracedList: false
146
+ SpaceBeforeCtorInitializerColon: true
147
+ SpaceBeforeInheritanceColon: true
148
+ SpaceBeforeParens: ControlStatements
149
+ SpaceBeforeRangeBasedForLoopColon: true
150
+ SpaceInEmptyBlock: false
151
+ SpaceInEmptyParentheses: false
152
+ SpacesBeforeTrailingComments: 2
153
+ SpacesInAngles: false
154
+ SpacesInConditionalStatement: false
155
+ SpacesInContainerLiterals: true
156
+ SpacesInCStyleCastParentheses: false
157
+ SpacesInParentheses: false
158
+ SpacesInSquareBrackets: false
159
+ SpaceBeforeSquareBrackets: false
160
+ Standard: Auto
161
+ StatementMacros:
162
+ - Q_UNUSED
163
+ - QT_REQUIRE_VERSION
164
+ TabWidth: 8
165
+ UseCRLF: false
166
+ UseTab: Never
167
+ ...
168
+
@@ -0,0 +1,40 @@
1
+ name: Build(Linux)
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ paths-ignore: '**.md'
7
+ pull_request:
8
+ branches: [ master ]
9
+ paths-ignore: '**.md'
10
+
11
+ # Allows you to run this workflow manually from the Actions tab
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ build:
16
+ runs-on: ubuntu-latest
17
+ strategy:
18
+ matrix:
19
+ DISTRO: [noble, jammy, focal]
20
+ TOOLCHAIN: [gcc, llvm]
21
+
22
+ steps:
23
+ - uses: actions/checkout@v2
24
+ with:
25
+ submodules: recursive
26
+
27
+ - name: Docker login
28
+ continue-on-error: true
29
+ uses: docker/login-action@v1
30
+ with:
31
+ username: ${{ secrets.DOCKER_USERNAME }}
32
+ password: ${{ secrets.DOCKER_TOKEN }}
33
+
34
+ - name: Docker build
35
+ uses: docker/build-push-action@v2
36
+ with:
37
+ file: ${{github.workspace}}/docker/Dockerfile.build.${{ matrix.TOOLCHAIN }}
38
+ build-args: BASE_IMAGE=ubuntu:${{ matrix.DISTRO }}
39
+ context: .
40
+ push: false
@@ -0,0 +1,32 @@
1
+ name: Build(Windows)
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ paths-ignore: '**.md'
7
+ pull_request:
8
+ branches: [ master ]
9
+ paths-ignore: '**.md'
10
+
11
+ # Allows you to run this workflow manually from the Actions tab
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ build:
16
+ runs-on: windows-latest
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - uses: microsoft/setup-msbuild@v2
22
+
23
+ - uses: actions/setup-python@v5
24
+ with:
25
+ python-version: '3.12'
26
+ cache: 'pip'
27
+
28
+ - run: pip install numpy scipy pytest
29
+
30
+ - run: pip install .
31
+
32
+ - run: python -m pytest src/test/python_test.py -v
@@ -0,0 +1,55 @@
1
+ name: Coverage
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ paths-ignore: '**.md'
7
+ pull_request:
8
+ branches: [ master ]
9
+ paths-ignore: '**.md'
10
+
11
+ # Allows you to run this workflow manually from the Actions tab
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ coverage:
16
+ runs-on: ubuntu-22.04
17
+
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ with:
21
+ submodules: recursive
22
+
23
+ - name: Install Dependencies
24
+ run: |
25
+ sudo apt-get -y update
26
+ sudo apt-get install --no-install-recommends -y build-essential cmake python3-pip pybind11-dev libeigen3-dev libfmt-dev libtbb-dev libomp-dev libpcl-dev libgtest-dev lcov
27
+ pip install -U setuptools pytest pytest-cov numpy scipy
28
+
29
+ - name: Build (C++)
30
+ run: |
31
+ mkdir build && cd build
32
+ cmake .. -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON -DBUILD_BENCHMARKS=ON -DBUILD_WITH_TBB=ON -DBUILD_WITH_PCL=ON -DENABLE_COVERAGE=ON
33
+ make -j$(nproc)
34
+
35
+ - name: Test (C++)
36
+ run: |
37
+ cd build
38
+ ctest -j$(nproc)
39
+ make coverage
40
+
41
+ - name: Build (Python)
42
+ run: |
43
+ pip install . --user
44
+
45
+ - name: Test (Python)
46
+ run: |
47
+ pytest src/example/basic_registration.py --cov=src --cov-report=xml
48
+ pytest src/test/python_test.py --cov=src --cov-report=xml
49
+
50
+ - name: Upload coverage reports to Codecov
51
+ uses: codecov/codecov-action@v4.0.1
52
+ with:
53
+ token: ${{ secrets.CODECOV_TOKEN }}
54
+ slug: koide3/small_gicp
55
+ files: build/coverage.info,coverage.xml
@@ -0,0 +1,38 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ paths-ignore: '**.md'
7
+ pull_request:
8
+ branches: [ master ]
9
+ paths-ignore: '**.md'
10
+
11
+ # Allows you to run this workflow manually from the Actions tab
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ test:
16
+ runs-on: ubuntu-22.04
17
+
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ with:
21
+ submodules: recursive
22
+
23
+ - name: Install Dependencies
24
+ run: |
25
+ sudo apt-get -y update
26
+ sudo apt-get install --no-install-recommends -y build-essential cmake python3-pip pybind11-dev libeigen3-dev libfmt-dev libtbb-dev libomp-dev libpcl-dev libgtest-dev
27
+ pip install -U setuptools pytest numpy scipy
28
+
29
+ - name: Build
30
+ run: |
31
+ mkdir build && cd build
32
+ cmake .. -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON -DBUILD_BENCHMARKS=ON -DBUILD_WITH_TBB=ON -DBUILD_WITH_PCL=ON
33
+ cmake --build . -j$(nproc)
34
+ ctest -j$(nproc)
35
+ cd ..
36
+ pip install . --user
37
+ pytest src/example/basic_registration.py
38
+ pytest src/test/python_test.py
@@ -0,0 +1,10 @@
1
+ .vscode/*
2
+ build/*
3
+ imgui.ini
4
+
5
+ *.pyc
6
+
7
+ dist/*
8
+ small_gicp.egg-info/*
9
+
10
+ scripts/results/*
@@ -0,0 +1,2 @@
1
+ # Created by pytest automatically.
2
+ *
@@ -0,0 +1,4 @@
1
+ Signature: 8a477f597d28d172789f06886806bc55
2
+ # This file is a cache directory tag created by pytest.
3
+ # For information about cache directory tags, see:
4
+ # https://bford.info/cachedir/spec.html
@@ -0,0 +1,8 @@
1
+ # pytest cache directory #
2
+
3
+ This directory contains data from the pytest's cache plugin,
4
+ which provides the `--lf` and `--ff` options, as well as the `cache` fixture.
5
+
6
+ **Do not** commit this to version control.
7
+
8
+ See [the docs](https://docs.pytest.org/en/stable/how-to/cache.html) for more information.
@@ -0,0 +1,3 @@
1
+ {
2
+ "src/test": true
3
+ }
@@ -0,0 +1 @@
1
+ []
@@ -0,0 +1,119 @@
1
+ # Benchmark
2
+
3
+ ## Build
4
+
5
+ ```bash
6
+ cd small_gicp
7
+ mkdir build && cd build
8
+
9
+ cmake .. -DBUILD_WITH_TBB=ON -DBUILD_WITH_PCL=ON -DBUILD_BENCHMARKS=ON
10
+
11
+ # [optional] Build with Iridescence (visualization)
12
+ git clone https://github.com/koide3/iridescence --recursive
13
+ mkdir iridescence/build && cd iridescence/build
14
+ cmake .. && make -j
15
+ sudo make install
16
+
17
+ cmake .. -DBUILD_WITH_IRIDESCENCE=ON
18
+
19
+ # [optional] Build with fast_gicp
20
+ export FAST_GICP_INCLUDE_DIR=/your/fast_gicp/include
21
+ cmake .. -DBUILD_WITH_FAST_GICP=ON
22
+
23
+ # Build
24
+ make -j
25
+
26
+ # Test
27
+ # Show options
28
+ ./odometry_benchmark
29
+
30
+ # USAGE: odometry_benchmark <dataset_path> <output_path> [options]
31
+ # OPTIONS:
32
+ # --visualize
33
+ # --num_threads <value> (default: 4)
34
+ # --num_neighbors <value> (default: 20)
35
+ # --downsampling_resolution <value> (default: 0.25)
36
+ # --voxel_resolution <value> (default: 2.0)
37
+ # --engine <pcl|small_gicp|small_gicp_omp|small_vgicp_omp|small_gicp_tbb|small_vgicp_tbb|small_vgicp_model_tbb|small_gicp_tbb_flow> (default: small_gicp)
38
+
39
+ # Run odometry benchmark
40
+ ./odometry_benchmark /your/kitti/dataset/velodyne /tmp/traj_lidar.txt --visualize --num_threads 16 --engine small_gicp_tbb
41
+ ```
42
+
43
+ ## Results
44
+
45
+ All benchmarks were conducted on the KITTI 00 sequence.
46
+
47
+ ### Downsampling
48
+
49
+ ```bash
50
+ cd small_gicp/scripts
51
+ ./run_downsampling_benchmark.sh
52
+ python3 plot_downsampling.py
53
+ ```
54
+
55
+ - Single-threaded `small_gicp::voxelgrid_sampling` is about **1.3x faster** than `pcl::VoxelGrid`.
56
+ - Multi-threaded `small_gicp::voxelgrid_sampling_tbb` (6 threads) is about **3.2x faster** than `pcl::VoxelGrid`.
57
+ - `small_gicp::voxelgrid_sampling` gives accurate downsampling results (almost identical to those of `pcl::VoxelGrid`) while `pcl::ApproximateVoxelGrid` yields spurious points (up to 2x points).
58
+ - `small_gicp::voxelgrid_sampling` can process a larger point cloud with a fine voxel resolution compared to `pcl::VoxelGrid` (for a point cloud of 1000m width, minimum voxel resolution can be 0.5 mm).
59
+
60
+ ![downsampling_comp](docs/assets/downsampling_comp.png)
61
+
62
+ - While TBB shows slightly better scalability, both the parallelism backends do not obtain a speed gain for the cases with threads more than 16.
63
+
64
+ ![downsampling_threads](docs/assets/downsampling_threads.png)
65
+
66
+ ### KdTree construction
67
+
68
+ ```bash
69
+ cd small_gicp/scripts
70
+ ./run_kdtree_benchmark.sh
71
+ python3 plot_kdtree.py
72
+ ```
73
+
74
+ - Multi-threaded implementation (TBB and OMP) can be up to **4x faster** than the single-threaded one (All the implementations are based on nanoflann).
75
+ - The processing speed gets faster as the number of threads increases, but the speed gain is not monotonic sometimes (because of the scheduling algorithm or some CPU(AMD 5995WX)-specific issues?).
76
+ - This benchmark only compares the construction time (query time is not included).
77
+
78
+ ![kdtree_time](docs/assets/kdtree_time.png)
79
+
80
+ ### Odometry estimation
81
+
82
+ ```bash
83
+ cd small_gicp/scripts
84
+ ./run_odometry_benchmark.sh
85
+ python3 plot_odometry.py
86
+ ```
87
+
88
+ - Single-thread `small_gicp::GICP` is about **2.4x and 1.9x faster** than `pcl::GICP` and `fast_gicp::GICP`, respectively.
89
+ - `small_gicp::(GICP|VGICP)` shows a better multi-thread scalability compared to `fast_gicp::(GICP|VGICP)`.
90
+ - `small_gicp::GICP` parallelized with [TBB flow graph](src/odometry_benchmark_small_gicp_tbb_flow.cpp) shows an excellent scalability to many-threads situations (**~128 threads**) but with latency degradation.
91
+
92
+ ![odometry_time](docs/assets/odometry_time.png)
93
+
94
+ **SIMD intrinsics (-march=native)** (We recommend keeping this feature disabled unless you are 100% sure what it is)
95
+
96
+ - `BUILD_WITH_MARCH_NATIVE=ON` enables platform-specific intrinsics and squeezing the performance (**1.1x speedup for free**).
97
+ - However, you must ensure that all involved libraries are built with `-march=native`, otherwise the program will crash.
98
+ - Generally, it is difficult to properly set `-march=native` for all libraries, and we recommend keeping `BUILD_WITH_MARCH_NATIVE=OFF`.
99
+
100
+ Results:
101
+ - `BUILD_WITH_MARCH_NATIVE=OFF` : `Eigen::SimdInstructionSetsInUse()=SSE, SSE2`
102
+ - `BUILD_WITH_MARCH_NATIVE=ON` : `Eigen::SimdInstructionSetsInUse()=AVX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2`
103
+
104
+ ![odometry_native](docs/assets/odometry_native.png)
105
+
106
+ **Accuracy**
107
+
108
+ - `small_gicp::GICP` outputs mostly identical results to those of `fast_gicp::GICP`.
109
+ - The results of `small_gicp::VGICP` slightly differ from `fast_gicp::VGICP`. Although the difference is marginal, it needs to be investigated.
110
+
111
+ ```
112
+ pcl_gicp : APE=6.451 +- 3.421 RPE(100)=2.424 +- 1.707 RPE(400)=8.416 +- 4.284 RPE(800)=12.652 +- 6.799
113
+ fast_gicp : APE=6.118 +- 3.078 RPE(100)=1.212 +- 0.717 RPE(400)=6.058 +- 3.128 RPE(800)=10.356 +- 6.335
114
+ fast_vgicp : APE=6.791 +- 3.215 RPE(100)=1.253 +- 0.734 RPE(400)=6.315 +- 3.011 RPE(800)=10.367 +- 6.147
115
+ small_gicp : APE=6.096 +- 3.056 RPE(100)=1.211 +- 0.717 RPE(400)=6.057 +- 3.123 RPE(800)=10.364 +- 6.336
116
+ small_gicp (tbb) : APE=6.096 +- 3.056 RPE(100)=1.211 +- 0.717 RPE(400)=6.057 +- 3.123 RPE(800)=10.364 +- 6.336
117
+ small_gicp (omp) : APE=6.096 +- 3.056 RPE(100)=1.211 +- 0.717 RPE(400)=6.057 +- 3.123 RPE(800)=10.364 +- 6.336
118
+ small_vgicp : APE=5.956 +- 2.725 RPE(100)=1.315 +- 0.762 RPE(400)=6.849 +- 3.401 RPE(800)=10.396 +- 6.972
119
+ ```