Peng

LicenseCrates.ioDownloadsDocsCIdependency statusDiscord

🔍 Overview

Peng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.

rerun demo

🎯 Key Features

  • 🚁 Real-time Simulation
    • High-fidelity quadrotor dynamics with configurable parameters
    • IMU and depth sensor simulation
    • Optional RK4 integration for accurate dynamics
  • 🎮 Advanced Control
    • PID control for position and attitude with tunable gains
    • Integral windup prevention
    • Support for different control frequencies
  • 📍 Rich Trajectory Planning
    • Minimum jerk line trajectory planner
    • Lissajous curve planner
    • Circular trajectory planner
    • Obstacle avoidance planner
    • Minimum snap waypoint navigation planner
    • Quadratic Polynomial waypoint navigation planner
    • Landing planner
  • 📊 Visualization & Debug
    • Real-time 3D visualization via rerun.io
    • Depth map rendering
    • State telemetry logging
    • Configurable logging frequencies
  • Performance
    • Memory-safe and Efficient Rust implementation
    • Multi-threaded depth rendering

🚀 Getting Started

Prerequisites

Installation from Crates.io

cargo install rerun-cli
cargo install peng_quad
peng_quad config/quad.yaml

Installation from Source

cargo install rerun-cli
git clone https://github.com/makeecat/Peng.git
cd Peng
cargo run --release config/quad.yaml

⚙️ Configuration

  • You can configure the simulation through config file, see quad.yaml for example.
  • Configure simulation parameters such as mass, inertia, and control gains.
  • Configure control parameters such as PID gains.
  • Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.
  • Configure visualization parameters such as camera intrinsics and depth rendering.

🔧 Rerun Troubleshooting

If you encountered any issue with the rerun:

  1. Verify rerun-cli version matches rerun version in Cargo.toml:
rerun --version
  1. For Linux/WSL2 users, consult the rerun troubleshooting.

🗺️ Roadmap

  • Wind field and environmental effects
  • Motor dynamics simulation
  • Multi-quadrotor simulation
  • Model Predictive Control (MPC)

🤝 Contributing

We welcome contributions of all kinds! Please check out the Contributing Guidelines for more details.

📄 License

Peng is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

This means you can select the license you prefer!

📝 Blog Posts

📚 Citation

If you use this project in your research or work, please cite it as follows:

@software{peng_quad,
author = {Yang Zhou},
title = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/makeecat/peng}},
}

About

A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

695 stars

Watchers

16 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Peng

LicenseCrates.ioDownloadsDocsCIdependency statusDiscord

🔍 Overview

Peng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.

rerun demo

🎯 Key Features

  • 🚁 Real-time Simulation
    • High-fidelity quadrotor dynamics with configurable parameters
    • IMU and depth sensor simulation
    • Optional RK4 integration for accurate dynamics
  • 🎮 Advanced Control
    • PID control for position and attitude with tunable gains
    • Integral windup prevention
    • Support for different control frequencies
  • 📍 Rich Trajectory Planning
    • Minimum jerk line trajectory planner
    • Lissajous curve planner
    • Circular trajectory planner
    • Obstacle avoidance planner
    • Minimum snap waypoint navigation planner
    • Quadratic Polynomial waypoint navigation planner
    • Landing planner
  • 📊 Visualization & Debug
    • Real-time 3D visualization via rerun.io
    • Depth map rendering
    • State telemetry logging
    • Configurable logging frequencies
  • Performance
    • Memory-safe and Efficient Rust implementation
    • Multi-threaded depth rendering

🚀 Getting Started

Prerequisites

Installation from Crates.io

cargo install rerun-cli
cargo install peng_quad
peng_quad config/quad.yaml

Installation from Source

cargo install rerun-cli
git clone https://github.com/makeecat/Peng.git
cd Peng
cargo run --release config/quad.yaml

⚙️ Configuration

  • You can configure the simulation through config file, see quad.yaml for example.
  • Configure simulation parameters such as mass, inertia, and control gains.
  • Configure control parameters such as PID gains.
  • Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.
  • Configure visualization parameters such as camera intrinsics and depth rendering.

