Autonomous Drone Research
Tello Drone Testing

Tellopy Drone!

Computer vision and autonomous flight experimentation using the DJI Tello drone.


Summary

This project started as an exploration into autonomous drone navigation using the DJI Tello platform for an introductory CS class at Vanderbilt. We were originally only tasked with making the drone fly in simple shapes. For example, it could fly in a square by moving forward and turning right four times in a loop. Once I got that working, I became more curious about the onboard camera, so I took the drone back to my dorm for the weekend and started experimenting with OpenCV to see what else I could get it to do.


The project uses the tellopy library to communicate with the drone while OpenCV processes its live camera feed. I started by getting the drone to recognize faces using OpenCV's Haar cascade classifier, then used the location of the detected face to continuously send movement commands that kept it centered in the camera's view. It was far from perfect, but it was consistent enough in detecting my face that I had the idea to see if I could make it chase people off this facial detection library.


Real-time face detection.


Getting the drone to actually follow someone turned out to be much harder than simply detecting faces and moving forward. Every camera frame had to be processed quickly enough for the drone to react before the target moved, and even small amounts of latency or movement could cause it to overshoot or lose track completely. I spent a lot of time tweaking the vision pipeline and experimenting with different parameters to make tracking as responsive as possible. In the end, it chased after my roommates laundry bag way more than my face for some reason.


Autonomous face tracking and pursuit but it detects the wrong thing as a face.


The drone's camera wasn't particularly high quality, and things like changing lighting, motion blur, Wi-Fi latency, and even slight camera movement all made face detection much less reliable than I expected. I messed around with a lot of different things, such as grayscale conversion, lowering the video resolution, tuning the detection paramters, etc. In the end, the algorithm was still pretty limited, but it did chase my face one or twice, so that's a win.


This was a pretty fun and interesting weekend project. I definitely could've improved some things had I spent more time on it, such as incorporating a PID controller or using a more modern vision library than the one trained in OpenCv. With what was avilable to me and the camera specs, this was a pretty successful project, and you can check out the repository here → Drone Repository