{"id":49453543,"url":"https://github.com/yrlu/quadrotor","last_synced_at":"2026-05-16T16:01:35.390Z","repository":{"id":44814889,"uuid":"90555661","full_name":"yrlu/quadrotor","owner":"yrlu","description":"Quadrotor control, path planning and trajectory optimization","archived":false,"fork":false,"pushed_at":"2024-05-05T00:36:38.000Z","size":39274,"stargazers_count":1036,"open_issues_count":10,"forks_count":297,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-09-04T19:45:54.115Z","etag":null,"topics":["astar","controller","dijstra","drone","path-planning","pd-controller","planning","quadrotor","trajectory-optimization","trajectory-planning","uav","unmanned-aerial-vehicle"],"latest_commit_sha":null,"homepage":"","language":"MATLAB","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/yrlu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-05-07T19:14:11.000Z","updated_at":"2025-09-04T03:35:05.000Z","dependencies_parsed_at":"2025-04-11T10:19:39.876Z","dependency_job_id":"4e4bd67b-3d03-4f4f-894e-9ccc65bd1f49","html_url":"https://github.com/yrlu/quadrotor","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/yrlu/quadrotor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yrlu%2Fquadrotor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yrlu%2Fquadrotor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yrlu%2Fquadrotor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yrlu%2Fquadrotor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yrlu","download_url":"https://codeload.github.com/yrlu/quadrotor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yrlu%2Fquadrotor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33109461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["astar","controller","dijstra","drone","path-planning","pd-controller","planning","quadrotor","trajectory-optimization","trajectory-planning","uav","unmanned-aerial-vehicle"],"created_at":"2026-04-30T04:01:03.698Z","updated_at":"2026-05-16T16:01:35.385Z","avatar_url":"https://github.com/yrlu.png","language":"MATLAB","funding_links":[],"categories":["📦 Legacy \u0026 Inactive Projects"],"sub_categories":[],"readme":"## Quadrotor Control, Path Planning and Trajectory Optimization\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.6796215.svg)](https://doi.org/10.5281/zenodo.6796215)\n\n\u003ca href=\"https://youtu.be/lA2B1YDLJaY\"\u003e\n\u003cimg src=\"imgs/hover.jpg\" alt=\"step\" width=\"600\"\u003e\n\u003c/a\u003e\n\n(Click the image above to watch real quadrotor demonstrations)\n\nFollowing [MEAM 620 Advanced Robotics](https://alliance.seas.upenn.edu/~meam620/wiki/) course at University of Pennsylvania. \n\n🚫 For Penn students: Please *DO NOT* spoil the learning experience by using this repository as a shortcut for your assignments. Most importantly, *DO NOT* violate the honor code!\n\n### Repository Contents\n\nThis repository contains MATLAB code for:\n- Quadrotor PD controllers\n- Path planning algorithms (Dijkstra, A*)\n- Trajectory optimization algorithms (Minimum Snap/Acceleration Trajectory)\n\nIf you use this software in your publications, please cite it using the following BibTeX entry:\n\n```bibtex\n@misc{lu2017quadrotor,\n  author = {Lu, Yiren and Cai, Myles and Ling, Wudao and Zhou, Xuanyu},\n  doi = {10.5281/zenodo.6796215},\n  month = {7},\n  title = {{Quadrotor control, path planning and trajectory optimization}},\n  url = {https://github.com/yrlu/quadrotor},\n  year = {2017}\n}\n```\n\n## PD Controller\n\n- Run code: change trajectories in file `control/runsim.m` and run.\n- See [quadrotor_dynamics.pdf](quadrotor_dynamics.pdf) for dynamic modeling of the quadrotor.\n- See `control/controller.m` for implementation of the PD controller.\n- Visualization below. Desired (blue) vs Actual (red)\n\n#### Trajectory 1: Step\n\n\u003cimg src=\"gifs/p1p1_step.gif\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p1_step_p.jpg\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p1_step_v.jpg\" alt=\"step\" width=\"270\"\u003e\n\n\n#### Trajectory 2: Circle\n\n\u003cimg src=\"gifs/p1p1_circle.gif\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p1_circle_p.jpg\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p1_circle_v.jpg\" alt=\"step\" width=\"270\"\u003e\n\n#### Trajectory 2: Diamond\n\n\u003cimg src=\"gifs/p1p1_diamond.gif\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p1_diamond_p.jpg\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p1_diamond_v.jpg\" alt=\"step\" width=\"270\"\u003e\n\n## Path Planning and Trajectory Optimization\n\n- Run code: `traj_planning/runsim.m` and run path 1 or path 3.\n- See [project_report.pdf](project_report.pdf) for more details about trajectory generation\n- See `traj_planning/path_planning/dijkstra.m` for implementation of path finding algorithms (dijstra, A*).\n- See `traj_planning/traj_opt7.m` for implementations of minimium snap trajectory.\n- See `traj_planning/traj_opt5.m` for implementations of minimium acceleration trajectory.\n- Visualization below.\n\n#### Minimum Acceleration Trajectory\n\n\u003cimg src=\"gifs/p1p3_map1_acc.gif\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p3_map1_acc_p.jpg\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p3_map1_acc_v.jpg\" alt=\"step\" width=\"270\"\u003e\n\n\u003cimg src=\"gifs/p1p3_map3_mini_acc.gif\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p3_map3_mini_acc_p.jpg\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p3_map3_mini_acc_v.jpg\" alt=\"step\" width=\"270\"\u003e\n\n\n#### Minimum Snap Trajectory\n\n\u003cimg src=\"gifs/p1p3_map1_snap.gif\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p3_map1_snap_v.jpg\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p3_map1_snap_v.jpg\" alt=\"step\" width=\"270\"\u003e\n\n(with way points constraints)\n\n\u003cimg src=\"gifs/p1p3_map3_snap.gif\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p3_map3_snap_p.jpg\" alt=\"step\" width=\"270\"\u003e \u003cimg src=\"imgs/p1p3_map3_snap_v.jpg\" alt=\"step\" width=\"270\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyrlu%2Fquadrotor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyrlu%2Fquadrotor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyrlu%2Fquadrotor/lists"}