All experience

Advanced UAV Tech

Electronics Engineering Intern

Hardware EngineeringJune 2026 to August 2026

I worked on a 5-person team building a drone that inspects warehouse pallets for damage at DHL sites. A pilot flew it down the aisles filming the racking, and that footage ran through a computer vision pipeline the team trained, which flagged which pallets were damaged and how they were stacked. My focus was the electronics: I sized and built the power system, assembled and wired the full stack onto a 20 inch carbon fiber airframe, and tuned the flight controller and optical flow sensor so it holds position indoors with no GPS. I also designed and printed the landing legs in Onshape when nothing off the shelf fit our motors and frame. Alongside the build I ran the project day to day and was the point of contact with DHL's staff and project managers.

The problem
Warehouses check pallets for damage by eye, one at a time, and a large DHL site holds thousands of them. We wanted to make that faster: fly an aisle once, and let software do the looking. I ran the meetings with DHL's staff and project managers, so what they needed came back to the team through me, and I kept the five of us pointed at the same milestones from there.
  • Damage gets spotted by whoever happens to walk past it
  • Pallets are stacked well above head height, so the top rows are the hardest to check
  • A drone can film a whole aisle, top shelf included, in a single pass
A convex safety mirror reflecting a DHL warehouse aisle lined with racking and pallets
The floor we designed around: racking down one side, loading docks down the other, and a lot of pallets to check by hand.
Prototype
We started with a drone the company already owned, one of its light-show quads built on a DJI F450 frame. It was never going to be the final build. It was there to answer a single question.
  • The question: how does a drone hold still indoors, where there is no GPS to lock onto?
  • The answer: an MTF-01 optical flow module, a downward camera and laser rangefinder that tracks movement against the floor
  • Once it was fitted and tuned the drifting stopped, and everything after this was designed around it
DJI F450Pixhawk 2.4.8MTF-01 Optical Flow
The F450 prototype quadcopter on a desk with a Pixhawk 2.4.8 flight controller mounted on top
The prototype: a light-show F450 stripped back and rebuilt around a Pixhawk 2.4.8, with the optical flow module tucked underneath.
The prototype holding a hover indoors, which is what told us the optical flow approach would work.
Power system
The battery decides how long a flight lasts, and how long a flight lasts decides how much of a warehouse you can cover in one go. So I sized the power system from measured numbers instead of guessing at a battery.
  • One 4S LiPo fed all four motor controllers, the flight controller and the video transmitter
  • I worked the flight time out from measured current draw before we bought anything
  • Roughly 40 soldered connections across the power and signal wiring, every cable cut to length and heat-shrunk
  • We trialled a 4-in-1 ESC stack part way through and ended up back on four separate ESCs
4S LiPoESCsXT60Soldering
Usable capacity2.2 Ah × 0.8 depth of discharge1.76 Ah
All-up weightframe, motors, props, ESCs, Pixhawk, LiPo, FPV gear, wiring≈1.34 kg
Hover current150 W/kg ÷ 14.8 V ≈ 10 A/kg, × 1.34 kg≈13.4 A
Endurance1.76 Ah ÷ 13.4 A × 60≈7.9 min

A projection, not a measurement. The airframe was never put on a scale and it has never been flown down to empty. The 0.8 is there because a LiPo below roughly 20% charge is off limits.

Top-down view of the drone showing the power distribution board, XT60 connector and four ESCs
Top-down on the distribution board: four ESCs zip-tied along the arms, XT60 into the PDB, optical flow module at the nose.
The drone mid-rebuild on a workbench with helping hands, custom heat-shrunk cables and a 4-in-1 ESC
Mid-rebuild on the bench, with the 4-in-1 ESC we trialled and every cable cut to length and heat-shrunk.
Final airframe
The prototype could not carry everything we needed, so we moved onto a bigger 20 inch carbon fiber frame. I assembled and wired this one up myself, and designed the parts that did not exist off the shelf.
  • Pixhawk V6X flight controller, with the MTF-01 optical flow module mounted underneath
  • No commercial landing leg fitted our combination of motors and frame, so I modelled our own in Onshape around the real parts and printed them
  • They were hollowed out in a hex pattern to save weight without losing stiffness, and they are the legs holding the drone up in the photos below
  • Then tuned until it held position steadily indoors
Carbon Fiber FramePixhawk V6XOnshape3D Printing
Onshape CAD model of the custom landing leg, showing the motor mounting flange and hex lightening cutouts
The landing leg in Onshape, modelled around imported geometry of the motors and frame we actually had.
The finished carbon fiber quadcopter on a desk with a Pixhawk V6X and GPS mounted
The finished airframe, standing on the printed legs.
The finished drone hovering above a rooftop against an overcast sky
Hover testing off the roof, on the same tune it flew indoors.
Flying it
A pilot flew the drone down the aisle and filmed the racking. That sounds like the easy part, but it was the part everything downstream depended on.
  • If the drone drifts or wobbles, the video blurs
  • A blurred frame is a pallet the software cannot read
PID Tuning
The final build in flight.
Getting the footage off the drone
The footage came off the drone live. It carried a tiny FPV camera and video transmitter, and the picture arrived on a laptop while the drone was still in the air.
  • An all-in-one camera and video transmitter weighing 4.7 g, about a thumbnail at 18.7 × 13 mm
  • It transmitted to a receiver plugged into a laptop, which captured the feed in OBS
  • That recording is what got fed through the software afterwards
FPVOBSVideo Capture
The drone in the air, with its camera feed coming through live in OBS on the laptop.
Teaching it to recognise a damaged pallet
Before software can spot damage, someone has to show it thousands of examples. We labelled every training photo by hand in Roboflow, drawing a shape around each pallet and tagging it twice.
  • Tag one: is this pallet damaged, or undamaged?
  • Tag two: is it stacked flat, or in a pyramid?
  • The two shapes sit on top of each other, which would make the model draw two boxes around every pallet
  • So we built its training set from the damage shapes only, and saved the stacking tags for a later step
Roboflow
Detector output on a warehouse photo, with boxes labelled damaged and undamaged
Output on a test photo: one box per pallet, each with its verdict and how confident the model is.
Training the models
Three models, trained in a notebook and chained together. The first one finds the pallets; the other two look at each pallet it found.
  • Model 1 draws a box around every pallet in the frame
  • Model 2 decides whether that pallet is damaged
  • Model 3 decides whether it is stacked flat or in a pyramid
  • Damaged pallets are rare in the training data, so we tuned model 2 to catch as many as it could and tolerate a few false alarms. Missing a damaged pallet costs more than double-checking a good one.
YOLO11UltralyticsJupyter
Finding palletsdetector score across the test set0.88
Flat or pyramidtest set accuracy0.86
Damaged or notaccuracy / damaged caught0.82 / 0.80
Jupyter notebook cell training the YOLO11 detector, with per-epoch loss and mAP output
Training the pallet detector in the notebook, with its score climbing pass over pass.
Confusion matrix for the orientation classifier, showing 55 of 64 test crops correct
Marking the stacking model against photos it had never seen: 55 of 64 correct, 85.9%.
DroneScan, the app clients actually use
None of it is worth much if a warehouse manager cannot run it, so the team wrapped the whole pipeline in an app called DroneScan. You hand it the footage from a flight and it hands back a report.
  • Drop in photos or a whole video, and it pulls the frames out for you
  • Every pallet comes back outlined, marked damaged or clear, with a confidence score
  • Filter a long list down to just the damaged ones
ReactFastAPIPythonDocker
The DroneScan web app showing an upload queue with annotated inspection results
The inspection queue: batch upload, a verdict per file, and annotated results you can open full screen.