Servers by jDrones

HERE+, PPK, and Hotshoe Feedback Processing

I’m trying to get precise geotags for images collected on a fixed-wing and I’m running into issues. It seems like nobody has done this yet - most mapping users are using an Emlid Reach system that’s practically standalone.

How do I extract the TRIG messages (hotshoe shutter feedback) for PPK interpolation?

I am able to make a .obs file using mission planner, but I can’t find a way to extract the TRIG events in a useful way for further processing. I believe a .nav file contains this information.

1 Like

Wiki says: 'ArduPilot logs TRIG messages when it triggers the camera. You can additionally set up ArduPilot to log CAM messages when the camera has actually fired, by monitoring a digital input pin that has been connected to the camera hot shoe. This more accurately logs the exact time that pictures are recorded.'
Using a hot shoe you want CAM messages (not TRIG).

MP --> Ctrl+F --> ‘Geo ref images’ button creates some files for further processing.

I understand the mission planner method of geotagging photos, but that is not PPK (Post-Processed Kinematic). You’re also right that I need to look at the CAM events; not the TRIG events.

I don’t think that the files for further processing are what I need though.

Correct, but you need it to get the CAM data unless you do it yourself.

I never tried Here+, therefore my opinion could be totaly wrong, but I think you should take the ‘CAM-message-file’ and PPK it.
In the moment you have flight data (=rover) and base data and you use rtklib to calculate the PPK solution. Now you have a ‘precise’ flight path but no data for the images, therefore you use MP to create the CAM (image) data.
The CAM data has the time tags and you could either use your own program to calculate the image positions from the PPK flight path OR you use rtklib to calculate the PPK solution for the CAM and base data to get the ‘precise’ image positions.

That’s exactly what I’m trying to do right now, but I need some form of event file that’s compatible with RTKLIB. I can’t find any documentation on it anywhere, and I don’t know how it works.

From what I understand, I cannot “PPK” just the CAM events because their exact capture time and position is somewhere in-between GPS log points at 10Hz. The GPS only record a point every ~170 cm at my cruise speed, and I need much higher accuracy than that can offer. It looks like I’m going to be interpolating GPS positions on my own in excel at this point. I’ll use my PPK corrected path and timestamps to get a good estimate.

@Naterater the typical work flow is to PPK the GPS data, then use the CAM tag to interpolate between processed data to find the best position. A couple of things to keep in mind however:

  1. Due to a implementation bug the timing for CAM events is only checked at 50 Hz, thus there is a 50 Hz granularity on the data.
  2. There is an unaccounted for lag term in GPS processing due to parsing delay. This will be handlable once ArduPilot can track a PPS signal, but until then you will get some timing error here.
  3. The PPK’d data from RTKLib will simply be the GPS position, you will need to then preform the appropriate transforms to where the camera is mounted relative to the GPS antenna. (Alternatively your photogrammetry software may be able to handle this for you, it depends on what you use)

These factors (as well as ease of use/reliability) are why I currently connect my feedback to my GPS unit (using Septentrio), and ArduPilot gets a copy of the signal just to allow monitoring of the camera, and a non PPK’d fallback if needed.

1 Like

@WickedShell thank you very much. That explains a lot of what I was looking for. Do you anticipate ardupilot being faster in the near future?

At the current speeds you mention, it would be very difficult to get a highly accurate map from PPK data through ardupilot. I’ll start looking into Septentrio or Emlid.

Do you anticipate ardupilot being faster in the near future?

Overall I would say so, however it doesn’t seem to be happening terribly quickly.

The handling of the feedback pin is easy to partially improve, and turns into a rats nest to fully improve it. It’s easy to grab the event time correctly, however grabbing the associated GPS position/Attitude data would experience race conditions at the moment. I suspect this hasn’t been chased to much because the people who are most affected are either flying slow enough (copters) where it doesn’t matter, or are unaware it’s happening.

Far more RTK users care about the internal delays then PPK users, but even that use case doesn’t wait then interpolate between GPS data, it just takes the last recieved GPS position. Few people have actively chased PPK with ArduPilot acting as the logger, as there is not an easy PPK solution that you can take an ArduPilot log to, most people choose to operate with RTK (and accept tagging off the last GPS position which could have been a decent distance behind themselves), or use an integrated, more featured PPK solution (Emlid or Septentrio stand out here).

