Below are the software components of the Drogon Quadcopter.
Arduino code for low-level hardware integration, providing flight stabilization, navigation execution, and sensor management.
This is C++ code which implements positioning and flight stabilization algorithms. This is imported as an Arduino library by the Drogon Arduino sketch.
One of the advantages to having these functions broken out to a separate C++ library is they can be incorporated into a test program which can run on any computer. This can aid in both development, testing, and tuning of the algorithms before running them on the Arduino. To make testing easier, a Python API layer to the native C++ functions was added. By using Python to implement tests, tests can be more quickly developed.
The Drogon Master daemon is the hub of all data and activity on the robot. It is a modular component-based architecture to manage the communication of components and to manage the lifecycle of a specific type of component called modules. Communication between components is achieved through an event-based communication system. Components can broadcast data to all listening components or send data to a specific component. Specific types of components called modules are packaged with the Drogon Master web application, however they communicate with other modules or components using the same event-based communication system.
The Arduino acts as a component of Drogon Master by reading to and writing from the Serial connection between the Arduino and the Raspberry Pi. There is a companion module in the Drogon Master daemon which manages the Serial interface on the RaspberryPy to the Drogon Master communication system.
Drogon Master currently runs as a Web Application within the Jetty sevlet container.