Commit Graph
50 Commits
Author SHA1 Message Date
Oleg Kalachev b8c687f3ed Merge branch 'master' into stm 2026-08-11 23:17:04 +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 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 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 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 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 7e8bd3e834 Minor updates 2025-07-28 22:07:33 +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 6b7601c0bd Improve vector and quaternion libraries
Make the order or basic methods consistent between Vector and Quaternion.
Remove `ZYX` from Euler method names as this is standard for robotics.
Rename angular rates to rotation vector, which is more correct.
Make rotation methods static, to keep the arguments order consistent.
Make `Quaternion::fromAxisAngle` accept Vector for axis.
Minor fixes.
2025-05-31 04:17:00 +03:00
Oleg Kalachev 6ed6ef3e8c Assume armed is true if armed channel is not defined 2025-02-12 10:15:42 +03:00
Oleg Kalachev 821e6b105e Make channels definition to rc.ino
It's also planned to parametrize them later
2025-01-10 09:37:48 +03:00
Oleg Kalachev 85172cdcc8 Make util module header instead of .ino-file 2025-01-10 06:51:14 +03:00
Oleg Kalachev 95824e3b75 Make max tilt and max angle rates MAVLink parameters
Also decrease default max yaw rate to 300 degrees
2025-01-10 06:00:06 +03:00
Oleg Kalachev 0a45614751 Move motorsActive function to motors.ino 2025-01-09 11:30:04 +03:00
Oleg Kalachev 404ceed851 Make motor indexes definition const int and move them to motors.ino
Remove motor indexes definitions from flix.ino
Add motors.ino to simulation code and implement required mocks
2025-01-09 11:14:18 +03:00
Oleg Kalachev ca032abc03 Implement rotate method for quaternions as replace for multiplication
Vector rotating method is renamed from `rotate` to `rotateVector` to avoid inconsistent object and argument order in different `rotate` methods
2025-01-09 09:56:49 +03:00
Oleg Kalachev ec832d4e37 Implement RC fail-safe 2024-11-04 11:51:17 +03:00
Oleg Kalachev abcc9b96de Use FLU as the main coordinate system instead of FRD
Corresponding to the IMU orientation in the new version
2024-10-23 09:30:49 +03:00
Oleg Kalachev 84a329cca7 More clean yaw error calculation 2024-10-23 09:25:07 +03:00
Oleg Kalachev 7cfcf5b63b Use more natural torqueTarget order in mixer (xyz) 2024-05-21 10:52:39 +03:00
Oleg Kalachev ad6bc02643 Minor fixes and changes 2024-05-21 10:49:57 +03:00
Oleg Kalachev 41a9a95747 Transfer gyro low pass filter to estimate.ino
Separate raw gyro data and filtered rates to different variables
2024-04-20 14:52:01 +03:00
Oleg Kalachev ab2f99ab59 Simplify making user modes for control, add USER mode 2024-02-22 03:09:12 +03:00
Oleg Kalachev 5ec6b5e665 Make fromEulerZYX accept Vector instead of x, y, z 2024-02-20 04:51:59 +03:00
Oleg Kalachev 33319db1fa Make rates LPF cut-off frequency equal to 40 Hz 2024-02-07 10:49:31 +03:00
Oleg Kalachev ed6d09061b Rename RC_CHANNEL_AUX to RC_CHANNEL_ARMED 2024-01-19 05:19:41 +03:00
Oleg Kalachev 26a028ff66 Use only STAB mode by default 2024-01-19 05:16:44 +03:00
Oleg Kalachev f4aaf0f4f3 Use radians macro, minor change 2024-01-12 00:43:52 +03:00
Oleg Kalachev 476f24f774 Clarify rates control code 2024-01-06 00:08:30 +03:00
Oleg Kalachev d2296fea76 Change C++ code style: put curly brace on the same line 2023-12-29 18:56:25 +03:00
Oleg Kalachev fde9c1cf36 Minor changes and cleanups 2023-12-19 05:25:57 +03:00
Oleg Kalachev a9bcec2fa5 Main sdf cleanups, minor fix 2023-12-15 09:43:54 +03:00
Oleg Kalachev 2c21114540 Refactor control, remake controlManual to controlTorque 2023-12-13 08:33:35 +03:00
Oleg Kalachev 4fcf2109ce Simplify code using angularRatesBetweenVectors 2023-12-13 08:25:11 +03:00
Oleg Kalachev 24b62e5145 Move controlManual down 2023-12-13 08:06:15 +03:00
Oleg Kalachev f37015a97f Temporary remove controlManual to paste it bellow 2023-12-13 08:05:44 +03:00
Oleg Kalachev cb27e0f61f Cleanups 2023-12-13 07:59:08 +03:00
Oleg Kalachev 46579ce8a4 Better code for yaw target 2023-12-13 07:49:57 +03:00
Oleg Kalachev dbd413c234 Minor code cleanups and fixes 2023-11-12 10:51:56 +03:00
Oleg Kalachev 6dae4abaa2 Print low pass filters parameters and current mode in cli 2023-11-11 06:21:06 +03:00
Oleg Kalachev 7cabdc5e62 Implement low pass filter in separate module 2023-11-11 06:19:51 +03:00
Oleg Kalachev 8df71b078d Cleanups and minor changes 2023-11-11 06:17:50 +03:00
Oleg Kalachev b1dae8c33d Minor cleanup 2023-05-31 23:51:28 +03:00
Oleg Kalachev 39875cafb9 Remove non-effective statics 2023-05-31 20:12:45 +03:00
Oleg Kalachev 147eef0af7 Cleanups 2023-05-25 11:42:13 +03:00
Oleg Kalachev d6cca7dcf7 Some unification of the headers 2023-05-24 11:26:30 +03:00
Oleg Kalachev 87c75842f9 Change .hpp to .h 2023-05-24 10:40:12 +03:00
Oleg Kalachev e039055c8e Initial commit 2023-03-26 10:23:30 +03:00