I could fly my AtomFly recently as an R/C drone. It was designed to be operated by manual control via Wi-Fi to feed the target values of the pitch and the roll angles, as well as the throttle.
Here is a movie clip: https://twitter.com/qzy13700/status/1395989205440897024
Only the IMU sensor was used for the feedback control to keep the drone's posture. (ToF and pressure sensors not yet used).
I used the MahonyAHRS function for posture estimation from the IMU sensors. This is the same approach as the one done by the AtomFly product example code on GitHub.
One interesting thing I found about it in the past was that, the MahonyAHRSupdateIMU function has a hard-coded constant that specifies the sampling frequency of the sensor, which affects the behavior of the filter.
https://github.com/m5stack/M5Stack/blob/master/src/utility/MahonyAHRS.cpp
Therefore this part may need to be changed in the actual projects to match with the actual processing loop frequency, or otherwise the filtered pose estimation could become something not desirable.