🔧 Rerun Troubleshooting

If you encountered any issue with the rerun:

  1. Verify rerun-cli version matches rerun version in Cargo.toml:
rerun --version
  1. For Linux/WSL2 users, consult the rerun troubleshooting.

🗺️ Roadmap

  • Wind field and environmental effects
  • Motor dynamics simulation
  • Multi-quadrotor simulation
  • Model Predictive Control (MPC)

🤝 Contributing

We welcome contributions of all kinds! Please check out the Contributing Guidelines for more details.

📄 License

Peng is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

This means you can select the license you prefer!

📝 Blog Posts

📚 Citation

If you use this project in your research or work, please cite it as follows:

@software{peng_quad,
author = {Yang Zhou},
title = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/makeecat/peng}},
}

About

A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

695 stars

Watchers

16 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Peng

LicenseCrates.ioDownloadsDocsCIdependency statusDiscord

🔍 Overview

Peng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.

rerun demo

🎯 Key Features

  • 🚁 Real-time Simulation
    • High-fidelity quadrotor dynamics with configurable parameters
    • IMU and depth sensor simulation
    • Optional RK4 integration for accurate dynamics
  • 🎮 Advanced Control
    • PID control for position and attitude with tunable gains
    • Integral windup prevention
    • Support for different control frequencies
  • 📍 Rich Trajectory Planning
    • Minimum jerk line trajectory planner
    • Lissajous curve planner
    • Circular trajectory planner
    • Obstacle avoidance planner
    • Minimum snap waypoint navigation planner
    • Quadratic Polynomial waypoint navigation planner
    • Landing planner
  • 📊 Visualization & Debug
    • Real-time 3D visualization via rerun.io
    • Depth map rendering
    • State telemetry logging
    • Configurable logging frequencies
  • Performance
    • Memory-safe and Efficient Rust implementation
    • Multi-threaded depth rendering

🚀 Getting Started

Prerequisites

Installation from Crates.io

cargo install rerun-cli
cargo install peng_quad
peng_quad config/quad.yaml

Installation from Source

cargo install rerun-cli
git clone https://github.com/makeecat/Peng.git
cd Peng
cargo run --release config/quad.yaml

⚙️ Configuration

  • You can configure the simulation through config file, see quad.yaml for example.
  • Configure simulation parameters such as mass, inertia, and control gains.
  • Configure control parameters such as PID gains.
  • Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.
  • Configure visualization parameters such as camera intrinsics and depth rendering.

🔧 Rerun Troubleshooting

If you encountered any issue with the rerun:

  1. Verify rerun-cli version matches rerun version in Cargo.toml:
rerun --version
  1. For Linux/WSL2 users, consult the rerun troubleshooting.

🗺️ Roadmap

  • Wind field and environmental effects
  • Motor dynamics simulation
  • Multi-quadrotor simulation
  • Model Predictive Control (MPC)

🤝 Contributing

We welcome contributions of all kinds! Please check out the Contributing Guidelines for more details.

📄 License

Peng is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

This means you can select the license you prefer!

📝 Blog Posts

📚 Citation

If you use this project in your research or work, please cite it as follows:

@software{peng_quad,
author = {Yang Zhou},
title = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/makeecat/peng}},
}

About

A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

695 stars

Watchers

16 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Peng

LicenseCrates.ioDownloadsDocsCIdependency statusDiscord

🔍 Overview

Peng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.

rerun demo

🎯 Key Features

  • 🚁 Real-time Simulation
    • High-fidelity quadrotor dynamics with configurable parameters
    • IMU and depth sensor simulation
    • Optional RK4 integration for accurate dynamics
  • 🎮 Advanced Control
    • PID control for position and attitude with tunable gains
    • Integral windup prevention
    • Support for different control frequencies
  • 📍 Rich Trajectory Planning
    • Minimum jerk line trajectory planner
    • Lissajous curve planner
    • Circular trajectory planner
    • Obstacle avoidance planner
    • Minimum snap waypoint navigation planner
    • Quadratic Polynomial waypoint navigation planner
    • Landing planner
  • 📊 Visualization & Debug
    • Real-time 3D visualization via rerun.io
    • Depth map rendering
    • State telemetry logging
    • Configurable logging frequencies
  • Performance
    • Memory-safe and Efficient Rust implementation
    • Multi-threaded depth rendering

