{"id":24133510,"url":"https://github.com/makeecat/peng","last_synced_at":"2025-05-14T15:02:14.914Z","repository":{"id":247477584,"uuid":"825447170","full_name":"makeecat/Peng","owner":"makeecat","description":"A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)","archived":false,"fork":false,"pushed_at":"2025-05-07T21:30:02.000Z","size":40811,"stargazers_count":661,"open_issues_count":1,"forks_count":33,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-05-08T18:50:09.997Z","etag":null,"topics":["drone","quadcopter","quadrotor","rerun","robotics","rust","uav"],"latest_commit_sha":null,"homepage":"https://deepwiki.com/makeecat/Peng","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/makeecat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["makeecat"],"buy_me_a_coffee":"yangrobotics"}},"created_at":"2024-07-07T19:52:02.000Z","updated_at":"2025-05-07T21:05:49.000Z","dependencies_parsed_at":"2024-08-26T15:07:55.590Z","dependency_job_id":"83e4a993-3bc3-43c0-9b5b-d6e9855b6b9c","html_url":"https://github.com/makeecat/Peng","commit_stats":null,"previous_names":["makeecat/peng"],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeecat%2FPeng","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeecat%2FPeng/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeecat%2FPeng/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeecat%2FPeng/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/makeecat","download_url":"https://codeload.github.com/makeecat/Peng/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254168534,"owners_count":22026182,"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":["drone","quadcopter","quadrotor","rerun","robotics","rust","uav"],"created_at":"2025-01-11T23:38:38.271Z","updated_at":"2025-05-14T15:02:14.837Z","avatar_url":"https://github.com/makeecat.png","language":"Rust","funding_links":["https://github.com/sponsors/makeecat","https://buymeacoffee.com/yangrobotics"],"categories":[],"sub_categories":[],"readme":"# [![Peng](https://raw.githubusercontent.com/makeecat/Peng/main/assets/Peng.svg)](https://github.com/makeecat/Peng)\n\n[![License](https://img.shields.io/badge/license-MIT%2FApache-blue.svg)](https://github.com/makeecat/Peng#license)\n[![Crates.io](https://img.shields.io/crates/v/peng_quad.svg)](https://crates.io/crates/peng_quad)\n[![Downloads](https://img.shields.io/crates/d/peng_quad.svg)](https://crates.io/crates/peng_quad)\n[![Docs](https://docs.rs/peng_quad/badge.svg)](https://docs.rs/peng_quad/latest/peng_quad/)\n[![CI](https://github.com/makeecat/Peng/actions/workflows/CI.yml/badge.svg)](https://github.com/makeecat/Peng/actions/workflows/CI.yml)\n[![dependency status](https://deps.rs/repo/github/makeecat/peng/status.svg)](https://deps.rs/repo/github/makeecat/peng)\n[![Discord](https://img.shields.io/discord/1324766515077185688?label=Discord\u0026logo=discord)](https://discord.gg/NDsZXpGWPR)\n\n## 🔍 Overview\n\nPeng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.\n\n[![rerun demo](https://raw.githubusercontent.com/makeecat/Peng/main/assets/Peng_demo.gif)](https://rerun.io/viewer/version/0.22.0/?url=https%3A%2F%2Fyangrobotics.com%2Ffiles%2Fpeng_v0.5.4.rrd)\n\n## 🎯 Key Features\n\n- 🚁 **Real-time Simulation**\n  - High-fidelity quadrotor dynamics with configurable parameters\n  - IMU and depth sensor simulation\n  - Optional RK4 integration for accurate dynamics\n- 🎮 **Advanced Control**\n  - PID control for position and attitude with tunable gains\n  - Integral windup prevention\n  - Support for different control frequencies\n- 📍 **Rich Trajectory Planning**\n  - Minimum jerk line trajectory planner\n  - Lissajous curve planner\n  - Circular trajectory planner\n  - Obstacle avoidance planner\n  - Minimum snap waypoint navigation planner\n  - Quadratic Polynomial waypoint navigation planner\n  - Landing planner\n- 📊 **Visualization \u0026 Debug**\n  - Real-time 3D visualization via rerun.io\n  - Depth map rendering\n  - State telemetry logging\n  - Configurable logging frequencies\n- ⚡ **Performance**\n  - Memory-safe and Efficient Rust implementation\n  - Multi-threaded depth rendering\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- [Rust](https://www.rust-lang.org/tools/install)\n- [rerun-cli](https://rerun.io/docs/getting-started/installing-viewer)\n\n### Installation from Crates.io\n\n```bash\ncargo install rerun-cli\ncargo install peng_quad\npeng_quad config/quad.yaml\n```\n\n### Installation from Source\n\n```bash\ncargo install rerun-cli\ngit clone https://github.com/makeecat/Peng.git\ncd Peng\ncargo run --release config/quad.yaml\n```\n\n## ⚙️ Configuration\n\n- You can configure the simulation through config file, see [quad.yaml](config/quad.yaml) for example.\n- Configure simulation parameters such as mass, inertia, and control gains.\n- Configure control parameters such as PID gains.\n- Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.\n- Configure visualization parameters such as camera intrinsics and depth rendering.\n\n## 🔧 Rerun Troubleshooting\n\nIf you encountered any issue with the rerun:\n\n1. Verify rerun-cli version matches rerun version in [Cargo.toml](https://github.com/makeecat/Peng/blob/main/Cargo.toml):\n\n```bash\nrerun --version\n```\n\n2. For Linux/WSL2 users, consult the [rerun troubleshooting](https://rerun.io/docs/getting-started/troubleshooting).\n\n## 🗺️ Roadmap\n\n- [ ] Wind field and environmental effects\n- [ ] Motor dynamics simulation\n- [ ] Multi-quadrotor simulation\n- [ ] Model Predictive Control (MPC)\n\n## 🤝 Contributing\n\nWe welcome contributions of all kinds! Please check out the [Contributing Guidelines](CONTRIBUTING.md) for more details.\n\n## 📄 License\n\nPeng is free, open source and permissively licensed!\nExcept where noted (below and/or in individual files), all code in this repository is dual-licensed under either:\n\n- MIT License ([LICENSE-MIT](LICENSE-MIT) or [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT))\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0))\n  at your option.\n\nThis means you can select the license you prefer!\n\n## 📝 Blog Posts\n\n- [Peng #1: Minimal quadrotor pipeline in Rust](https://yangrobotics.com/peng-1-minimal-quadrotor-pipeline-in-rust)\n- [Peng #2: Error Handling, Configuration System and Obstacle Avoidance Planner](https://yangrobotics.com/peng-2-error-handling-configuration-system-and-obstacle-avoidance-planner)\n- [Peng #3: Optimization of Depth Rendering and RK4-based Dynamics Update](https://yangrobotics.com/peng-3-optimization-of-depth-rendering-and-rk4-based-dynamics-update)\n\n## 📚 Citation\n\nIf you use this project in your research or work, please cite it as follows:\n\n```bibtex\n@software{peng_quad,\n  author       = {Yang Zhou},\n  title        = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},\n  year         = {2024},\n  publisher    = {GitHub},\n  journal      = {GitHub repository},\n  howpublished = {\\url{https://github.com/makeecat/peng}},\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakeecat%2Fpeng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmakeecat%2Fpeng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakeecat%2Fpeng/lists"}