Related Paper:
- Continuous Implicit SDF Based Any-shape Robot Trajectory Optimization, Tingrui Zhang*, Jingping Wang*,Chao Xu, Alan Gao, Fei Gao.
- Our paper is accepted at IROS2023. The extension of our work is accepted at siggraph2024&TOG, please refer to Implicit-SVSDF-Planner for more details. If you find this work useful in your research, please consider citing:
@INPROCEEDINGS{10342104,
author={Zhang, Tingrui and Wang, Jingping and Xu, Chao and Gao, Alan and Gao, Fei},
booktitle={2023 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
title={Continuous Implicit SDF Based Any-Shape Robot Trajectory Optimization},
year={2023},
volume={},
number={},
pages={282-289},
doi={10.1109/IROS55552.2023.10342104}}
-
Some of the demos are our further work after the IROS conference, and a more general pipeline for whole-body planning of arbitrarily shaped robots with Continuous Collision Safety Certification is on the way.
2D - Continuous Collision Avoidance with Safety Certification (with rotation decoupled from translation)
Compiling tests passed on ubuntu 20.04 with ros installed. You can just execute the following commands one by one.
echo "alias python=python3" >> ~/.zshrc #(If use zsh)
echo "alias python=python3" >> ~/.bashrc #(If use bash)
python3 -m pip3 install pygame==2.0.0.dev12
sudo apt-get install gcc g++ make gfortran cmake libomp-dev
git clone https://github.com/ZJU-FAST-Lab/Implicit-SDF-Planner.git
cd Implicit-SDF-Planner
./build.sh
source devel/setup.bash #(If use bash)
source devel/setup.zsh #(If use zsh)
roslaunch plan_manager demox.launch #(x=1,2,3...)
-
Then use "3D Nav Goal" in rviz or click on the "G" button on the keyboard to publish the goal for navigation. Note that the start and end points of the clicks must be within the map.
You can click buttons on the screen to visualize the swept volume, stop the optimization process early, etc.
demo.mp4
Have a cool example? Submit a PR! You can either extend the robot's shape arbitrarily via an obj file in shapes.The code will automatically use libigl to get its SDF. You can also inherit from Generalshape in Shape.hpp to implement the desired shape and the associated SDF methods.For visualization purposes, you will also need a corresponding obj file for the robot shape.
Supported Shapes now
- We use OpenMp for parallel acceleration, so the "threads_num" in the yaml should be adjusted to improve performance. The recommended threads_num is about 1.5 times the number of logical cores on the machine.
- If users customize the shape, the obj file must be provided. We recommend using meshlab to generate obj files. For better performance, users can also implement corresponding SDF function, otherwise Libigl is used by default to compute the SDF.
- The kernel_size multiplied by the map resolution should not be too small, this value should be greater than the maximum length of the robot's shape. So the "kernel_size" in the yaml should be adjusted accordingly (not too small).
There are several important works which support this project:
- GCOPTER: An efficient and versatile multicopter trajectory optimizer built upon a novel sparse trajectory representation named MINCO.
- Swept-Volume: For visualization purpose in our project.
- LMBM: Limited Memory Bundle Method for nonsmooth-optimization in our project.
The source code is released under GPLv3 license.
For any technical issue or bug, please contact Tingrui Zhang (tingruizhang@zju.edu.cn) or Jingping Wang (22232111@zju.edu.cn). For commercial inquiries, please contact Fei GAO (fgaoaa@zju.edu.cn).