I’ve been working on a fixed wing micro-UAV / RC plane autopilot project.
The aim of the project is to develop an autopilot system that be installed in any fixed wing airframe and autonomously fly up to 512 waypoints. It has been thoroughly tested in flight simulators and the communications, AHRS and control systems are proven. The remaining work includes perfecting the auto-throttle system, channel mixing (for V-tails and flying wings) and failure management (what happens if the GPS drops out?).
I started this project from scratch nearly 12months ago. When I started out I had only the vaguest idea about how orientation sensing and autopilot systems work. So as you can imagine, the learning curve has been intense. I’ve had to learn about everything from control theory to NMEA sentances.
The project consists of a few different sets of software. This includes the ground control station (GCS) software, which is titled FLStation. It allows users to see the location, speed, altitude, orientation and so on of the aircraft. The GCS can also upload and download autopilot settings and plan flights using google maps. In the future it will be able to log data to a file and replay flights.
The autopilot software features a GPS infused AHRS algorithm that compensates for centrifugal force. Cascaded PID controllers are used to fly the aircraft. Pitch is directly coupled to the elevator, roll is couple to the ailerons and a component of roll is linked to the rudder so that turns are balanced. Altitude is coupled to the pitch controller, so if the selected altitude is increased the aircraft immediately pitches up. The control system is fairly straight forward, but it works well.
The communications system has also been ‘home made’. It’s titled FireLink and it features CRC-16 checksums for error detection and 256bit AES encryption for security. The FireLink API only generates and reads packets and is completely free of any dependancies - except standard C libraries. The useful data transfer rate between the UAV and ground station is 1200 bytes per second. Not exactly blisteringly fast, but it’s fast enough for telemetry and the slow rate means the transmitter speed can be slowed, which increases receiver sensitivity and range!
The parts used include the Arduino Due, AltIMU-10, MTK3339 GPS and RFD900 radio modems.
The RC receiver feeds PWM input into the Arduino Due. Depending on the autopilot mode, the Arduino processes that data and generates an output which drives the servos and controls the motor speed. Since the Arduino is a 3.3V device and RC receivers are 5V, there is a series of resistor voltage dividers to protect the Arduino. The servos seem to operate fine at 3.3V. In manual mode, the PWM input goes directly to the servos so it’s exactly like flying a normal RC plane, except you’ve got instruments on the laptop that tell you how fast and how high you are going. It’s pretty cool.
All the other gear is just standard RC plane gear. Presently I am looking at replacing the Arduino Due with something smaller and more suitable for RC aircraft.