The PPS thing is on my to support list because it would enhance the quality of the data we hand to the EKF. But it’s something that keeps just floating on my list as a low priority item.


@siddharth has done some really cool work with the T2 feature on the Here+, this allows you to use the hot shoe to tell the GPS when you took the photo… the GPS then reports the exact GPS time that the trigger occurred.

The Here2 has these pins exposed, so this should improve this capability dramatically


Where can I find more about that?


Hi, the way we are trying to solve this is by combining our receiver (Argonaut), which is capable of logging events (it has an input pin that you can connect to a hotshoe or Micasense). These events are then referred to the actual GPS time (with nanosecond accuracy). Our PPK service (Jason) computes the PPK solution and interpolates the CAM events.

Have a look if you want and check if this can be of help for your case. If you have any questions do not hesitate to contact us.

I understand that there are numerous companies offering standalone PPK solutions (like Emlid Reach). I don’t care, and that’s not what this thread is about. I was looking for something integrated/working with arudupilot. It sounds like the Here2 may offer ardupilot PPK functionality, so once the code supports it, we’ll move forward.

Hi, is there anyone who is using Pixhawk 2.1 with GPS Here + in RTK mode to geotag photos with cm level accuracy ? To achieve that I think some kind of PPK solution must be used ???

I feel like I have all necessary hardware but there is no info how to do it step by step in software.

This is my idea how it should be done but I can be wrong and I don’t have detailed info :frowning:

  1. I have octocopter with camera which should be connected via hotshoe to pixhawk 2.1
    (same info about connection here)
    So time and position of taken of every picture will be saved in a log of pixhawk.

  2. Copter (rover) is flying with RTK base station (windows notebook with Mission Planner) connected via 433mhz telemetry. ( Internal accuracy between photos is cm level, external (geographic) accuracy with standard settings is about 2m.

  3. Geotag photos via Mission Planner with CAM Message method

  4. PPK solution used to improve external accuracy (2m) ??? What are the solutions ??? Are there any free solutions ?

  5. Agisoft software to create orthomozaics and Digital Surface Models.

Is that good idea ??? Where I can have problems ???

Same more info here but still no a proof that you can get PPK with Here+

@norim PPK requires you to log the raw GPS data while you are flying (and doesn’t require an RTK base at all). GPS_RAW_DATA 1 should log this for you. You then have to extract the data from the dataflash log (MP used to be able to do this, I haven’t tried it in several years). Once you’ve extracted the RINEX data you need to run it through a GPS processing suite (there are a number of commercial suites for this, RTKLib is free and should be capable of doing it, however I’ve personally found it to be a hassle to get anything useful out of it). To do this you will also need log data from a reference station with a known position. You may have a free one close enough that you can use, otherwise you will have to also acquire this set of RINEX files yourself) Once you have a corrected GPS solution you need to tag your photos against this output file (match up timestamps on camera feedback, and interpolate the GPS data for the best position match). You can choose to do vehicle offset corrections at this time as well, or you can leave that to the photogrammetry suite if you are feeding one. I’m not aware of any published scripts or programs that will do this last step for you, you will either have to manually do it (which given the number of photos in mapping sounds terrible), or find someone interested in implementing a solution.


There are softwares out there that do the vehicle offset corrections, etc. That’s how most of the multi-million dollar manned aircraft sensors operate. Everything is done in post with GPS-IMU logging systems.

I think it would be really neat to re-insert the PPK corrected GPS messages back into an EKF to have a highly accurate position-orientation model of the aircraft. Then that could be used for geotagging with orientation as well as position. The more accurate the camera’s position is, the less overlap is needed for accurate 3D reconstruction. That’s part of the reason why large aircraft often fly at only 20% sidelap.


Hope U found a solution to your problem.
i’m working on something similar to your work & i need your help,
so my question is : How did U made the .obs file using mission planner ?

Dataflash Log tab, “Generate KML + GPX” button in Mission Planner


Thank’s for your time
i already knew it before, my question in other way
How did U convert the kml (or gpx) file to a obs one !
i did try that using RTKCONV ver.2.4.3 b29, & it wont work, with the error “file format can not be reconized”

i think because the input should be a RTCM, RCV RAW or RINEX OBS file.

The KML+GPX button should also produce another file that has an extension such as .o .obs or .18o

Use that file, not the gpx or kml.

1 Like
Servers by jDrones