• Stars
    star
    176
  • Rank 216,987 (Top 5 %)
  • Language
    C++
  • License
    Other
  • Created about 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An efficient, extensible occupancy map supporting probabilistic occupancy, normal distribution transforms in CPU and GPU.

Occupancy Homogeneous Map

The ohm library is a probabilistic voxel occupancy map supporting fast GPU based population and operations and normal distribution transform semantics. The ohm library defines an occupancy map consisting of regions or chunks of homogeneous voxels, arranged in contiguous memory blocks. This homogeneous voxel layout, rather than an octree layout, supports fast GPU based map population using OpenCL and CUDA.

Building

Prerequisites and Requirements

The ohm library supports both OpenCL and CUDA GPU processing. OpenCL development focuses on GCC and Visual Studio running on an Intel OpenCL GPU device. AMD and NVIDIA GPUs have been tested and should also function. The CUDA implementation has been built for compute 5.0 and 6.0. Other architectures may work, but must be specifically tested.

Building ohm requires:

  • C++14 compatible compiler such as:
    • GCC 5.7
    • Visual Studio 15 2017
    • APPLE LLVM 9.1
  • For OpenCL
    • An OpenCL 1.2 or 2.0 SDK. 1.2 must be used if running on NVIDIA hardware.
    • OpenCL 1.2 runtime. OpenCL 2.x also supported (command line selectable)
  • For CUDA
    • CUDA 10

The following 3rd-party libraries are required to build ohm:

Googletest is also used when building unit tests, however, this is downloaded as part of the build.

Additional, the following 3rd-party libraries may optionally be used:

Library Feature Usage
3rd Eye Scene For debug visualisation of map generation.
Doxygen For generation of API documentation.
Eigen3 Used in small amounts in some tests and as a faster option for some geometry operations
Intel Threading Building Blocks Multi-threaded CPU operations.
GLEW For HeightmapImage in ohmheightmaputil
GLFW For HeightmapImage in ohmheightmaputil
libpng To convert heightmap to image using utils/ohmhm2img
PDAL Load point various point cloud formats for ohmpop.

While efforts are made to ensure components remain optional, certain configurations may be incompatible.

Ubuntu apt Packages

On Ubuntu, the required packages may be installed using the following command:

sudo apt install cmake zlib1g-dev libglm-dev googletest

Setup of OpenCL requires mode detailed instructions (link).

For CUDA setup instructions, visit NVIDIA CUDA Zone.

Additional, recommended packages can be installed using:

sudo apt install libtbb-dev libpdal-dev doxygen

Optional packages for heightmap generation and image conversion:

sudo apt install libglew-dev libglfw3-dev libpng-dev libeigen3-dev

Build Instructions

  1. Download source code.
  2. Install pre-requisites.
  3. Configure the project.
    • Create a build subdirectory and change into this subdirectory.
    • Execute cmake ..
      • For Visual Studio configuration, include the option -G Visual Studio 15 2017 Win64
    • Build the project
      • For Visual Studio, open the solution file and build.
      • For make based platforms, run make -j

Building with vcpkg

Ohm supports building with in vcpkg manifest mode. To build using vcpkg, first follow the vcpkg install instructions then build with the vcpkg toolchain enabled.

Building in manifest mode obviates the need to download the dependencies, except for the CUDA SDK on Windows. To build with vcpkg, adjust the cmake command line to enable vcpkg manifest mode when configuring the project;

# Run from the source directory
# Note we must run CMake from the source directory and use -B and -S to specify
# the build and source directories respectively. This allows vcpkg to find the
# vcpkg.json manifest file.
mkdir build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=<vcpkg_path>/scripts/buildsystem/vcpkg.cmake -DVCPKG_MANIFEST_FEATURES=<features>
cmake --build build --target all --

It's recommended to add -G Ninja as this builds much faster than other build systems.

Or for a multi config generator such as Visual Studio or Ninja Multi-Config;

mkdir build
cmake -B build -S . -G "Ninja Multi-Config" -DCMAKE_TOOLCHAIN_FILE=<vcpkg_path>/scripts/buildsystem/vcpkg.cmake -DVCPKG_MANIFEST_FEATURES=<features>
cmake --build build --config Release --target all --

The VCPKG_MANIFEST_FEATURES specifies the features to enable for ohm, where they differ from the default features. This is a semicolon separated list of features choosing from the items listed below. It is generally expected that either cuda or opencl are listed, or both.

