{"id":13437516,"url":"https://github.com/neka-nat/cupoch","last_synced_at":"2025-05-14T07:09:57.738Z","repository":{"id":37392254,"uuid":"216847240","full_name":"neka-nat/cupoch","owner":"neka-nat","description":"Robotics with GPU computing","archived":false,"fork":false,"pushed_at":"2025-05-12T01:28:23.000Z","size":65789,"stargazers_count":978,"open_issues_count":24,"forks_count":114,"subscribers_count":24,"default_branch":"main","last_synced_at":"2025-05-12T02:33:45.576Z","etag":null,"topics":["collision-detection","cuda","distance-transform","gpgpu","gpu","jetson","occupancy-grid-map","odometry","pathfinding","point-cloud","pybind11","python","registration","robotics","ros","triangle-mesh","visual-odometry","voxel"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neka-nat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"neka-nat"}},"created_at":"2019-10-22T15:26:24.000Z","updated_at":"2025-05-12T01:27:57.000Z","dependencies_parsed_at":"2023-12-16T12:05:21.261Z","dependency_job_id":"5fe0d207-8264-4f44-91cb-3a0b02f56315","html_url":"https://github.com/neka-nat/cupoch","commit_stats":{"total_commits":490,"total_committers":7,"mean_commits":70.0,"dds":0.01632653061224487,"last_synced_commit":"0eb7d8b6f5a33aa48a925add18458867f036dd04"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neka-nat%2Fcupoch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neka-nat%2Fcupoch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neka-nat%2Fcupoch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neka-nat%2Fcupoch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neka-nat","download_url":"https://codeload.github.com/neka-nat/cupoch/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253664480,"owners_count":21944450,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collision-detection","cuda","distance-transform","gpgpu","gpu","jetson","occupancy-grid-map","odometry","pathfinding","point-cloud","pybind11","python","registration","robotics","ros","triangle-mesh","visual-odometry","voxel"],"created_at":"2024-07-31T03:00:57.912Z","updated_at":"2025-05-14T07:09:52.728Z","avatar_url":"https://github.com/neka-nat.png","language":"C++","funding_links":["https://github.com/sponsors/neka-nat","https://www.buymeacoffee.com/nekanat"],"categories":["C++","Sensor Processing","Frameworks"],"sub_categories":["Lidar and Point Cloud Processing"],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/cupoch_logo.png\" width=\"320\" /\u003e\n\u003c/p\u003e\n\n# Robotics with GPU computing\n\n[![Build status](https://github.com/neka-nat/cupoch/actions/workflows/ubuntu.yml/badge.svg)](https://github.com/neka-nat/cupoch/actions/workflows/ubuntu.yml/badge.svg)\n[![Build status](https://github.com/neka-nat/cupoch/actions/workflows/windows.yml/badge.svg)](https://github.com/neka-nat/cupoch/actions/workflows/windows.yml/badge.svg)[![PyPI version](https://badge.fury.io/py/cupoch.svg)](https://badge.fury.io/py/cupoch)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/cupoch)\n[![Downloads](https://static.pepy.tech/badge/cupoch)](https://pepy.tech/project/cupoch)\n[![xscode](https://img.shields.io/badge/Available%20on-xs%3Acode-blue?style=?style=plastic\u0026logo=appveyor\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF////////VXz1bAAAAAJ0Uk5T/wDltzBKAAAAlUlEQVR42uzXSwqAMAwE0Mn9L+3Ggtgkk35QwcnSJo9S+yGwM9DCooCbgn4YrJ4CIPUcQF7/XSBbx2TEz4sAZ2q1RAECBAiYBlCtvwN+KiYAlG7UDGj59MViT9hOwEqAhYCtAsUZvL6I6W8c2wcbd+LIWSCHSTeSAAECngN4xxIDSK9f4B9t377Wd7H5Nt7/Xz8eAgwAvesLRjYYPuUAAAAASUVORK5CYII=)](https://xscode.com/neka-nat/cupoch)\n\n\u003ca href=\"https://www.buymeacoffee.com/nekanat\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" width=\"150\" height=\"40\" \u003e\u003c/a\u003e\n\nCupoch is a library that implements rapid 3D data processing for robotics using CUDA.\n\nThe goal of this library is to implement fast 3D data computation in robot systems.\nFor example, it has applications in SLAM, collision avoidance, path planning and tracking.\nThis repository is based on [Open3D](https://github.com/intel-isl/Open3D).\n\n## Core Features\n\n* 3D data processing and robotics computation using CUDA\n    * KNN\n        * [WIP] [Optimizing LBVH-Construction and Hierarchy-Traversal to accelerate kNN Queries on Point Clouds using the GPU](https://epub.uni-bayreuth.de/5288/1/cgf.14177.pdf)\n        * [flann](https://github.com/flann-lib/flann)\n    * Point cloud registration\n        * ICP\n        * Generalized ICP\n        * [Symmetric ICP](https://gfx.cs.princeton.edu/pubs/Rusinkiewicz_2019_ASO/symm_icp.pdf) (Implemented by [@eclipse0922](https://github.com/eclipse0922))\n        * [Colored Point Cloud Registration](https://ieeexplore.ieee.org/document/8237287)\n        * [Fast Global Registration](http://vladlen.info/papers/fast-global-registration.pdf)\n        * [FilterReg](https://arxiv.org/abs/1811.10136)\n    * Point cloud features\n        * FPFH\n        * SHOT\n    * Point cloud keypoints\n        * ISS\n    * Point cloud clustering\n        * [G-DBSCAN: A GPU Accelerated Algorithm for Density-based Clustering](https://www.sciencedirect.com/science/article/pii/S1877050913003438)\n    * Point cloud/Triangle mesh filtering, down sampling\n    * IO\n        * Several file types(pcd, ply, stl, obj, urdf)\n        * ROS message\n    * Create Point Cloud from Laser Scan or RGBD Image\n    * Visual Odometry\n        * [Real-time visual odometry from dense RGB-D images](https://ieeexplore.ieee.org/document/6130321)\n        * [Robust Odometry Estimation for RGB-D Cameras](https://ieeexplore.ieee.org/document/6631104)\n    * Kinect Fusion\n    * Stereo Matching\n    * Collision checking\n    * Occupancy grid\n    * Distance transform\n        * [Parallel Banding Algorithm to Compute Exact Distance Transform with the GPU](https://www.comp.nus.edu.sg/~tants/pba.html)\n    * Path finding on graph structure\n    * Path planning for collision avoidance\n* Support memory pool and managed allocators\n* Interactive GUI (OpenGL CUDA interop and [imgui](https://github.com/ocornut/imgui))\n* Interoperability between cupoch 3D data and [DLPack](https://github.com/dmlc/dlpack)(Pytorch, Cupy,...) data structure\n\n## Installation\n\nThis library is packaged under 64 Bit Ubuntu Linux 20.04 and CUDA 11.7.\nYou can install cupoch using pip.\n\n```\npip install cupoch\n```\n\nOr install cupoch from source.\n\n```\ngit clone https://github.com/neka-nat/cupoch.git --recurse\ncd cupoch\nmkdir build\ncd build\ncmake ..; make install-pip-package -j\n```\n\n### Installation for Jetson Nano\nYou can also install cupoch using pip on Jetson Nano.\nPlease set up Jetson using [jetpack](https://developer.nvidia.com/embedded/jetpack) and install some packages with apt.\n\n```\nsudo apt-get install xorg-dev libxinerama-dev libxcursor-dev libglu1-mesa-dev\npip3 install cupoch\n```\n\nOr you can compile it from source. Update your version of cmake if necessary.\n\n```\nwget https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4.tar.gz\ntar zxvf cmake-3.18.4.tar.gz\ncd cmake-3.18.4\n./bootstrap -- -DCMAKE_USE_OPENSSL=OFF\nmake \u0026\u0026 sudo make install\ncd ..\ngit clone -b jetson_nano https://github.com/neka-nat/cupoch.git --recurse\ncd cupoch/\nmkdir build\ncd build/\nexport PATH=/usr/local/cuda/bin:$PATH\ncmake -DBUILD_GLEW=ON -DBUILD_GLFW=ON -DBUILD_PNG=ON -DBUILD_JSONCPP=ON ..\nsudo make install-pip-package\n```\n\n### Use Docker\n\n```sh\ndocker compose up -d\n# xhost +\ndocker exec -it cupoch bash\n```\n\n## Getting Started\n\nPlease see how to use cupoch in [Getting Started](https://github.com/neka-nat/cupoch/blob/master/docs/getting_started.md) first.\n\n## Results\nThe figure shows Cupoch's point cloud algorithms speedup over Open3D.\nThe environment tested on has the following specs:\n* Intel Core i7-7700HQ CPU\n* Nvidia GTX1070 GPU\n* OMP_NUM_THREAD=1\n\nYou can get the result by running the example script in your environment.\n\n```sh\ncd examples/python/basic\npython benchmarks.py\n```\n\nIf you get the following error when executing an example that includes 3D drawing, please start the program as follows.\n\n```sh\n$ cd examples/basic\n$ python visualization.py\nLoad a ply point cloud, print it, and render it\nMESA: warning: Driver does not support the 0xa7a0 PCI ID.\nlibGL error: failed to create dri screen\nlibGL error: failed to load driver: iris\nMESA: warning: Driver does not support the 0xa7a0 PCI ID.\nlibGL error: failed to create dri screen\nlibGL error: failed to load driver: iris\nError: unknown error\tphong_shader.cu:330\n```\n\n```sh\n__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia python visualization.py\n```\n\n\n![speedup](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/speedup.png)\n\n### Visual odometry with intel realsense D435\n\n![vo](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/vo_gpu.gif)\n\n### Occupancy grid with intel realsense D435\n\n![og](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/og_gpu.gif)\n\n### Kinect fusion with intel realsense L515\n\n![kf](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/kinfu.gif)\n\n### Stereo matching\n\n![sm](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/stereo.png)\n\n### Fast Global Registration\n\n![fgr](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/fgr.png)\n\n### Point cloud from laser scan\n\n![fgr](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/laserscan.gif)\n\n### Collision detection for 2 voxel grids\n\n![col](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/collision_voxels.gif)\n\n### Drone Path planning\n\n![dp](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/drone_pathplanning.gif)\n\n### Visual odometry with ROS + D435\n\nThis demo works in the following environment.\n* ROS melodic\n* Python2.7\n\n```\n# Launch roscore and rviz in the other terminals.\ncd examples/python/ros\npython realsense_rgbd_odometry_node.py\n```\n\n![vo](https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/ros_vo.gif)\n\n## Visualization\n\n| Point Cloud | Triangle Mesh | Kinematics |\n|-------------|---------------|------------|\n| \u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/pointcloud.png\" width=\"640\"\u003e |  \u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/trianglemesh.png\" width=\"640\"\u003e | \u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/kinematics.png\" width=\"640\"\u003e |\n\n| Voxel Grid | Occupancy Grid | Distance Transform |\n|------------|----------------|--------------------|\n|  \u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/voxelgrid.png\" width=\"640\"\u003e | \u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/occupancygrid.png\" width=\"640\"\u003e | \u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/distancetransform.png\" width=\"640\"\u003e |\n\n| Graph | Image |\n|-------|-------|\n| \u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/graph.png\" width=\"640\"\u003e | \u003cimg src=\"https://raw.githubusercontent.com/neka-nat/cupoch/master/docs/_static/image.png\" width=\"640\"\u003e |\n\n## References\n\n* CUDA repository forked from Open3D, https://github.com/theNded/Open3D\n* GPU computing in Robotics, https://github.com/JanuszBedkowski/gpu_computing_in_robotics\n* Voxel collision comupation for robotics, https://github.com/fzi-forschungszentrum-informatik/gpu-voxels\n\n## Citing\n\n```\n@misc{cupoch,\n   author = {Kenta Tanaka},\n   year = {2020},\n   note = {https://github.com/neka-nat/cupoch},\n   title = {cupoch -- Robotics with GPU computing}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneka-nat%2Fcupoch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneka-nat%2Fcupoch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneka-nat%2Fcupoch/lists"}