Commit Graph

53 Commits

Author SHA1 Message Date
Oleg Kalachev
3dde380bb7 Add parameters for list of modes bound to rc switch
Parameters: CTL_FLT_MODE_0, CTL_FLT_MODE_1, CTL_FLT_MODE_2.
Also fix a bug with incorrect choosing the mode from controlMode.
2026-01-27 16:38:20 +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
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
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