🚀 Getting Started

Prerequisites

Installation from Crates.io

cargo install rerun-cli
cargo install peng_quad
peng_quad config/quad.yaml

Installation from Source

cargo install rerun-cli
git clone https://github.com/makeecat/Peng.git
cd Peng
cargo run --release config/quad.yaml

⚙️ Configuration

  • You can configure the simulation through config file, see quad.yaml for example.
  • Configure simulation parameters such as mass, inertia, and control gains.
  • Configure control parameters such as PID gains.
  • Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.
  • Configure visualization parameters such as camera intrinsics and depth rendering.

🔧 Rerun Troubleshooting

If you encountered any issue with the rerun:

  1. Verify rerun-cli version matches rerun version in Cargo.toml:
rerun --version
  1. For Linux/WSL2 users, consult the rerun troubleshooting.

🗺️ Roadmap

  • Wind field and environmental effects
  • Motor dynamics simulation
  • Multi-quadrotor simulation
  • Model Predictive Control (MPC)

🤝 Contributing

We welcome contributions of all kinds! Please check out the Contributing Guidelines for more details.

📄 License

Peng is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

This means you can select the license you prefer!

📝 Blog Posts

📚 Citation

If you use this project in your research or work, please cite it as follows:

@software{peng_quad,
author = {Yang Zhou},
title = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/makeecat/peng}},
}

About

A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

695 stars

Watchers

16 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Peng

LicenseCrates.ioDownloadsDocsCIdependency statusDiscord

🔍 Overview

Peng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.

rerun demo

🎯 Key Features

  • 🚁 Real-time Simulation
    • High-fidelity quadrotor dynamics with configurable parameters
    • IMU and depth sensor simulation
    • Optional RK4 integration for accurate dynamics
  • 🎮 Advanced Control
    • PID control for position and attitude with tunable gains
    • Integral windup prevention
    • Support for different control frequencies
  • 📍 Rich Trajectory Planning
    • Minimum jerk line trajectory planner
    • Lissajous curve planner
    • Circular trajectory planner
    • Obstacle avoidance planner
    • Minimum snap waypoint navigation planner
    • Quadratic Polynomial waypoint navigation planner
    • Landing planner
  • 📊 Visualization & Debug
    • Real-time 3D visualization via rerun.io
    • Depth map rendering
    • State telemetry logging
    • Configurable logging frequencies
  • Performance
    • Memory-safe and Efficient Rust implementation
    • Multi-threaded depth rendering

🚀 Getting Started

Prerequisites

Installation from Crates.io

cargo install rerun-cli
cargo install peng_quad
peng_quad config/quad.yaml

Installation from Source

cargo install rerun-cli
git clone https://github.com/makeecat/Peng.git
cd Peng
cargo run --release config/quad.yaml

⚙️ Configuration

  • You can configure the simulation through config file, see quad.yaml for example.
  • Configure simulation parameters such as mass, inertia, and control gains.
  • Configure control parameters such as PID gains.
  • Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.
  • Configure visualization parameters such as camera intrinsics and depth rendering.

🔧 Rerun Troubleshooting

If you encountered any issue with the rerun:

  1. Verify rerun-cli version matches rerun version in Cargo.toml:
rerun --version
  1. For Linux/WSL2 users, consult the rerun troubleshooting.

🗺️ Roadmap

  • Wind field and environmental effects
  • Motor dynamics simulation
  • Multi-quadrotor simulation
  • Model Predictive Control (MPC)

🤝 Contributing

We welcome contributions of all kinds! Please check out the Contributing Guidelines for more details.

📄 License

Peng is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

