This project is a 3D Dense mapping backend library of SLAM based Taichi-Lang, designed for the aerial swarm.
Taichi is an efficient domain-specific language (DSL) designed for computer graphics (CG), which can be adopted for high-performance computing on mobile devices. Thanks to the connection between CG and robotics, we can adopt this powerful tool to accelerate the development of robotics algorithms.
In this project, I am trying to take advantages of Taichi, including parallel optimization, sparse computing, advanced data structures and CUDA acceleration. The original purpose of this project is to reproduce dense mapping papers, including Octomap, Voxblox, Voxgraph etc.
Note: This project is only backend of 3d dense mapping. For full SLAM features including real-time state estimation, pose graph optimization, depth generation, please take a look on VINS and my fisheye fork of VINS.
Octomap/Occupy map at different accuacy:
Truncated signed distance function (TSDF):
Surface reconstruct by TSDF (not refined)
Occupy map and slice of original TSDF
Install taichi via pip
pip install taichi
Download taichi_three and TaichiSlAM to your dev folder and add them to PYTHONPATH
git clone https://github.com/taichi-dev/taichi_three git clone https://github.com/xuhao1/TaichiSLAM echo export PYTHONPATH=`pwd`/taichi_three:`pwd`/TaichiSLAM:\$PYTHONPATH >> ~/.bashrc #Or if using zshrc echo export PYTHONPATH=`pwd`/taichi_three:`pwd`/TaichiSLAM:\$PYTHONPATH >> ~/.zshrc
Download cow_and_lady_dataset from voxblox.
Running TaichiSLAM octomap demo
python examples/TaichiSLAM_demo.py -b ~/pathto/your/bag/cow_and_lady_dataset.bag
python examples/TaichiSLAM_demo.py -m esdf -b ~/data/voxblox/cow_and_lady_dataset.bag
Use - and = key to change accuacy. Mouse to rotate the map. -h to get more help.
usage: TaichiSLAM_demo.py [-h] [-r RESOLUTION RESOLUTION] [-m METHOD] [-c] [-t] [--rviz] [-p MAX_DISP_PARTICLES] [-b BAGPATH] [-o OCCUPY_THRES] [-s MAP_SIZE MAP_SIZE] [--blk BLK] [-v VOXEL_SIZE] [-K K] [-f] [--record] Taichi slam fast demo optional arguments: -h, --help show this help message and exit -r RESOLUTION RESOLUTION, --resolution RESOLUTION RESOLUTION display resolution -m METHOD, --method METHOD dense mapping method: octo/esdf -c, --cuda enable cuda acceleration if applicable -t, --texture-enabled showing the point cloud's texture --rviz output to rviz -p MAX_DISP_PARTICLES, --max-disp-particles MAX_DISP_PARTICLES max output voxels -b BAGPATH, --bagpath BAGPATH path of bag -o OCCUPY_THRES, --occupy-thres OCCUPY_THRES thresold for occupy -s MAP_SIZE MAP_SIZE, --map-size MAP_SIZE MAP_SIZE size of map xy,z in meter --blk BLK block size of esdf, if blk==1; then dense -v VOXEL_SIZE, --voxel-size VOXEL_SIZE size of voxel -K K division each axis of octomap, when K>2, octomap will be K**3-map -f, --rendering-final only rendering the final state --record record to C code
- [x] Octomap
- [x] Voxblox
- [ ] Voxgraph
- [x] Octotree occupancy map
- [x] TSDF
- [x] Incremental ESDF
- [ ] Submap
- [ ] Loop Detection
- [x] ROS/RVIZ/rosbag interface
- [x] 3D occupancy map visuallizer
- [x] 3D TSDF/ESDF map visuallizer
- [ ] Export to C/C++
- [ ] Benchmark