Problem
A DJI Tello EDU has a single forward-facing monocular camera and two downward lidars for height. It has no external positioning of any kind. The problem was getting that platform to navigate relative to a visual fiducial — to find a QR code in the camera stream, work out where it is relative to the drone, close to a commanded distance from it, and then execute the instruction encoded in the code itself.
This is where I fell in love with Dynamics and Control.

Approach
Everything ran in Python against the Tello SDK, with OpenCV doing the vision. The work built up in three steps, each one flight-tested indoors before the next was added.
Timeline
My Contribution
I was the undergraduate researcher on this work. I taught myself Python for it, wrote the drone command layer, the OpenCV detection, and the relative pose estimation, and ran the indoor flight tests.
I left the project in Summer 2024 to focus on a difficult junior year, but the experience I gained here was invaluable and solidified my passion for aerospace engineering. It is important to note that Dr. Ahmad Bani Younes was on sabbatical in my junior year, which contributed to my decision to leave the project early.
Result
The drone flew under Python command, detected and decoded QR fiducials from its monocular stream, estimated its relative position to a code from that code’s apparent geometry, and closed to a set standoff distance before running the instruction it had read. Short demonstrations and flight tests are below.
Basic maneuvering with Python · December 2023
Learning OpenCV and putting it on the drone · February 2024
QR detection, standoff, and command execution · March 2024
What did not work: ORB-SLAM3
In mid-2024 I started on ORB-SLAM3, wanting a map to navigate against rather than a single fiducial — the Tello only has monocular forward vision and two downward lidars, so there was no other route to one. The integration failed on tooling, not on theory: the Tello’s Python package and ORB-SLAM3’s Python bindings required incompatible Python versions, and I left the project before resolving it.
I never got SLAM running on this platform, so I do not claim it as working experience. What I took from the attempt was the build and dependency work, and a clear sense of where the integration cost sits in a vision pipeline.
Code
All sharable code can be found in the GitHub repository linked below.
GITHUB REPOSITORYscipk/Undergraduate-Drone-AutonomyVIEW REPOSITORY →