THIS CRATE IS A WORK IN PROGRESS AND NOT YET READY FOR USE.
Protoflight is flight control software.
It has the following design goals (in no particular order).
- A modular design that is built up from components in separate crates (see below).
- Produce crates that are usable in their own right.
- Be peformant. Support 8kHz Gyro/PID loop.
- Support dual-core processors, in particular allow the Gyro/PID loop to have an entire core to itself.
- Be (relatively) easy to learn and modify.
- Give users the ability implement their own code or modifications.
- Modular architecture to make it easier to identify which bit of code to modify, without impacting other code.
- Be useful to people who want to experiment with and customize a flight controller.
- Be useful to someone who wants to understand how flight control software works.
- Be Betaflight "Tool compatible". This is be able to use the Betaflight Configurator and the Betaflight Blackbox Explorer.
I've called it Protoflight because:
- It can be used to prototype new ideas.
- It is related to "protean", meaning "able to change frequently or easily" or "versatile".
- One of the meanings of "proto" is "primitive".
- It pays homage to Protea, which was the codename for the Psion Series 5
- vqm - vectors, quaternions, and matrices.
- signal-filters - filters library, including biquad, moving average, low-pass, and notch filters.
- pidsk-controller - PID controller with optional feed forward and setpoint kick.
- imu-sensors - drivers for a variety of IMU (gyroscope and accelerometer) sensors.
- sensor-fusion - sensor fusion filters for Attitude and Heading Reference Systems (AHRS).
- motor-mixers - converts desired throttle and roll, pitch, yaw torques into motor commands.
Supports PWM and bidirectional
Dshotprotocols. Also includes RPM filters and dynamic idle control. - radio-controllers - Drivers for SBUS, IBUS, Crossfire/ExpressLRS receivers..
- blackbox-logger - based on implementation by Nicholas Sherlock (aka thenickdude).
- stream-buf - simple serializer/deserializer.
Protoflight has not yet achieved first flight. To do this, at least the following are required:
- Get
imu-sensorsworking with actual hardware. - Get
motor-mixersto drive actual hardware. - Get
radio-controllersto receive from actual hardware. - Create prototype board and put it all together.
I originally implemented this program in C++: Protoflight.