GithubHelp home page GithubHelp logo

zhaodong1986 / large_scale_traj_optimizer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from zju-fast-lab/large_scale_traj_optimizer

0.0 0.0 0.0 333 KB

Fast (Fastest?) Minimum Snap Trajectory Generation with Analytical Gradient

C++ 99.49% CMake 0.51%

large_scale_traj_optimizer's Introduction

Large-Scale Trajectory Optimizer

This is probably the fastest minimum jerk or minimum snap trajectory generator you can find.

It also provides analytical gradient of energy with respect to time allocations and waypoints.

1. About

This 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. It is based on completely analytical results of our paper. Only two header files are all you need to use our module as a super efficient differentiable black box.

ICRA Paper: Generating Large-Scale Trajectories Efficiently using Double Descriptions of Polynomials

(Video and Arxiv are avaiable.)

If this repo helps you, please cite our paper:

@inproceedings{wang2021glst,
    title={Generating Large-Scale Trajectories Efficiently using Double Descriptions of Polynomials},
    author={Wang, Zhepei and Ye, Hongkai and Xu, Chao and Gao, Fei},
    address={Xi'an, China},
    booktitle={IEEE International Conference on Robotics and Automation},
    pages={7436-7442},
    year={2021},
    organization={IEEE}
}

Author: Zhepei Wang and Fei Gao from the ZJU Fast Lab.

2. How to Use

a. Initialize an instance of "JerkOpt/SnapOpt"

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.

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.

d. Call "getObjective" to get energy cost.

e. Call "getGradT" and "getGradInnerP" to obtain gradients for the specified time allocation and intermediate waypoints.

f. If needed, repeat c, d, and e to optimize time allocation and intermediate waypoints using the objective and the gradient.

g. Call "getTraj" to obtain the trajectory.

Note: Part c must be conducted after a and b. Part d, e, f and g must be conducted after c.

3. Examples

Example 1 gives the computation speed of our implementation. Please use catkin_make of ROS to build the source code of this example.

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 while using significantly less computation time.

4. Performance

We 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.

Burke et al., “Generating minimum-snap quadrotor trajectories really fast,” IROS 2020.
Bry et al., “Aggressive flight of fixed-wing and quadrotor aircraft in dense indoor environments,” IJRR 2015.
Mellinger et al., “Minimum snap trajectory generation and control for quadrotors,” ICRA 2011.

large_scale_traj_optimizer's People

Contributors

zhepeiwang avatar sritank avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.