This means you can select the license you prefer!

📝 Blog Posts

📚 Citation

If you use this project in your research or work, please cite it as follows:

@software{peng_quad,
author = {Yang Zhou},
title = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/makeecat/peng}},
}

About

A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

695 stars

Watchers

16 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Peng

LicenseCrates.ioDownloadsDocsCIdependency statusDiscord

🔍 Overview

Peng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.

rerun demo

🎯 Key Features

  • 🚁 Real-time Simulation
    • High-fidelity quadrotor dynamics with configurable parameters
    • IMU and depth sensor simulation
    • Optional RK4 integration for accurate dynamics
  • 🎮 Advanced Control
    • PID control for position and attitude with tunable gains
    • Integral windup prevention
    • Support for different control frequencies
  • 📍 Rich Trajectory Planning
    • Minimum jerk line trajectory planner
    • Lissajous curve planner
    • Circular trajectory planner
    • Obstacle avoidance planner
    • Minimum snap waypoint navigation planner
    • Quadratic Polynomial waypoint navigation planner
    • Landing planner
  • 📊 Visualization & Debug
    • Real-time 3D visualization via rerun.io
    • Depth map rendering
    • State telemetry logging
    • Configurable logging frequencies
  • Performance
    • Memory-safe and Efficient Rust implementation
    • Multi-threaded depth rendering

🚀 Getting Started

Prerequisites

Installation from Crates.io

cargo install rerun-cli
cargo install peng_quad
peng_quad config/quad.yaml

Installation from Source

cargo install rerun-cli
git clone https://github.com/makeecat/Peng.git
cd Peng
cargo run --release config/quad.yaml

⚙️ Configuration

  • You can configure the simulation through config file, see quad.yaml for example.
  • Configure simulation parameters such as mass, inertia, and control gains.
  • Configure control parameters such as PID gains.
  • Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.
  • Configure visualization parameters such as camera intrinsics and depth rendering.

🔧 Rerun Troubleshooting

If you encountered any issue with the rerun:

  1. Verify rerun-cli version matches rerun version in Cargo.toml:
rerun --version
  1. For Linux/WSL2 users, consult the rerun troubleshooting.

🗺️ Roadmap

  • Wind field and environmental effects
  • Motor dynamics simulation
  • Multi-quadrotor simulation
  • Model Predictive Control (MPC)

🤝 Contributing

We welcome contributions of all kinds! Please check out the Contributing Guidelines for more details.

📄 License

Peng is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

This means you can select the license you prefer!

📝 Blog Posts

📚 Citation

If you use this project in your research or work, please cite it as follows:

@software{peng_quad,
author = {Yang Zhou},
title = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/makeecat/peng}},
}

About

A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

695 stars

Watchers

16 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Peng

LicenseCrates.ioDownloadsDocsCIdependency statusDiscord

🔍 Overview

Peng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.

rerun demo

🎯 Key Features

  • 🚁 Real-time Simulation
    • High-fidelity quadrotor dynamics with configurable parameters
    • IMU and depth sensor simulation
    • Optional RK4 integration for accurate dynamics
  • 🎮 Advanced Control
    • PID control for position and attitude with tunable gains
    • Integral windup prevention
    • Support for different control frequencies
  • 📍 Rich Trajectory Planning
    • Minimum jerk line trajectory planner
    • Lissajous curve planner
    • Circular trajectory planner
    • Obstacle avoidance planner
    • Minimum snap waypoint navigation planner
    • Quadratic Polynomial waypoint navigation planner
    • Landing planner
  • 📊 Visualization & Debug
    • Real-time 3D visualization via rerun.io
    • Depth map rendering
    • State telemetry logging
    • Configurable logging frequencies
  • Performance
    • Memory-safe and Efficient Rust implementation
    • Multi-threaded depth rendering

🚀 Getting Started

Prerequisites

Installation from Crates.io

cargo install rerun-cli
cargo install peng_quad
peng_quad config/quad.yaml

Installation from Source

