mirror of
https://github.com/okalachev/flix.git
synced 2026-01-10 21:16:50 +00:00
Many updates to documentation
Updates to main readme. Add much more info to usage article. Move simulator building to simulation's readme. Improve assembly article. Many fixes. Updates in diagrams.
This commit is contained in:
@@ -6,7 +6,7 @@ The firmware is a regular Arduino sketch, and it follows the classic Arduino one
|
||||
|
||||
<img src="img/dataflow.svg" width=600 alt="Firmware dataflow diagram">
|
||||
|
||||
The main loop is running at 1000 Hz. All the dataflow goes through global variables (for simplicity):
|
||||
The main loop is running at 1000 Hz. The dataflow goes through global variables, including:
|
||||
|
||||
* `t` *(float)* — current step time, *s*.
|
||||
* `dt` *(float)* — time delta between the current and previous steps, *s*.
|
||||
@@ -14,12 +14,12 @@ The main loop is running at 1000 Hz. All the dataflow goes through global variab
|
||||
* `acc` *(Vector)* — acceleration data from the accelerometer, *m/s<sup>2</sup>*.
|
||||
* `rates` *(Vector)* — filtered angular rates, *rad/s*.
|
||||
* `attitude` *(Quaternion)* — estimated attitude (orientation) of drone.
|
||||
* `controlRoll`, `controlPitch`, ... *(float[])* — pilot control inputs, range [-1, 1].
|
||||
* `motors` *(float[])* — motor outputs, range [0, 1].
|
||||
* `controlRoll`, `controlPitch`, `controlYaw`, `controlThrottle`, `controlMode` *(float)* — pilot control inputs, range [-1, 1].
|
||||
* `motors` *(float[4])* — motor outputs, range [0, 1].
|
||||
|
||||
## Source files
|
||||
|
||||
Firmware source files are located in `flix` directory. The core files are:
|
||||
Firmware source files are located in `flix` directory.
|
||||
|
||||
* [`flix.ino`](../flix/flix.ino) — Arduino sketch main file, entry point.Includes some global variable definitions and the main loop.
|
||||
* [`imu.ino`](../flix/imu.ino) — reading data from the IMU sensor (gyroscope and accelerometer), IMU calibration.
|
||||
@@ -28,6 +28,7 @@ Firmware source files are located in `flix` directory. The core files are:
|
||||
* [`control.ino`](../flix/control.ino) — control subsystem, three-dimensional two-level cascade PID controller.
|
||||
* [`motors.ino`](../flix/motors.ino) — PWM motor output control.
|
||||
* [`mavlink.ino`](../flix/mavlink.ino) — interaction with QGroundControl or [pyflix](../tools/pyflix) via MAVLink protocol.
|
||||
* [`cli.ino`](../flix/cli.ino) — serial and MAVLink console.
|
||||
|
||||
Utility files:
|
||||
|
||||
@@ -45,12 +46,22 @@ Pilot inputs are interpreted in `interpretControls()`, and then converted to the
|
||||
* `torqueTarget` *(Vector)* — target torque, range [-1, 1].
|
||||
* `thrustTarget` *(float)* — collective thrust target, range [0, 1].
|
||||
|
||||
Control command is processed in `controlAttitude()`, `controlRates()`, `controlTorque()` functions. Each function may be skipped if the corresponding target is set to `NAN`.
|
||||
Control command is handled in `controlAttitude()`, `controlRates()`, `controlTorque()` functions. Each function may be skipped if the corresponding control target is set to `NAN`.
|
||||
|
||||
<img src="img/control.svg" width=300 alt="Control subsystem diagram">
|
||||
|
||||
Armed state is stored in `armed` variable, and current mode is stored in `mode` variable.
|
||||
|
||||
## Building
|
||||
### Console
|
||||
|
||||
To write into the console, `print()` function is used. This function sends data both to the Serial console and to the MAVLink console (which can be accessed wirelessly in QGroundControl). The function supports formatting:
|
||||
|
||||
```cpp
|
||||
print("Test value: %.2f\n", testValue);
|
||||
```
|
||||
|
||||
In order to add a console command, modify the `doCommand()` function in `cli.ino` file.
|
||||
|
||||
## Building the firmware
|
||||
|
||||
See build instructions in [usage.md](usage.md).
|
||||
|
||||
Reference in New Issue
Block a user