FSC-Lab/TOGT-Planner

C++

77

14 commits

updated Sep 2, 2026

See the code

See what people are saying

SourceMessageScoreDate

PPO quad racing in our sim: 5.7 s laps, shaky take-off (r/reinforcementlearning)

Trained a quad to race a 90 m figure-eight gate track with PPO in our sim (Unreal Engine 5 + JSBSim). 96 drones in parallel, 100M steps on a laptop. The policy commands body rates, sees simulated sensors through an estimator and never gets ground truth. Median lap is 5.7 s. A time-optimal planner…

7

Oct 11, 2026

README

TOGT-Planner

Time-Optimal Gate-Traversing (TOGT) Planner is a lightweight trajectory generator for racing drones that can accommodate a broad range of race tracks comprising gates with diverse shapes and sizes. It provides high trajectory quality in terms of dynamic feasibility by employing the differential-flat nature of quadrotor systems and incorporating single-rotor thrust constraints.

If the TOGT planner helps your academic projects, please cite our papers. Thank you!

  • Time-Optimal Gate-Traversing Planner for Autonomous Drone Racing, Chao Qin, Maxime SJ Michet, Jingxiang Chen, and Hugh H.-T. Liu, IEEE International Conference on Robotics and Automation (ICRA-2024)

  • Time optimal quadrotor maneuver: From optimality analysis to trajectory planning, Chao Qin, Jingxiang Chen, Yifan Lin, Abhishek Goudar, Angela P.Schoellig, and Hugh H.-T. Liu, (IJRR-2026)

Updates:

  • Sept. 2, 2026 - Support true time optimality with a progress optimization scheme
  • May. 2, 2024 - Add three different variances of the TOGT planner and make the project public
  • Feb. 19, 2024 - First version released

Install on Ubuntu

1. Clone repo

git clone https://github.com/FSC-Lab/TOGT-Planner/
cd TOGT-Planner

2. Build the library

mkdir build; cd build
cmake ..
make

3. Run the example

./tests

Visualize the TOGT trajectory

The default race track race_uzh_7g_multiprisma.yaml contains 7 gates with different shapes, respectively, triangle, rectangle, pentagon, rectangle, rectangle, hexagon, and ball gates in order. The resulting lap time is 8.23 s.

cd ../scripts/plots
python3 plot_togt_traj.py

Alt Text

Visualize the TOGT-Refined trajectory

The TOGT trajectory can be refined to reach true time optimality. We take the optimal gate-traversal point as the waypoint and use the obtained time allocation to compute a proper node number for each segment between two consecutive waypoints. Then, we warm-start the multiple-shooting method with the planned TOGT trajectory. The following Python script conducts the refinement for us. The resulting lap time is 7.01 s.

cd ../scripts/togt_refine
python3 togt_refine.py
cd ../plots
python3 plot_togt_refined_traj.py

Alt Text

Visualize the AOS trajectory for waypoint flight

Another example is the Split-S track provided in this paper. It consists of 19 waypoints in total with a tolerance of 0.3 m for each point. Below is our generated trajectory. The AOS stands for Automatic Optimal Synthesis, a novel framework to address time-optimal planning problems. It is part of the result from the second reference above. It takes around 6 seconds to solve the minimum-time trajectory that originally required ~50 minutes in previous methods. The resulting lap time is only 1~2% longer than the optimal solution. We will provide an in-depth analytical analysis in the paper about its distance-insensitive nature. The resulting lap time is 17.93 s while the true optimal is 17.56 s.

cd ../scripts/plots
python3 plot_aos_traj.py

Alt Text

Visualize the AOS-TOGT trajectory

The TOGT and AOS planners can be seamlessly integrated, contributing to a highly efficient and accurate method to solve the time-optimal gate-traversing problem. The code below can visualize the result. The resulting lap time is 16.83 s, which is 4% faster than time-optimal waypoint flights.

cd ../scripts/plots
python3 plot_aos_togt_traj.py

Alt Text

Acknowledgements

