I am the author of this toy project. My personal website is [here]((https://yangrobotics.com). Thank you all for your interest!
This project began as an effort to mentor a talented high school student in learning Rust and robotics. During the process, I realized that there was a lack of educational materials available online.
In response, I set out to create a minimal example of quadrotor control and planning in Rust. I was inspired by [llm.c](https://github.com/karpathy/llm.c), which teaches complex topics with minimal code. My goal was to provide a similar experience, introducing the magic behind quadrotor autonomy with as little code as possible.
With the initial framework I developed, I am thrilled to see that my mentee is now able to work independently, experimenting with his own ideas in Rust!
I believe this codebase will be valuable for anyone who wants to:
a. Learn the principles behind quadrotor autonomy.
Code robotics in Rust.
b. Explore the challenges of using Rust before incorporating it into their projects.
Throughout the development of this project, I have strived to work entirely within the Rust ecosystem. I am now convinced that Rust is ready for serious robotics development. Here are some tools I've been using:
There are still a few things I'm searching for, such as a robust optimization library. Currently, I'm experimenting with [OpEn](https://alphaville.github.io/optimization-engine) for nonlinear model predictive control, but I hope to find something akin to [acados](https://github.com/acados) in Rust. Additionally, while nalgebra is solid, I believe it still doesn't outperform [Eigen](https://eigen.tuxfamily.org) in terms of performance, though Rust's language features might limit the possibility of implementing something like Eigen.
I'm open to suggestions and feedback! For instance, I’m still debating whether to modularize the pipeline and add async features, or whether to keep things simpler to avoid overwhelming beginner learners.
Current code statistics:
Rust: 1263
Markdown: 305
Comments: 19
Blanks: 44
PS: When naming the project "Peng," I had no idea that "peng" also means attractive! Well, I hope you find the project attractive too.
Yang, this is really well done. I work with Rust and robotics all day, and would have never imagine seeing all this in one file. It is a great learning tool. If you complete the MPC controller it can also be a great learning tool for training AI pilots.
Do you have some suggestion for me to complete the MPC controller? Anything can help! For example: reference rust repo, optimization engine, optimization algorithm (linear / nonlinear). For nonlinear I am deciding between panoc and admm.
It is hard to demonstrate MPC in a simplistic way, but I want to take the challenge!
Today marks the start of my robotics phd in a lab focused on trajectory optimization and optimal control. Coincidence I came across this? Nope. Go rust for robotics!
> Peng (traditional Chinese: 鵬; simplified Chinese: 鹏; pinyin: péng; Wade–Giles: p'eng) or Dapeng (大鵬) is a giant bird that transforms from a Kun (鯤; 鲲; kūn; k'un) giant fish in Chinese mythology.
Just a funny coincidence, in British slang, a bird is a woman, and being peng means being attractive..
In response, I set out to create a minimal example of quadrotor control and planning in Rust. I was inspired by [llm.c](https://github.com/karpathy/llm.c), which teaches complex topics with minimal code. My goal was to provide a similar experience, introducing the magic behind quadrotor autonomy with as little code as possible.
With the initial framework I developed, I am thrilled to see that my mentee is now able to work independently, experimenting with his own ideas in Rust!
I believe this codebase will be valuable for anyone who wants to:
a. Learn the principles behind quadrotor autonomy. Code robotics in Rust.
b. Explore the challenges of using Rust before incorporating it into their projects.
Throughout the development of this project, I have strived to work entirely within the Rust ecosystem. I am now convinced that Rust is ready for serious robotics development. Here are some tools I've been using:
1. [zed.dev](https://yangrobotics.com) for code editing.
2. [Rerun](rerun.io) for visualization.
3. [tokei](https://github.com/XAMPPRocky/tokei) for code line statistics.
4. [nalgebra](https://nalgebra.org) for matrix operations.
There are still a few things I'm searching for, such as a robust optimization library. Currently, I'm experimenting with [OpEn](https://alphaville.github.io/optimization-engine) for nonlinear model predictive control, but I hope to find something akin to [acados](https://github.com/acados) in Rust. Additionally, while nalgebra is solid, I believe it still doesn't outperform [Eigen](https://eigen.tuxfamily.org) in terms of performance, though Rust's language features might limit the possibility of implementing something like Eigen.
I'm open to suggestions and feedback! For instance, I’m still debating whether to modularize the pipeline and add async features, or whether to keep things simpler to avoid overwhelming beginner learners.
Current code statistics:
Rust: 1263
Markdown: 305
Comments: 19
Blanks: 44
PS: When naming the project "Peng," I had no idea that "peng" also means attractive! Well, I hope you find the project attractive too.