Commit Graph
100 Commits
Author SHA1 Message Date
Oleg Kalachev 9a9bd07251 Add correct attitude estimation video to the usage article 2026-01-15 23:46:23 +03:00
Oleg Kalachev 28f5855a57 Re-arrange control.ino declarations to make a bit more sensible
So the control command is above the PID controllers.
2026-01-13 17:43:53 +03:00
Oleg Kalachev 7e24ee30f7 Documentation and book updates
Improve the main list of features.
Use lowercase imu variable for consistency with the firmware code.
Minor fixes.
2026-01-13 17:26:40 +03:00
Oleg Kalachev 2a8faf5759 Fix logo svg slightly 2026-01-08 19:45:08 +03:00
Oleg Kalachev f4e58a652a Add project logo 2026-01-08 17:58:59 +03:00
Oleg Kalachev 6c46328da1 Minor doc fixes 2026-01-04 15:01:53 +03:00
Oleg Kalachev c8e5e08b03 Move all global variable declarations to the appropriate subsystems
As it makes the subsystems code easier to understand.
Declare the most used variables in main sketch file as forward declarations.
Make all control input zero by default (except controlMode).
Minor changes.
2026-01-03 13:28:18 +03:00
Oleg Kalachev a5e3dfcf69 Some updates to the docs 2026-01-03 12:18:47 +03:00
Oleg Kalachev d6e8be0c05 Add parameters for easier IMU orientation definition 2025-12-26 21:14:15 +03:00
Oleg Kalachev 68d16855df Add motors rotation diagram to usage article 2025-12-25 07:22:09 +03:00
Oleg Kalachev 0547ea548b Add parameters for acc weight and rates lpf alpha 2025-12-24 05:43:55 +03:00
Oleg Kalachev c02dba6812 Rename gyroCalibrationFilter to gyroBiasFilter
Which seems a better name
2025-12-24 05:36:43 +03:00
Oleg Kalachev f1dc4a0400 Updates to user builds article 2025-12-17 02:21:51 +03:00
Oleg Kalachev 158827ac55 Add new user builds, add school 548 course overview
+ minor doc fixes.
2025-12-13 21:09:33 +03:00
Oleg Kalachev 36ca30c3e4 Minor docs fix 2025-11-27 18:34:32 +03:00
Oleg Kalachev 48711b55e1 Add tip about CNT_TILT_MAX parameter to the simulator article 2025-11-26 17:34:08 +03:00
Oleg Kalachev 4d583185a9 Rename manual mode to raw mode
Make it callable from the console.
Increase the coefficient.
Corresponding change in pyflix.
pyflix@0.11.
2025-11-25 04:44:16 +03:00
Oleg Kalachev d757ffa853 Move yaw dead zone handling from mavlink to control subsystem
So yaw dead zone works the same for rc and mavlink.
2025-11-22 05:11:46 +03:00
Oleg Kalachev 5352386486 Minor updates to pyflix library, pyflix@0.10
Fixes to documentation.
Improve logger format.
2025-11-22 05:07:46 +03:00
Oleg Kalachev 9b5872740f Add wifi cli command
To show wi-fi info.
2025-11-22 04:46:54 +03:00
Oleg Kalachev 31dbdaf241 Group control parameters
Also add IMU group to accelerometer calibration parameters.
2025-11-19 01:50:46 +03:00
Oleg Kalachev f4b56262b1 Remove unneeded SERIAL_BAUDRATE define 2025-11-14 20:23:15 +03:00
Oleg Kalachev 49039f752d Refactor Wi-Fi log download
Use MAVLink LOG_REQUEST_DATA and LOG_DATA for download log instead of console.
Make Wi-Fi download default way of downloading the log.
Make `log` command only print the header and `log dump` dump the log.
2025-11-14 20:21:05 +03:00
Oleg Kalachev 348721acc9 Updates in documentation
Fixes, updates, new illustrations.
2025-11-10 20:16:14 +03:00
Oleg Kalachev 774144c430 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.
2025-11-06 13:55:52 +03:00
Oleg Kalachev 0e6651ab82 Add Rate class for running the code at fixed rate 2025-11-06 13:41:33 +03:00
Oleg Kalachev 1a017ccb97 Keep only one floating point version of map function
Two variants are redundant
2025-11-02 00:02:28 +03:00
Oleg Kalachev 7170b20d1d Simplify command for command handling 2025-10-21 19:41:10 +03:00
Oleg Kalachev dc9aed113b Minor code fixes 2025-10-21 19:41:05 +03:00
Oleg Kalachev 08b6123eb7 Fixes to troubleshooting 2025-10-21 19:40:54 +03:00
Oleg Kalachev 1a8b63ee04 Send only mavlink heartbeats until connected 2025-10-21 19:39:17 +03:00
Oleg Kalachev 8c49a40516 Skip attitude/rate control if thrustTarget is ineffective
To prevent i term windup.
2025-10-20 23:01:17 +03:00
Oleg Kalachev ca595edce5 Refactor PID control to simplify the code and modifications
Each PID uses its internal dt, so may be various contexts with different rate.
PID has max dt, so no need to reset explicitly.
2025-10-20 22:54:18 +03:00
Oleg Kalachev e50a9d5fea Revert t variable type to float instead of double
For the sake of simplicity and consistency.
2025-10-19 20:46:38 +03:00
Oleg Kalachev ebac78dc0f Minor change 2025-10-19 20:46:26 +03:00
Oleg Kalachev 186cf88d84 Add generic Delay filter 2025-10-19 20:46:11 +03:00
Oleg Kalachev 253aae2220 Lowercase imu and rc variables
To make it more obvious these are variables, not classes.
2025-10-19 20:45:56 +03:00
Oleg Kalachev 6f0964fac4 Rename failsafe.ino to safety.ino
To aggregate all the safety related functionality.
2025-10-19 20:44:54 +03:00
Oleg Kalachev 1d034f268d Add ESP32-S3 build to Actions 2025-10-19 20:44:46 +03:00
Oleg Kalachev 1ca7d32862 Update VSCode settings
Disable error squiggles as they often work incorrectly.
Decrease number of include libraries to index.
2025-10-14 11:43:55 +03:00
Oleg Kalachev ab941e34fa Fix Gazebo installation
Installation script is deprecated, install using package on Ubuntu 20.04
2025-10-13 18:56:14 +03:00
Oleg Kalachev 7bee3d1751 Improve rc failsafe logic
Don't trigger failsafe if there's no RC at all
Use AUTO mode for descending, instead of STAB
Increase RC loss timeout and descend time
2025-10-12 21:27:08 +03:00
Oleg Kalachev 06ec5f3160 Disarm the drone on simulator plugin reset
In order to reset yaw target.
2025-10-07 15:45:48 +03:00
Oleg Kalachev c4533e3ac8 Reset yaw target when drone disarmed
Prevent unexpected behavior when the drone tries to restore its old yaw on takeoff.
2025-10-07 15:43:28 +03:00
Oleg Kalachev e673b50f52 Include FlixPeriph header instead of MPU9250
This simplifies choosing IMU model
2025-10-07 08:43:12 +03:00
Oleg Kalachev 5151bb9133 Ensure showing correct raw data in imu command
Some IMUs will reset acc and gyro buffer on whoAmI() call
2025-10-07 08:43:06 +03:00
Oleg Kalachev c08c8ad91c pyflix@0.9 2025-10-03 06:49:44 +03:00
Oleg Kalachev e44f32fca7 pyflix: don't quit on any sendto error 2025-10-03 06:47:56 +03:00
Oleg Kalachev ca03bdb260 pyflix: partially fix wireless downloading logs 2025-10-03 06:46:56 +03:00
Oleg Kalachev b3dffe99fb pyflix: add passing event name to off method 2025-10-03 06:46:29 +03:00
Oleg Kalachev 6e6a71fa69 Remove unneeded advice from troubleshooting 2025-10-03 06:45:16 +03:00
Oleg Kalachev 838fe11f6b Simplify mode index check in set_mode 2025-09-26 05:03:36 +03:00
Oleg Kalachev 8b36509932 pyflix@0.8 2025-09-25 16:55:06 +03:00
Oleg Kalachev 0268c8ebcf Some fixes and updates in pyflix
Fix set_controls
Add set_armed method
2025-09-25 16:53:49 +03:00
Oleg Kalachev 09bf09e520 Update schematics diagram 2025-09-25 06:16:02 +03:00
Oleg Kalachev 4c89b10767 Fix fields order in psq command 2025-09-20 22:35:36 +03:00
Oleg Kalachev a79df52959 Don't trigger rc failsafe in AUTO mode or if disamed 2025-09-20 20:36:36 +03:00
Oleg Kalachev e88888baeb Fix rc calibration steps enumeration again 2025-09-11 11:47:28 +03:00
Oleg Kalachev de69b228ff Fix rc calibration steps enumeration 2025-09-02 11:03:44 +03:00
Oleg Kalachev f9739dcd7e Don't arm by mavlink command if throttle is not low 2025-08-29 03:47:51 +03:00
Oleg Kalachev 708c8f04dc Minor docs fix 2025-08-28 05:17:46 +03:00
Oleg Kalachev 2128201440 Fix simulation build 2025-08-28 01:13:38 +03:00
Oleg Kalachev 8e3c86f5ee pyflix@0.7 2025-08-28 00:52:27 +03:00
Oleg Kalachev 40fc4b96b5 Implement AUTO mode for automatic flights
Support SET_ATTITUDE_TARGET, SET_ACTUATOR_CONTROL_TARGET in mavlink.
ACTUATOR_OUTPUT_STATUS is changed ACTUATOR_CONTROL_TARGET to match used message for setting motor outputs.
Add support for changing mode from mavlink.
Support automatic flights in pyflix.
2025-08-28 00:49:24 +03:00
Oleg Kalachev 10fafbc4a0 Send udp packets in unicast after connection is established
This makes qgc connection faster.
Add WIFI_UDP_REMOTE_ADDR macro for default remote address for both the firmware and simulation.
2025-08-27 05:01:07 +03:00
Oleg Kalachev d47d7b8bd4 Support arm/disarm mavlink commands
Refactor commands handling to remove repeating ack message packing.
2025-08-27 04:45:25 +03:00
Oleg Kalachev a7fdc2a88f Minor change in cli help message 2025-08-27 04:43:24 +03:00
Oleg Kalachev c1788e2c75 Refactor arming logic
Arm and disarm with gestures only: left stick right/down for arming, left/down for disarming.
Remove arming switch as it complicates arming gestures logic.
Remove MAV_CTRL_SCALE parameter as it complicates arming gestures logic, advise to decrease TILT_MAX when controlling with a smartphone.
Put some minimal thrust to motors to indicate armed state.
Rename build article to usage article, add flight instructions.
2025-08-27 03:19:26 +03:00
Oleg Kalachev beb655fdcb Add illustration for qgc proxy for pyflix 2025-08-27 03:13:28 +03:00
Oleg Kalachev bf0cdac111 Major update of the articles
Reflect control subsystem refactoring.
Update dataflow diagram.
Add control subsystem diagram.
Minor updates.
2025-08-27 00:09:42 +03:00
Oleg Kalachev b21e81a68b Add cli commands for switching mode
Make mode variable int instead of enum, which is more convinient.
2025-08-26 21:55:27 +03:00
Oleg Kalachev 8418723ccc Refactor control subsystem
Add interpretControls function to convert pilot commands and mode into control targets and make control functions independent from the mode.
Add ratesExtra target for rates feed-forward; remove yawMode.
Rename controlRate to controlRates to reflect rates variable name.
Remove USER mode.
2025-08-26 01:00:56 +03:00
Oleg Kalachev a1539157b8 Show raw values in imu command 2025-08-22 17:20:33 +03:00
Oleg Kalachev 80922dc68a Some updates to readme and build article
Add info on using USB gamepad
Replace KINGKONG transmitter with BetaFPV LiteRadio
Add RoboCamp video
2025-08-20 22:06:17 +03:00
Oleg Kalachev fcd2738763 Add link to stls from robocamp 2025-08-19 15:20:24 +03:00
Oleg Kalachev fa07ed3a4e Minor docs change 2025-08-15 00:51:08 +03:00
Oleg Kalachev dee4d97ab3 Add getRoll, getPitch, setRoll, setPitch methods
Add methods to Quaternion for consistency with getYaw and setYaw
2025-08-09 18:10:11 +03:00
Oleg Kalachev ea35db37da Minor code simplification 2025-08-09 17:53:06 +03:00
Oleg Kalachev cd953f24ad Add RoboCamp to built drones article 2025-08-07 14:29:39 +03:00
Oleg Kalachev 3f80712641 Some updates to articles 2025-08-06 23:52:35 +03:00
Oleg Kalachev 18bacb64f3 Make rc loss timeout longer 2025-07-31 12:35:28 +03:00
Oleg Kalachev 7e8bd3e834 Minor updates 2025-07-28 22:07:33 +03:00
Oleg Kalachev bb0643e8c6 Add missing set_velocity method stub to pyflix 2025-07-28 22:06:30 +03:00
Oleg Kalachev 32f417efae Updates in pyflix
Rename mav_to to system_id to match firmware naming.
Readme updates.
2025-07-24 09:15:44 +03:00
Oleg Kalachev 018a6d4fce Add repository field to python library 2025-07-22 17:21:51 +03:00
Oleg KalachevandGitHub 1f47aa6d62 Add Python library (#20) 2025-07-22 14:17:08 +03:00
Oleg Kalachev 779fa13e80 Increase connection timeout for arduino-cli as it prevents some users from downloading the core 2025-07-21 11:12:47 +03:00
Oleg Kalachev 5eccb3f0c4 Fix rates, acc and gyro coordinate frame in mavlink
All of them should be in frd.
Get rid of fluToFrd function - there is no big need for it.
2025-07-19 05:32:49 +03:00
Oleg Kalachev 29f1a2b22b Minor fixes to builds list 2025-07-18 14:19:43 +03:00
Oleg Kalachev 1d4ce810a9 Add chkroko's bldc build 2025-07-18 12:14:42 +03:00
Oleg Kalachev 32874b92fd Minor fixes 2025-07-14 12:05:16 +03:00
Oleg Kalachev 6b38070e43 Rename printIMUCal to printIMUCalibration for consistency with rc 2025-07-14 12:04:02 +03:00
Oleg Kalachev 52819e403b Major rework of rc subsystem
Implement channels mapping calibration.
Store mapping in parameters.
Get rid of `controls` array and store control inputs in `controlRoll`, `controlPitch`, ... variables.
Move `channels` variable to rc.ino, channels are not involved when controled using mavlink.
'Neutral' values are renamed to 'zero' - more precise naming.
`controlsTime` is renamed to `controlTime`.
Use unsigned values for channels.
Make channel values in simulation more alike to real world: unsigned values in range [1000, 2000].
Send RC_CHANNELS_RAW instead of RC_CHANNELS_SCALED via mavlink
Don't send channels data via mavlink if rc is not used
2025-07-14 12:01:29 +03:00
Oleg Kalachev 449dd44741 Fix storing nans and infs in preferences in simulator
Turns out file streams cannot parse nans and infs on some platforms, so use std::stof to parse.
2025-07-14 09:52:49 +03:00
Oleg Kalachev e389d717d6 Show unspecified core as * in sys command 2025-07-13 11:12:54 +03:00
Oleg Kalachev ea8463ed70 Fixes in firmware variables description 2025-07-12 10:07:52 +03:00
Oleg Kalachev 85afe405cb Improve pause function work
Fix disconnecting from qgc while pausing in the simulation. 
Consider total delay time in micros() in simulation to increase t while delaying.
Simplify and get rid of ARDUINO macro check.
2025-07-12 09:29:47 +03:00
Oleg Kalachev fd4bcbeb89 Minor changes 2025-07-10 07:27:53 +03:00
Oleg Kalachev 121b50d896 Increase motors pwm frequency to 78Khz
1000 Hz is too low frequency considering the update loop for motors signal is also 1000 Hz.
Decrease resolution as it's required to set larger pwm frequencies.
This change should vastly improve control jitter and remove audible motors noise.
2025-07-03 03:46:11 +03:00
Oleg Kalachev 48c7135efb Return zero rotation vector when converting neutral quaternion
Previously it would return nans
2025-07-01 02:48:49 +03:00