FSC-Lab/TOGT-Planner

C++

77

14 commits

updated Sep 2, 2026

See the code

See what people are saying

SourceMessageScoreDate

PPO quad racing in our sim: 5.7 s laps, shaky take-off (r/reinforcementlearning)

Trained a quad to race a 90 m figure-eight gate track with PPO in our sim (Unreal Engine 5 + JSBSim). 96 drones in parallel, 100M steps on a laptop. The policy commands body rates, sees simulated sensors through an estimator and never gets ground truth. Median lap is 5.7 s. A time-optimal planner…

7

Oct 11, 2026

README

TOGT-Planner

Time-Optimal Gate-Traversing (TOGT) Planner is a lightweight trajectory generator for racing drones that can accommodate a broad range of race tracks comprising gates with diverse shapes and sizes. It provides high trajectory quality in terms of dynamic feasibility by employing the differential-flat nature of quadrotor systems and incorporating single-rotor thrust constraints.

If the TOGT planner helps your academic projects, please cite our papers. Thank you!

  • Time-Optimal Gate-Traversing Planner for Autonomous Drone Racing, Chao Qin, Maxime SJ Michet, Jingxiang Chen, and Hugh H.-T. Liu, IEEE International Conference on Robotics and Automation (ICRA-2024)

  • Time optimal quadrotor maneuver: From optimality analysis to trajectory planning, Chao Qin, Jingxiang Chen, Yifan Lin, Abhishek Goudar, Angela P.Schoellig, and Hugh H.-T. Liu, (IJRR-2026)

Updates:

  • Sept. 2, 2026 - Support true time optimality with a progress optimization scheme
  • May. 2, 2024 - Add three different variances of the TOGT planner and make the project public
  • Feb. 19, 2024 - First version released

Install on Ubuntu

1. Clone repo

git clone https://github.com/FSC-Lab/TOGT-Planner/
cd TOGT-Planner

2. Build the library

mkdir build; cd build
cmake ..
make

3. Run the example

./tests

Visualize the TOGT trajectory

The default race track race_uzh_7g_multiprisma.yaml contains 7 gates with different shapes, respectively, triangle, rectangle, pentagon, rectangle, rectangle, hexagon, and ball gates in order. The resulting lap time is 8.23 s.

cd ../scripts/plots
python3 plot_togt_traj.py

Alt Text

Visualize the TOGT-Refined trajectory

The TOGT trajectory can be refined to reach true time optimality. We take the optimal gate-traversal point as the waypoint and use the obtained time allocation to compute a proper node number for each segment between two consecutive waypoints. Then, we warm-start the multiple-shooting method with the planned TOGT trajectory. The following Python script conducts the refinement for us. The resulting lap time is 7.01 s.

cd ../scripts/togt_refine
python3 togt_refine.py
cd ../plots
python3 plot_togt_refined_traj.py

Alt Text

Visualize the AOS trajectory for waypoint flight

Another example is the Split-S track provided in this paper. It consists of 19 waypoints in total with a tolerance of 0.3 m for each point. Below is our generated trajectory. The AOS stands for Automatic Optimal Synthesis, a novel framework to address time-optimal planning problems. It is part of the result from the second reference above. It takes around 6 seconds to solve the minimum-time trajectory that originally required ~50 minutes in previous methods. The resulting lap time is only 1~2% longer than the optimal solution. We will provide an in-depth analytical analysis in the paper about its distance-insensitive nature. The resulting lap time is 17.93 s while the true optimal is 17.56 s.

cd ../scripts/plots
python3 plot_aos_traj.py

Alt Text

Visualize the AOS-TOGT trajectory

The TOGT and AOS planners can be seamlessly integrated, contributing to a highly efficient and accurate method to solve the time-optimal gate-traversing problem. The code below can visualize the result. The resulting lap time is 16.83 s, which is 4% faster than time-optimal waypoint flights.

cd ../scripts/plots
python3 plot_aos_togt_traj.py

Alt Text

Acknowledgements