Pilot-1: autonomous fixed-wing aircraft control system
In the past decade, the personal ownership of unmanned aerial vehicles has exploded in the US and around the world. The rapidly declining size and cost of integrated circuits, sensors and embedded micro-controllers has lead to a flourishing community of hobbyists designing flight controllers with levels of sophistication approaching those for government and military applications. The typical flight assisted controllers integrate data from the user's control system and an Inertial Measurement Unit (IMU) in order to keep the craft level and on course. Deriving mostly from the radio controlled (RC) hobby industry, the flight control technologies for both rotary and fixed wing systems are generally community-built and open source. While this leads to rapid development and ease of modification, quality usually suffers. Because the community is not a community of professionals, best coding practices are often left behind, leading to unexpected failures. Such flight control systems are unsuitable for integration into US airspace due to their failure-prone nature and inability to mitigate the failure of flight control surfaces. Fixed wing systems can also be controlled without an onboard flight controller or autopilot, with a simple camera downlink and direct control surface control being sufficient for most firrst-person video (FPV) needs. This has left a hole in the market for such controllers, with all offerings lacking in professional features such as redundancy and failure mitigation. Our project suffered from many setbacks, including one team member becoming ill and another leaving the project halfway into development. We were also hampered by our choice to use the brand new STM32Cube Hardware Abstraction Layer (described in more detail in Chapter 9), as 3rd party support and example code was nonexistent or conflicting with official documentation. As such, we were required to greatly reduce the featureset of our system. To compensate for this, we implemented a basic software plugin system, where future developers can code their own flight modes and recompile the software without having to revisit the basic I/O required to setup and access the onboard sensors and actuators. Looking forward, we believe we have solved many of the issues involved with developing a flight controller on this powerful, next-gen platform. We have implemented basic IMU-based flight stabilization and control, and future developers can easily code in the more premium features, such as GPS and telemetry, on top of the existing foundation.