cargo install rerun-cli
git clone https://github.com/makeecat/Peng.git
cd Peng
cargo run --release config/quad.yaml

⚙️ Configuration

  • You can configure the simulation through config file, see quad.yaml for example.
  • Configure simulation parameters such as mass, inertia, and control gains.
  • Configure control parameters such as PID gains.
  • Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.
  • Configure visualization parameters such as camera intrinsics and depth rendering.

🔧 Rerun Troubleshooting

If you encountered any issue with the rerun:

  1. Verify rerun-cli version matches rerun version in Cargo.toml:
rerun --version
  1. For Linux/WSL2 users, consult the rerun troubleshooting.

🗺️ Roadmap

  • Wind field and environmental effects
  • Motor dynamics simulation
  • Multi-quadrotor simulation
  • Model Predictive Control (MPC)

🤝 Contributing

We welcome contributions of all kinds! Please check out the Contributing Guidelines for more details.

📄 License

Peng is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

This means you can select the license you prefer!

📝 Blog Posts

📚 Citation

If you use this project in your research or work, please cite it as follows:

@software{peng_quad,
author = {Yang Zhou},
title = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/makeecat/peng}},
}

About

A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

695 stars

Watchers

16 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Peng

LicenseCrates.ioDownloadsDocsCIdependency statusDiscord

🔍 Overview

Peng is a minimal quadrotor autonomy framework written in Rust that provides real-time dynamics simulation, trajectory planning, and control with modern visualization capabilities.

rerun demo

🎯 Key Features

  • 🚁 Real-time Simulation
    • High-fidelity quadrotor dynamics with configurable parameters
    • IMU and depth sensor simulation
    • Optional RK4 integration for accurate dynamics
  • 🎮 Advanced Control
    • PID control for position and attitude with tunable gains
    • Integral windup prevention
    • Support for different control frequencies
  • 📍 Rich Trajectory Planning
    • Minimum jerk line trajectory planner
    • Lissajous curve planner
    • Circular trajectory planner
    • Obstacle avoidance planner
    • Minimum snap waypoint navigation planner
    • Quadratic Polynomial waypoint navigation planner
    • Landing planner
  • 📊 Visualization & Debug
    • Real-time 3D visualization via rerun.io
    • Depth map rendering
    • State telemetry logging
    • Configurable logging frequencies
  • Performance
    • Memory-safe and Efficient Rust implementation
    • Multi-threaded depth rendering

🚀 Getting Started

Prerequisites

Installation from Crates.io

cargo install rerun-cli
cargo install peng_quad
peng_quad config/quad.yaml

Installation from Source

cargo install rerun-cli
git clone https://github.com/makeecat/Peng.git
cd Peng
cargo run --release config/quad.yaml

⚙️ Configuration

  • You can configure the simulation through config file, see quad.yaml for example.
  • Configure simulation parameters such as mass, inertia, and control gains.
  • Configure control parameters such as PID gains.
  • Configure trajectory planner parameters such as waypoints, obstacles, and trajectory type.
  • Configure visualization parameters such as camera intrinsics and depth rendering.

🔧 Rerun Troubleshooting

If you encountered any issue with the rerun:

  1. Verify rerun-cli version matches rerun version in Cargo.toml:
rerun --version
  1. For Linux/WSL2 users, consult the rerun troubleshooting.

🗺️ Roadmap

  • Wind field and environmental effects
  • Motor dynamics simulation
  • Multi-quadrotor simulation
  • Model Predictive Control (MPC)

🤝 Contributing

We welcome contributions of all kinds! Please check out the Contributing Guidelines for more details.

📄 License

Peng is free, open source and permissively licensed! Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

This means you can select the license you prefer!

📝 Blog Posts

📚 Citation

If you use this project in your research or work, please cite it as follows:

@software{peng_quad,
author = {Yang Zhou},
title = {Peng: A Minimal Quadrotor Autonomy Framework in Rust},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/makeecat/peng}},
}

About

A minimal quadrotor autonomy framework in Rust (Mac, Linux, Windows)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

695 stars

Watchers

16 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages