{"id":19526619,"url":"https://github.com/zju-fast-lab/large_scale_traj_optimizer","last_synced_at":"2025-04-08T04:18:45.327Z","repository":{"id":49834351,"uuid":"307056269","full_name":"ZJU-FAST-Lab/large_scale_traj_optimizer","owner":"ZJU-FAST-Lab","description":"Fast (Fastest?) Minimum Snap Trajectory Generation with Analytical Gradient","archived":false,"fork":false,"pushed_at":"2022-12-03T15:26:55.000Z","size":333,"stargazers_count":227,"open_issues_count":1,"forks_count":42,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-26T23:06:29.362Z","etag":null,"topics":["minimum-jerk","minimum-snap","minimum-snap-trajectories"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZJU-FAST-Lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-25T08:35:18.000Z","updated_at":"2025-03-26T15:00:42.000Z","dependencies_parsed_at":"2022-08-28T21:00:53.565Z","dependency_job_id":null,"html_url":"https://github.com/ZJU-FAST-Lab/large_scale_traj_optimizer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZJU-FAST-Lab%2Flarge_scale_traj_optimizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZJU-FAST-Lab%2Flarge_scale_traj_optimizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZJU-FAST-Lab%2Flarge_scale_traj_optimizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZJU-FAST-Lab%2Flarge_scale_traj_optimizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZJU-FAST-Lab","download_url":"https://codeload.github.com/ZJU-FAST-Lab/large_scale_traj_optimizer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247773726,"owners_count":20993639,"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":["minimum-jerk","minimum-snap","minimum-snap-trajectories"],"created_at":"2024-11-11T01:11:00.927Z","updated_at":"2025-04-08T04:18:45.290Z","avatar_url":"https://github.com/ZJU-FAST-Lab.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Large-Scale Trajectory Optimizer\nThis is __probably the fastest__ minimum jerk or minimum snap trajectory generator you can find.\n\nIt also provides __analytical gradient__ of energy with respect to time allocations and waypoints.\n\n## 1. About\nThis is a highly-algorithmically-optimized implementation for minimum jerk/snap trajectories with exact gradient w.r.t. time allocation and waypoints. All involved computations enjoy [__linear time and space complexity__](https://en.wikipedia.org/wiki/Time_complexity). It is based on completely analytical results of our paper. Only [__two header files__](https://github.com/ZJU-FAST-Lab/large_scale_traj_optimizer/tree/main/include) are all you need to use our module as __a super efficient differentiable black box__.\n\nICRA Paper: [__Generating Large-Scale Trajectories Efficiently using Double Descriptions of Polynomials__](https://ieeexplore.ieee.org/document/9561585)\n\n([Video](https://www.youtube.com/watch?v=tA3fIyggH4I) and [Arxiv](https://arxiv.org/pdf/2011.02662v3.pdf) are avaiable.)\n\nIf this repo helps you, please cite our paper:\n\n    @inproceedings{wang2021glst,\n        title={Generating Large-Scale Trajectories Efficiently using Double Descriptions of Polynomials},\n        author={Wang, Zhepei and Ye, Hongkai and Xu, Chao and Gao, Fei},\n        address={Xi'an, China},\n        booktitle={IEEE International Conference on Robotics and Automation},\n        pages={7436-7442},\n        year={2021},\n        organization={IEEE}\n    }\n\n__Author__: [Zhepei Wang](https://zhepeiwang.github.io/) and [Fei Gao](https://ustfei.com/) from the [ZJU Fast Lab](http://zju-fast.com/).\n\n## 2. How to Use\n\n__a__. Initialize an instance of \"__JerkOpt/SnapOpt__\"\n\n__b__. Call \"__reset__\" to specify the piece number and initial/terminal conditions. The i-th column of \"headState/tailState\" is a 3-dimensional specified (i-1)-order derivative. For example, the initial/final position is always stored in the first column.\n\n__c__. Call \"__generate__\" to compute a minimum jerk/snap trajectory that passes intermediate waypoints with specified time allocations. The i-th column of \"__inPs__\" is a 3-dimensional vector of the i-th intermediate waypoint. For example, there are 4 columns of waypoints and 5 time durations for a 5-piece trajectory.\n\n__d__. Call \"__getObjective__\" to get energy cost.\n\n__e__. Call \"__getGradT__\" and \"__getGradInnerP__\" to obtain gradients for the specified time allocation and intermediate waypoints.\n\n__f__. If needed, repeat __c__, __d__, and __e__ to optimize time allocation and intermediate waypoints using the objective and the gradient.\n\n__g__. Call \"__getTraj__\" to obtain the trajectory.\n\nNote: Part __c__ must be conducted after __a__ and __b__. Part __d__, __e__, __f__ and __g__ must be conducted after __c__.\n\n## 3. Examples\n\n__Example 1__ gives the computation speed of our implementation. Please use __catkin_make__ of ROS to build the source code of this example.\n\n__Example 2__ is only described in the the related paper as a high-performance large-scale trajectory optimizer. By following the paper, you can use our differentiable black box to directly optimize both the waypoints and times of a trajectory. It can achieve almost the same trajectory quality as the global trajectory optimizer in [Teach-Repeat-Replan](https://github.com/HKUST-Aerial-Robotics/Teach-Repeat-Replan) while using significantly less computation time.\n\n## 4. Performance\n\nWe compare our original implementation with four existing works. The original performance is shown as follows. The performance of the up-to-date master branch is __SIGNIFICANTLY HIGHER__ than that is shown in the figure.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"misc/ModerateScale.png\" width = \"640\" height = \"375\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"misc/LargeScale.png\" width = \"640\" height = \"272\"/\u003e\n\u003c/p\u003e\n\n\u003csub\u003e \u003cem\u003e Burke et al., “Generating minimum-snap quadrotor trajectories really fast,” IROS 2020. \u003c/em\u003e \u003c/sub\u003e \u003cbr/\u003e\n\u003csub\u003e \u003cem\u003e Bry et al., “Aggressive flight of fixed-wing and quadrotor aircraft in dense indoor environments,” IJRR 2015. \u003c/em\u003e \u003c/sub\u003e \u003cbr/\u003e\n\u003csub\u003e \u003cem\u003e Mellinger et al., “Minimum snap trajectory generation and control for quadrotors,” ICRA 2011. \u003c/em\u003e \u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzju-fast-lab%2Flarge_scale_traj_optimizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzju-fast-lab%2Flarge_scale_traj_optimizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzju-fast-lab%2Flarge_scale_traj_optimizer/lists"}