Robotics with GPU computing
Cupoch is a library that implements rapid 3D data processing for robotics using CUDA.
The goal of this library is to implement fast 3D data computation in robot systems. For example, it has applications in SLAM, collision avoidance, path planning and tracking. This repository is based on Open3D.
Core Features
- 3D data processing and robotics computation using CUDA
- KNN
- Point cloud registration
- Point cloud features
- FPFH
- SHOT
- Point cloud keypoints
- ISS
- Point cloud clustering
- Point cloud/Triangle mesh filtering, down sampling
- IO
- Several file types(pcd, ply, stl, obj, urdf)
- ROS message
- Create Point Cloud from Laser Scan or RGBD Image
- Visual Odometry
- Kinect Fusion
- Stereo Matching
- Collision checking
- Occupancy grid
- Distance transform
- Path finding on graph structure
- Path planning for collision avoidance
- Support memory pool and managed allocators
- Interactive GUI (OpenGL CUDA interop and imgui)
- Interoperability between cupoch 3D data and DLPack(Pytorch, Cupy,...) data structure
Installation
This library is packaged under 64 Bit Ubuntu Linux 20.04 and CUDA 11.7. You can install cupoch using pip.
pip install cupoch
Or install cupoch from source.
git clone https://github.com/neka-nat/cupoch.git --recurse
cd cupoch
mkdir build
cd build
cmake ..; make install-pip-package -j
Installation for Jetson Nano
You can also install cupoch using pip on Jetson Nano. Please set up Jetson using jetpack and install some packages with apt.
sudo apt-get install libxinerama-dev libxcursor-dev libglu1-mesa-dev
pip3 install cupoch
Or you can compile it from source. Update your version of cmake if necessary.
wget https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4.tar.gz
tar zxvf cmake-3.18.4.tar.gz
cd cmake-3.18.4
./bootstrap -- -DCMAKE_USE_OPENSSL=OFF
make && sudo make install
cd ..
git clone -b jetson_nano https://github.com/neka-nat/cupoch.git --recurse
cd cupoch/
mkdir build
cd build/
export PATH=/usr/local/cuda/bin:$PATH
cmake -DBUILD_GLEW=ON -DBUILD_GLFW=ON -DBUILD_PNG=ON -DBUILD_JSONCPP=ON ..
sudo make install-pip-package
Use Docker
Setting default container runtime to nvidia-container-runtime.
Edit or create the /etc/docker/daemon.json
.
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia"
}
Restart docker daemon.
sudo systemctl restart docker
docker-compose up -d
# xhost +
docker exec -it cupoch bash
Getting Started
Please see how to use cupoch in Getting Started first.
Results
The figure shows Cupoch's point cloud algorithms speedup over Open3D. The environment tested on has the following specs:
- Intel Core i7-7700HQ CPU
- Nvidia GTX1070 GPU
- OMP_NUM_THREAD=1
You can get the result by running the example script in your environment.
cd examples/python/basic
python benchmarks.py
Visual odometry with intel realsense D435
Occupancy grid with intel realsense D435
Kinect fusion with intel realsense L515
Stereo matching
Fast Global Registration
Point cloud from laser scan
Collision detection for 2 voxel grids
Drone Path planning
Visual odometry with ROS + D435
This demo works in the following environment.
- ROS melodic
- Python2.7
# Launch roscore and rviz in the other terminals.
cd examples/python/ros
python realsense_rgbd_odometry_node.py
Visualization
Point Cloud | Triangle Mesh | Kinematics |
---|---|---|
Voxel Grid | Occupancy Grid | Distance Transform |
---|---|---|
Graph | Image |
---|---|
References
- CUDA repository forked from Open3D, https://github.com/theNded/Open3D
- GPU computing in Robotics, https://github.com/JanuszBedkowski/gpu_computing_in_robotics
- Voxel collision comupation for robotics, https://github.com/fzi-forschungszentrum-informatik/gpu-voxels
Citing
@misc{cupoch,
author = {Kenta Tanaka},
year = {2020},
note = {https://github.com/neka-nat/cupoch},
title = {cupoch -- Robotics with GPU computing}
}