Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

« Previous Version 27 Next »

Overview:

From the highest level, one can think of the entirety of the autopilot software engine as being a black box which takes in instructions from a ground station (mostly about the flight plan) and outputs a series of actuator commands in order to fly the plane (Although note that it does not directly talk to the actuators. Rather, it sends those commands to a middleman chip, the "safety controller" that takes care of pushing the commands to the actuators). It takes care of everything from takeoff to level flight to landing and apart from collecting instructions from the ground station about where we want to go, it does all this without the need for any human intervention.

Software design

The entirety of the autopilot consists of 3 threads that each manage a state machine and many other threads that manage sensor data acquisition. The 3 state machines are the Attitude manager; responsible for putting and keeping the aircraft in some desired attitude (roll and pitch) at some desired airspeed, the Path manager; responsible for navigation of the airplane by constantly instructing Attitude manager to achieve certain attitudes and airspeeds, and the Telemetry manager; responsible for all communication with the ground station. At the same time, there will be a thread for each sensor, ensuring data is collected at well timed intervals. The diagram below depicts these threads as well as the communication between them (Black arrows depict inter thread communication while the ticc white arrows depict communication with an external piece of hardware.



Each of these components along with their sub components has an associated architecture page, listed as children of this page. Here is the hierarchy.

RTOS

The autopilot software is built on FreeRTOS, an open-source Real-Time Operating System. FreeRTOS gives us the ability to run multiple concurrent threads on a single processor at strict time intervals.

  • No labels