Feature Description
cuda Build with CUDA GPU acceleration.
eigen * Enable Eigen support (private)
heightmap * Enable the heightmap library
heightmap-image Enable heightmap to image conversion
opencl Enable OpenCL acceleration.
pdal Enable PDAL point cloud loader. **
threads * Enable TBB threading (limited).
test Build the ohm unit tests.

* This feature is enabled by default. ** Warning: enabling PDAL supports takes a long time for initial configuration while it builds the GDAL dependency. This can take on the order of several hours. Also note it may be necessary to set the LD_LIBRARY_PATH to include the directly where the pdal shared libraries are placed by vcpkg.

Notable Known Issues

  • OpenCL compatibility with certain devices may vary.
  • OpenCL performance on various devices may vary especially with memory transfer rates.
  • Using the OpenCL 2.x SDK and selecting an NVIDIA GPU will result in runtime crashes.
  • When installing, OHM_EMBED_GPU_CODE must be defined in order to run ohmocl; otherwise OpenCL source is not found.
  • When building from VSCode on Windows and using the Ninja generation, nvcc may fail reporting "command too long". This appears to be caused by a long path name. Changing to an "unspecified" CMake Kit or launching VSCode with a shorter PATH variable may help.

Resolving OpenCL SDK With Multiple Options

There are some pitfalls in trying to resolve an appropriate OpenCL SDK when multiple SDK options are installed. Most notably selecting between the Intel SDK over the NVIDIA SDK can be problematic. The best way to ensure the correct option is selected is to ensure the desired SDK prefix path is set in the PATH environment variable as the before other SDK paths. The prefix path, is essentially the path containing the include and lib directories.

While this can be changed by explicitly changing OpenCL_INCLUDE_DIR and OpenCL_LIBRARY in the CMake cache (using ccmake or cmake-gui) this can still have issues with selecting a particular API version. This is because the available API versions are determined when the OpenCL header is first found and will not be updated if the paths are explicitly changed. To combat this, edit the CMakeCache.txt file and remove all OPENCL_VERSION_X_X entries.

Further documentation

Citation

Please use the following citation if you use OHM in your research.

