AirPixel
TAG-E › Guides › Geotagging
Guide · ArduPilot & PX4

Geotagging drone photos with ArduPilot and PX4

A photo is only useful for mapping or inspection if you know where the camera was, and which way it pointed, when the shutter opened. On ArduPilot and PX4 drones there are three ways to get that into your images. Here’s how they differ.

AirPixel · Updated 28 September 2026

1. Log matching after the flight

This is the method built into both autopilots, and it needs no extra hardware.

  • ArduPilot: each time the autopilot triggers the camera, it writes a CAM message with position and attitude to the dataflash log. After the flight, Mission Planner’s geotagging tool reads the log and the photos and writes the coordinates into the images. When there are no trigger messages, it can match by time instead, using the offset between the camera clock and GPS time. See Geotagging Images with Mission Planner.
  • PX4: each trigger is recorded in the flight log (the CAMERA_TRIGGER message carries a sequence number and timestamp). After the flight, QGroundControl’s GeoTag Images tool matches the log to the photos.

The catch: it is a manual step after every flight, and the match relies on the photo count and the log agreeing. If the camera skips a frame, or fires one that wasn’t commanded, every tag after that point shifts by one photo. The logged time is also the moment the autopilot commanded the shot. The camera takes a little longer to open the shutter, and at survey speeds that delay is a position error.

2. Capture feedback from the camera

Capture feedback fixes the timing. A signal from the camera’s hotshoe (flash sync) goes back to the flight controller, and the log records when the shutter actually fired.

  • ArduPilot: connect the feedback signal to a GPIO pin and set CAM1_FEEDBAK_PIN. The log then records the real capture moment.
  • PX4: set CAM_CAP_FBACK = 1 and assign the Camera_Capture function to an FMU output in QGroundControl’s Actuators screen.

You still match the log to the photos after the flight. And it needs a camera with a hotshoe or flash-sync output. The Sony ILX-LR1, for example, has no Multi Interface Shoe, so this route isn’t open for it.

3. A geotagger that writes EXIF in flight

The third option is a device between the autopilot and the camera that reads position from the autopilot and writes it into each photo while the aircraft is still flying. When you land, the images on the card are already geotagged.

  • DROTAG x is documented on the ArduPilot wiki. It uses the camera’s hotshoe and tags each image with latitude, longitude and altitude above sea level.
  • AirPixel ENTIRE R3 reads GPS data from the autopilot’s MAVLink port and writes it into the EXIF of photos on the camera’s SD card, for Sony, PhaseOne Industrial, Workswell Wiris and other cameras.
  • AirPixel TAG-E is purpose-built for the Sony ILX-LR1. It connects to the camera with one USB-C cable and writes position, altitude and camera attitude (roll, pitch, yaw) into the EXIF and XMP of every photo, with no slowdown in trigger rate. It also controls the camera over MAVLink, so the same cable carries exposure, focus and video control.

The three methods side by side

Log matchingLog + capture feedbackIn-camera EXIF geotagger
Extra hardwareNoneHotshoe cableGeotagger module
Step after each flightYes, match log to photosYes, match log to photosNo, photos come off the card tagged
Timing sourceTrigger commandActual shutter momentDepends on the device; TAG-E syncs its clock to the autopilot
A missed frameShifts later tagsShifts later tagsDoesn’t affect other photos
Camera attitude in the fileOnly if the tool writes itOnly if the tool writes itYes with TAG-E and ENTIRE (roll, pitch, yaw)
Sony ILX-LR1YesNo (no hotshoe)Yes, with TAG-E

What decides geotag accuracy

Whichever method you use, the same few things set how close the tag is to the truth:

  • The position source. A standard GNSS receiver is good to a few metres; RTK brings it to centimetres. A geotag can’t be better than the position it copies.
  • Timing. At 10 m/s, every 10 ms of timing error is 10 cm along the flight line. TAG-E keeps its clock synchronised to the flight controller with MAVLink TIMESYNC, and the GPS delay calculation removes the fixed delay of each airframe.
  • Lever arm. The GNSS antenna sits some distance from the camera. When the aircraft tilts, that offset moves the camera relative to the antenna. TAG-E and ENTIRE correct for it from the antenna-to-camera offsets you enter.
  • Post-processing. For survey work, PPK can correct the positions after the flight. TAG-E can write a PPK text output alongside the photos for that.

Which one to use

If you fly occasionally and don’t mind a processing step, log matching is free and built in. If timing matters and your camera has a hotshoe, add capture feedback. If you fly production survey or inspection work, want photos that are ready the moment you land, or use a camera without a hotshoe such as the ILX-LR1, an in-camera geotagger saves the most time and removes the photo-count problem.

Geotagged ILX-LR1 photos, straight off the card

TAG-E writes position and attitude into every ILX-LR1 photo on ArduPilot and PX4, and controls the camera over the same cable.

Related