AutoUAV
Engineering a UAV capable of Autonomous Navigation, Visual Tracking and Precision Landing.
CONTRIBUTORS
Nelson Elijah
SKILLS
Language: C++, Python, Linux
Framework: ROS, OpenCV, Ardupilot (ArduCopter)
Simulation: Gazebo, DroneKit SITL; Ground Control Station: Mission Planner, Q Ground Control (QGC)
Electronics: Soldering, Wiring, Testing, KiCAD
PUBLISHED
31, October 2023
IMPORTANT LINKS
For my final year project, I wanted to build something that would fit the following criteria:
- Interdisciplinary Fusion: Integration of electronics and software engineering disciplines to create a synergy between hardware and software components.
- AI Integration: Implementation of artificial intelligence algorithms for intelligent decision-making capabilities in the project.
- Real-world Applications: Has practical significance and is sustainable.
After thorough research, the concept of AutoUAV, an unmanned aerial vehicle capable of autonomous navigation, visual tracking, and precision landing, emerged as the ideal solution. Its versatile applications in agriculture, the military, the civil sector, warehouse inventory, and more, convinced me to choose it as my final-year project.
Materials Used
Hardware
- 1 Pixhawk 2.4.8 Kit
- 1 Raspberry PI 4
- 1 Flysky i6 Radio Transmitter and FS-X6B Receiver
- 4 Brushless Motors (2 CCW, 2CW, 950 kv), 4 Electronic Speed Controllers (ESCs, 40A rated), 4 Propellers (9450, self-tightening)
- 1 Lipo Battery (4s, >5000Mah)
- 1 Servo Motor
- 1 DJI 450 X frame
- Zip Ties
![Hardware peripherals for AutoUAV](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fwnde8pd5%2Fproduction%2Fc754df44b87879e4a9c7f2663c54fd555f846392-1080x788.png&w=3840&q=75)
Hardware peripherals for AutoUAV
Software
Most of what I learned was from Drone Dojo's course. However, his development environment wasn't compatible with Ubuntu Arm Linux, which is the Ubuntu OS capable of running on Parallels on my M1 Mac. So, I ported the entire system to run and compile on my M1 Mac. Also, I ported the codes from Python 2 to Python 3 and from Ubuntu 18.04 to Ubuntu 20.04.
Here are the software used and the processes required to run them on Ubuntu Linux for Arm Processors:
![Softwares used for AutoUAV (On Ubuntu Arm)](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fwnde8pd5%2Fproduction%2F6783168941493c7ada6a0cce35e974de3a66f6c0-1438x1516.png&w=3840&q=75)
Softwares used for AutoUAV (On Ubuntu Arm)
System Design
![System Communication Design methodology for AutoUAV](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fwnde8pd5%2Fproduction%2F4513bc5ab738dd09026b163ab8ef01f9965ef28c-1092x672.png&w=3840&q=75)
System Communication Design methodology for AutoUAV
A simple explanation is that there's an underlying communication protocol called MAVLINK, which can be used to talk to the flight controller on the UAV.
Other computers or devices can send commands to the drone through this protocol over a network. The Raspberry Pi (companion computer) and the ground station, which can consist of a QGC running on a computer that receives UAV information via telemetry, use this method to interact with the UAV.
However, the most significant portion in designing this project is the use of dronekit which is a Python package for building drone applications. With dronekit, you can deploy high-level algorithms (computer vision and path planning) that can send commands to the drone using the MAVLINK protocol under the hood.
It'll take a considerable amount of detail to explain the technologies and how they interact with each other. I've written a comprehensive report on this project here.
Challenges encountered
Most of the challenges were a result of using an Ubuntu ARM OS and this is how I got by them:
- Compiling dronekit-sitl for Ubuntu Arm Linux: 1, 2
- Installing Mission Planner for Ubuntu Arm Linux
- Install QGC for Ubuntu Arm Linux
Files
View my project report here.
View my build process here.
Coming soon: the Ubuntu image with all necessary applications installed (for Ubuntu Linux Arm).