@ARTICLE{9849048,
  author={Stepanas, Kazys and Williams, Jason and Hern&#x00E1;ndez, Emili and Ruetz, Fabio and Hines, Thomas},
  journal={IEEE Robotics and Automation Letters}, 
  title={OHM: GPU Based Occupancy Map Generation}, 
  year={2022},
  volume={},
  number={},
  pages={1-8},
  doi={10.1109/LRA.2022.3196145}}

More Repositories

1

syropod_highlevel_controller

OpenSHC: A Versatile Multilegged Robot Controller
C++
164
star
2

locus

[ICRA 2021] This repository contains the code for "Locus: LiDAR-based Place Recognition using Spatiotemporal Higher-Order Pooling".
Python
121
star
3

LoGG3D-Net

[ICRA 2022] The official repository for "LoGG3D-Net: Locally Guided Global Descriptor Learning for 3D Place Recognition", In 2022 International Conference on Robotics and Automation (ICRA), pp. 2215-2221.
Python
102
star
4

Wild-Places

๐Ÿž๏ธ [IEEE ICRA2023] The official repository for paper "Wild-Places: A Large-Scale Dataset for Lidar Place Recognition in Unstructured Natural Environments" To appear in 2023 IEEE International Conference on Robotics and Automation (ICRA)
Python
76
star
5

raycloudtools

C++
66
star
6

Uncertainty-LPR

๐Ÿ“ฃ [IEEE IROS 2023] Official Repository of IROS 23 paper "Uncertainty-Aware Lidar Place Recognition in Novel Environments"
Python
59
star
7

Forest_Localisation

C++
56
star
8

ElasticLidar-plusplus

Elasticity Meets Continuous-Time: Map-Centric Dense 3D SLAM
55
star
9

TCE

This repository contains the code implementation used in the paper Temporally Coherent Embeddings for Self-Supervised Video Representation Learning (TCE).
Python
52
star
10

InCloud

[IROS2022] Official repository of InCloud: Incremental Learning for Point Cloud Place Recognition, Published in IROS2022 https://arxiv.org/abs/2203.00807
Python
37
star
11

SpectralGV

[RA-L 2023] Official Repository of "Spectral Geometric Verification: Re-Ranking Point Cloud Retrieval for Metric Localization", RA-L, Volume 8, Issue 5, May 2023
Python
35
star
12

WildScenes

[IJRR2024 ACCEPTED] The official repository for the WildScenes: A Benchmark for 2D and 3D Semantic Segmentation in Natural Environments
Python
28
star
13

UPGen

The official repository for the paper: Scalable learning for bridging the species gap in image-based plant phenotyping.
Python
23
star
14

P-GAT

[IEEE RA-L 2024] This repository contains the implementation code for the paper "P-GAT : Pose-Graph Attentional Network for Lidar Place Recognition".
Python
23
star
15

shc_tutorials

Tutorials for using OpenSHC
20
star
16

dynamixel_interface

Fast, scalable driver for controlling dynamixel servo motors
C++
19
star
17

FactoFormer

[TGRS 2024] The official repository for Journal Article โ€œFactoFormer: Factorized Hyperspectral Transformers with Self-Supervised Pre-Trainingโ€, Accepted to IEEE Transactions on Geoscience and Remote Sensing, December 2023.
Python
17
star
18

deepseagrass

This repository contains the code implementation used in the paper "Multi-species Seagrass Detection and Classification from Underwater Images"
Python
12
star
19

3rdEyeScene

3rd Eye Scene is a generalised visual debugger and debugging aid in the vein of rviz.
C#
10
star
20

agscan3d

This repository contains the code and datasets used in the paper "Canopy Density Estimation in Perennial HorticultureCrops Using 3D Spinning Lidar SLAM" https://onlinelibrary.wiley.com/doi/abs/10.1002/rob.22006
10
star
21

deep-terrain-classification

Source code to run the algorithms presented in the paper titled "Semi-supervised Gated Recurrent Neural Networks for Robotic Terrain Classification"
Jupyter Notebook
10
star
22

iSICE

[CVPR2023] The official repository for paper "Learning Partial Correlation based Deep Visual Representation for Image Classification" To appear in 2023 The IEEE / CVF Computer Vision and Pattern Recognition Conference (CVPR)
Python
8
star
23

ROPIM

[ICLR 2024 Spotlight] ๐Ÿš€ The official repository of Self-Supervised Learning method "ROPIM", "Pre-training with Random Orthogonal Projection Image Modeling"
Python
7
star
24

fn_mechanisms

The official repository of IEEE RAL 2022 paper "What's in the Black Box? The False Negative Mechanisms Inside Object Detectors" https://arxiv.org/abs/2203.07662
Python
7
star
25

ohm_assay

This repo is provided to assess the performance of OHM against several other voxel or octree based libraries.
C++
6
star
26

Reg-NF

[ICRA 2024] Official repository of Reg-NF: Efficient Registration of Implicit Surfaces within Neural Fields
Python
5
star
27

treetools

Command line tools for manipulating geometrical descriptions of forests. Used to analyse and process the forest reconstructions primarily from raycloudtools.
C++
4
star
28

3es-core

C++
4
star
29

SDCL

[Neural Networks 2023] The official repository of Neural Networks Journal "Subspace Distillation for Continual Learning"
Python
3
star
30

L3DMC

๐Ÿค–[MICCAI 2023] The official repository for paper "L3DMC: Lifelong Learning using Distillation via Mixed-Curvature Space"
Python
3
star
31

MDL

๐Ÿ”ฅ[IEEE TPAMI 2023] Official repository TPAMI 2023 paper "Exploiting Field Dependencies for Learning on Categorical Data"
Python
3
star
32

GRAPE

[Journal of Hazardous Materials 2024] Official repository for Graph Neural Networks-enhanced RelAtion Prediction for Ecotoxicology (GRAPE)
Python
2
star
33

GeoAdapt

The official repository of GeoAdapt paper. The code, checkpoint and training procedure will be release upon acceptance.
2
star
34

syropod_remote

C++
2
star
35

bullet_syropod

CMake
2
star
36

CL3

[J. Imaging 2023] The official repository for paper CL3: Generalization of Contrastive Loss for Lifelong Learning J. Imaging 2023, 9(12), 259; https://doi.org/10.3390/jimaging9120259
Python
2
star
37

UPGen-Webpage

1
star
38

SOFA_mesh_partitioning_tools

C++
1
star
39

Pair-VPR

[Under Review] The official repository for Pair-VPR: Place-Aware Pre-training and Contrastive Pair Classification for Visual Place Recognition with Vision Transformers
1
star