Have you ever try to fly a Rolling Spider, Cargo or Mambo quadcopter ? They are incredibly stable, thanks to all the sensors handled by the onboard ARM chip running linux. They have 6 axis IMU, a barometer, an ultrasonic sensor and realtime image analysis to detect horizontal drift;
They have only one drawback : you pilot them with a smartphone. (well, there is another drawback, but that will be the subject of another ongoing project)
Luckily, Parrot has published a SDK. It's only available for iOS, Android & Linux, but the control protocols are available.
So, this is what this project does : (partly) porting those protocol to an esp32, mounted on a JR-compatible module plugged into a RC transmitter.
This is a work in progress. For now the quad can be controlled, and some settings changed during flight. The module can read transmitter data from PPM or S.bus.
Others RC protocols will probably be implemented, and telemetry would be really nice !
This project has started as a standalone one, i.e. all functionalities included in the code. But has it went, it became obvious that a lot of parts of this project could (and indeed would) be usable for other projects as well. Reading PPM stream or S.bus data to name few.
The project has thus been split into several libraries, which are available on github (see links).
The RC protocols are handled by the espRC library. For now it can read PPM stream, S.bus frames, and it can emulate Smart port telemetry. More will probably come, but only what was mandatory for this project has been implemented for now. I've tried as much as possible to stick to a common interface to handle specific functions. Understand that there are base classes exposing an interface, and specialized classes handling specific protocols. While it works for PPM and S.bus, I suspect other protocols may not stick to this. Same thing for telemetry. For now only S.port has been implemented, but I don't know if other telemetry protocols could share an interface together. Time will tell.
The Parrot protocols are handled by the espParrotMinidrone library. Basic function for connection, initialization and piloting are handled. There is room for improvisation, and many functions are left to be implemented (like taking pictures, getting or changing name, get information from sensors, etc.)
ParrotEsp packs everything together. The master branch is intended to be used on an esp32 connected into the JR module bay of a FrSky transmitter. It uses S.bus for input, and outputs SmartPort telemetry back to the transmitter.
The initial standalone code is also available in the stand_alone branch.