mirror of
https://github.com/okalachev/flix.git
synced 2025-07-27 17:49:33 +00:00
Add firmware overview article
This commit is contained in:
parent
654badd097
commit
344835cba8
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
**flix** (*flight + X*) — making an open source ESP32-based quadcopter from scratch.
|
**flix** (*flight + X*) — making an open source ESP32-based quadcopter from scratch.
|
||||||
|
|
||||||
<img src="docs/img/flix.jpg" width=500>
|
<img src="docs/img/flix.jpg" width=500 alt="Flix quadcopter">
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@ -31,11 +31,11 @@ See YouTube demo video: https://youtu.be/8GzzIQ3C6DQ.
|
|||||||
|
|
||||||
Simulation in Gazebo using a plugin that runs original Arduino code is implemented:
|
Simulation in Gazebo using a plugin that runs original Arduino code is implemented:
|
||||||
|
|
||||||
<img src="docs/img/simulator.png" width=500>
|
<img src="docs/img/simulator.png" width=500 alt="Flix simulator">
|
||||||
|
|
||||||
## Schematics
|
## Schematics
|
||||||
|
|
||||||
<img src="docs/img/schematics.svg" width=800>
|
<img src="docs/img/schematics.svg" width=800 alt="Flix schematics">
|
||||||
|
|
||||||
You can also check a user contributed [variant of complete circuit diagram](https://github.com/okalachev/flix/issues/3#issue-2066079898) of the drone.
|
You can also check a user contributed [variant of complete circuit diagram](https://github.com/okalachev/flix/issues/3#issue-2066079898) of the drone.
|
||||||
|
|
||||||
|
@ -98,6 +98,10 @@ Dependencies are [Gazebo Classic simulator](https://classic.gazebosim.org) and [
|
|||||||
|
|
||||||
See other available Make commands in the [Makefile](../Makefile).
|
See other available Make commands in the [Makefile](../Makefile).
|
||||||
|
|
||||||
|
### Firmware code structure
|
||||||
|
|
||||||
|
See [firmware overview](firmware.md) for more details.
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
Before flight in simulation and on the real drone, you need to calibrate your remote control. Use drone's command line interface (`make monitor` on the real drone) and type `cr` command. Copy calibration results to the source code (`flix/rc.ino` and/or `gazebo/joystick.h`).
|
Before flight in simulation and on the real drone, you need to calibrate your remote control. Use drone's command line interface (`make monitor` on the real drone) and type `cr` command. Copy calibration results to the source code (`flix/rc.ino` and/or `gazebo/joystick.h`).
|
||||||
|
36
docs/firmware.md
Normal file
36
docs/firmware.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# Firmware overview
|
||||||
|
|
||||||
|
## Dataflow
|
||||||
|
|
||||||
|
<img src="img/dataflow.svg" width=800 alt="Firmware dataflow diagram">
|
||||||
|
|
||||||
|
The main loop is running at 1000 Hz. All the dataflow is happening through global variables (for simplicity):
|
||||||
|
|
||||||
|
* `t` *(float)* — current step time, *s*.
|
||||||
|
* `dt` *(float)* — time delta between the current and previous steps, *s*.
|
||||||
|
* `rates` *(Vector)* — angular rates from the gyroscope, *rad/s*.
|
||||||
|
* `acc` *(Vector)* — acceleration data from the accelerometer, *m/s<sup>2</sup>*.
|
||||||
|
* `attitude` *(Quaternion)* — current estimated attitude (orientation) of drone.
|
||||||
|
* `controls` *(float[])* — user control inputs from the RC, normalized to [-1, 1] range.
|
||||||
|
* `motors` *(float[])* — motor outputs, normalized to [-1, 1] range; reverse rotation is possible.
|
||||||
|
|
||||||
|
## Source files
|
||||||
|
|
||||||
|
Firmware source files are located in `flix` directory. The key files are:
|
||||||
|
|
||||||
|
* [`flix.ino`](../flix/flix.ino) — main entry point, Arduino sketch. Include global variables definition and the main loop.
|
||||||
|
* [`imu.ino`](../flix/imu.ino) — reading data from the IMU sensor (gyroscope and accelerometer), IMU calibration.
|
||||||
|
* [`rc.ino`](../flix/rc.ino) — reading data from the RC receiver, RC calibration.
|
||||||
|
* [`estimate.ino`](../flix/estimate.ino) — drone's attitude estimation, complementary filter.
|
||||||
|
* [`control.ino`](../flix/control.ino) — drone's attitude and rates control, three-dimensional two-level cascade PID controller.
|
||||||
|
* [`motors.ino`](../flix/motors.ino) — PWM motor outputs control.
|
||||||
|
|
||||||
|
Utility files include:
|
||||||
|
|
||||||
|
* [`vector.h`](../flix/vector.h), [`quaternion.h`](../flix/quaternion.h) — project's vector and quaternion libraries implementation.
|
||||||
|
* [`pid.h`](../flix/pid.h) — generic PID controller implementation.
|
||||||
|
* [`lpf.h`](../flix/lpf.h) — generic low-pass filter implementation.
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
See build instructions in [build.md](build.md).
|
Loading…
x
Reference in New Issue
Block a user