|
| 1 | +# GIRA3D Reconstruction |
| 2 | +This component of GIRA3D enables compact point cloud modeling for depth-intensity reconstruction. The point |
| 3 | +cloud modeling is performed via Self-Organizing Gaussian Mixture Modeling (SOGMM) presented in: |
| 4 | + |
| 5 | +``` |
| 6 | +[1] K. Goel, N. Michael, and W. Tabib, “Probabilistic Point Cloud Modeling via Self-Organizing Gaussian Mixture Models,” IEEE Robotics and Automation Letters, vol. 8, no. 5, pp. 2526–2533, May 2023, doi: 10.1109/LRA.2023.3256923. |
| 7 | +``` |
| 8 | +``` |
| 9 | +@ARTICLE{goel_probabilistic_2023, |
| 10 | + title = {Probabilistic Point Cloud Modeling via Self-Organizing Gaussian Mixture Models}, |
| 11 | + author = {Goel, Kshitij and Michael, Nathan and Tabib, Wennie}, |
| 12 | + year = {2023}, |
| 13 | + month = may, |
| 14 | + journal={IEEE Robotics and Automation Letters}, |
| 15 | + volume = {8}, |
| 16 | + number = {5}, |
| 17 | + pages = {2526--2533}, |
| 18 | + issn = {2377-3766}, |
| 19 | + doi = {10.1109/LRA.2023.3256923}, |
| 20 | + keywords = {Adaptation models,Complexity theory,Computational modeling,Data models,field robots,Mapping,Point cloud compression,Probabilistic logic,RGB-D perception,Three-dimensional displays} |
| 21 | +} |
| 22 | +``` |
| 23 | +A video demonstrating the features of SOGMM can be found [here](https://youtu.be/v0DfhK1lyno). |
| 24 | + |
| 25 | +If you use this codebase in your work, please consider citing the article above. |
| 26 | + |
| 27 | +## Overview |
| 28 | +This repository is a meta workspace containing two [`colcon`](https://colcon.readthedocs.io/en/released/) workspaces: |
| 29 | + |
| 30 | +1. The `dry` workspace contains dependencies that we choose to compile from their source code. |
| 31 | + |
| 32 | +2. The `wet` workspace contains the main codebase. |
| 33 | + |
| 34 | +The `dry` workspace contains the following `git` submodules: |
| 35 | + |
| 36 | +1. `eigen_colcon`: Colcon package to pull [Eigen 3.4](https://eigen.tuxfamily.org/index.php?title=3.4). |
| 37 | + |
| 38 | +2. `pybind11_colcon`: Colcon package to pull [pybind11](https://pybind11.readthedocs.io/en/stable/). |
| 39 | + |
| 40 | +3. `open3d_colcon`: Colcon package to pull [our modifications](https://github.com/rislab/Open3D/tree/feature/cuda-12) to [Open3D](http://www.open3d.org/). |
| 41 | +> **Note** |
| 42 | +> `open3d_colcon` will not be compiled for macOS. |
| 43 | +
|
| 44 | +The `wet` workspace contains the following `git` submodules: |
| 45 | + |
| 46 | +1. `self_organizing_gmm`: C++ codebase accelerated with OpenMP for Intel/AMD/ARM CPUs. |
| 47 | + |
| 48 | +2. `sogmm_open3d`: C++ codebase accelerated with CUDA and Open3D for Intel/AMD/ARM CPUs and NVIDIA GPUs. |
| 49 | +> **Note** |
| 50 | +> `sogmm_open3d` will not be compiled for macOS. |
| 51 | +
|
| 52 | +3. `sogmm_py`: Scripts for visualization, comparison, testing, and profiling. |
| 53 | + |
| 54 | +## Supported Platforms |
| 55 | +The codebase has been tested on the following platforms: |
| 56 | + |
| 57 | +1. **Linux** |
| 58 | + |
| 59 | +| Platform ID | OS | CPU | GPU | Memory (CPU/GPU) | CUDA Version| |
| 60 | +| ----------- | ------------- | --- | --- | ---------------- | ---- | |
| 61 | +| Ryzen/RTX3090 | Ubuntu 20.04 | AMD Ryzen Threadripper 3960X, 48 threads | NVIDIA GeForce RTX 3090 | 252 GB/24 GB | <= 12.1 | |
| 62 | +| Intel/RTX3060 | Ubuntu 20.04 | Intel Core i9-10900K, 20 threads | NVIDIA GeForce RTX 3060 | 32 GB/12 GB | <= 12.1 | |
| 63 | +| ARM-12c/Orin | Ubuntu 20.04 | ARMv8 Processor rev 1 (v8l), 12 threads | NVIDIA Jetson Orin | 32 GB | <= 11.4 | |
| 64 | +| ARM-8c/Xavier | Ubuntu 20.04 | ARMv8 Processor rev 0 (v8l), 8 threads | NVIDIA Jetson Xavier | 16 GB | <= 11.4 | |
| 65 | +| ARM-6c/TX2 | Ubuntu 20.04 | ARM Cortex-A57, 6 threads | NVIDIA Jetson TX2 | 8 GB | <= 10.1 | |
| 66 | + |
| 67 | +2. **macOS** |
| 68 | +> **Note** |
| 69 | +> CUDA-dependent repository, `sogmm_open3d`, is not supported for macOS. |
| 70 | +
|
| 71 | +| Platform ID | OS | CPU | GPU | Memory (CPU/GPU) | CUDA Version| |
| 72 | +| ----------- | ------------- | --- | --- | ---------------- | ---- | |
| 73 | +| MacBook/Intel | MacOS Ventura 13.3.1 | 2.3 GHz 8-Core Intel Core i9 | N/A | 16 GB | N/A | |
| 74 | + |
| 75 | +## Build and Install |
| 76 | +We require using a Python 3.8 virtual environment using `pip`. Assume that the |
| 77 | +virtual environment is created within this repository using the folder name |
| 78 | +`.venv`. First, we set up the `colcon` build environment. |
| 79 | + |
| 80 | +```bash |
| 81 | +git clone git@github.com:rislab/gira3d-reconstruction.git |
| 82 | +git checkout master # or your favorite branch |
| 83 | +git submodule update --recursive --init |
| 84 | +cd gira3d-reconstruction |
| 85 | +python3.8 -m venv .venv |
| 86 | +source .venv/bin/activate |
| 87 | +pip install --upgrade pip |
| 88 | +pip install colcon-common-extensions wheel |
| 89 | +``` |
| 90 | + |
| 91 | +For Python scripts, run-time dependencies can be installed using `pip`. Make sure |
| 92 | +the virtual environment created above is active. |
| 93 | +```bash |
| 94 | +pip install numpy scikit-learn opencv-python scikit-image future matplotlib termcolor |
| 95 | +``` |
| 96 | + |
| 97 | +Finally, run the `build` script: |
| 98 | +```bash |
| 99 | +./build |
| 100 | +``` |
| 101 | + |
| 102 | +Some helper scripts are provided as follows: |
| 103 | +1. `clean`: Clean the builds for both `dry` and `wet` workspaces. |
| 104 | +2. `configure`: Pull the submodules. |
| 105 | + |
| 106 | +> **Warning** |
| 107 | +> If you run into issues with OpenMP on MacOS, you might need to use the `llvm` clang |
| 108 | +> compiler as opposed to the Apple Clang compiler. |
| 109 | +
|
| 110 | +## Environment Setup |
| 111 | +These steps also compile the python bindings. To use these python interfaces, first run: |
| 112 | + |
| 113 | +```bash |
| 114 | +workon |
| 115 | +``` |
| 116 | +> **Note** |
| 117 | +> For NVIDIA Jetson platforms (i.e., Orin, Xavier, and TX2), run `workon_jetson`. |
| 118 | +
|
| 119 | +### User Guide |
| 120 | +```bash |
| 121 | +pip install mkdocs mkdocs-material |
| 122 | +mkdocs serve |
| 123 | +``` |
| 124 | +You should be able to view the documentation at this level over at [localhost](http://127.0.0.1:8000/). |
| 125 | + |
| 126 | +Utilize this documentation for tutorials and examples that use one or many of the submodules. |
| 127 | + |
| 128 | +Note: The documentation is stored using git lfs. You may need to run the |
| 129 | +following in order to make sure it is pulled correctly: |
| 130 | + |
| 131 | +``` |
| 132 | +cd docs |
| 133 | +git lfs install |
| 134 | +git lfs pull |
| 135 | +``` |
| 136 | + |
| 137 | +## Authors |
| 138 | +Kshitij Goel, Wennie Tabib |
| 139 | + |
| 140 | +## Acknowledgments |
| 141 | +1. [`ndt_map`](https://github.com/OrebroUniversity/perception_oru-release): BSD License, Copyright (c) 2010, AASS Research Center, Orebro University. |
| 142 | +2. [`octomap`](https://github.com/OctoMap/octomap): New BSD License, Copyright (c) 2009-2013, K.M. Wurm and A. Hornung, University of Freiburg. |
| 143 | +3. [`liegroups`](https://github.com/utiasSTARS/liegroups): The MIT License, Copyright (c) 2017 Lee Clement. |
| 144 | +4. [`Open3D`](https://github.com/isl-org/Open3D): The MIT License (MIT), Copyright (c) 2018-2023 www.open3d.org. |
| 145 | +5. [`Eigen`](https://gitlab.com/libeigen/eigen): Mozilla Public License, v. 2.0. |
| 146 | +6. `CUDA`, `cuBLAS`, `cuSOLVER`: Copyright (c) 2022-2023, NVIDIA CORPORATION. |
| 147 | + |
| 148 | +## License |
| 149 | +``` |
| 150 | +BSD 3-Clause License |
| 151 | +
|
| 152 | +Copyright (c) 2023, Kshitij Goel, Wennie Tabib |
| 153 | +
|
| 154 | +Redistribution and use in source and binary forms, with or without |
| 155 | +modification, are permitted provided that the following conditions are met: |
| 156 | +
|
| 157 | +1. Redistributions of source code must retain the above copyright notice, this |
| 158 | + list of conditions and the following disclaimer. |
| 159 | +
|
| 160 | +2. Redistributions in binary form must reproduce the above copyright notice, |
| 161 | + this list of conditions and the following disclaimer in the documentation |
| 162 | + and/or other materials provided with the distribution. |
| 163 | +
|
| 164 | +3. Neither the name of the copyright holder nor the names of its |
| 165 | + contributors may be used to endorse or promote products derived from |
| 166 | + this software without specific prior written permission. |
| 167 | +
|
| 168 | +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| 169 | +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 170 | +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 171 | +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| 172 | +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 173 | +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 174 | +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 175 | +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| 176 | +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 177 | +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 178 | +``` |
0 commit comments