We will likely be offering a PPK system in the future that does just this. It will only work with external hardware triggered cameras like the a7R or A6000 though. There is no way to get the exact shutter time in the DJI cameras.
Sending precise time of shutter event to PPK device
Hi MME team,
Given your immersion in the DJI SDK, I have a question about capturing the precise timing of the camera's shutter event and sending it to a PPK module.
The goal would be to mount an Emlid Reach M+ to my Matrice 100, capture the timing of the precise moment of Zenmuse X3 shutter actuation, and then post process the Reach M+ logs (along with simultaneous logs taken at a fixed point with an Emlid Reach RS+) to get super accurate geotags for the photos.
Any chance there is a programmatic way to sniff the shutter action? Is it something that could be turned on or off using the Map Pilot interface to the SDK?
Thanks for your thoughts!
Please sign in to leave a comment.
Copy that, thanks for the feedback.
Is it correct that those external hardware triggered cameras would require the Ninja OBC, which comes only as part of prebuilt systems from Drones Made Easy?
Is your intuition (or maybe you just know for sure) that the "no way to get exact shutter time" is because of limitations in DJI's SDK (which could change) or because of limitations of the Zenmuse hardware itself?
My understanding is that Map Pilot is one of the better softwares for recording millisecond-level image capture time (https://community.emlid.com/t/integrating-reach-with-dji-drones/6861/10 and https://community.emlid.com/t/linking-dji-drone-images-to-reach-rtk-timing/7120/9). Does that mean that the limitation is in sending the exact shutter time to an external device? Or that I'm misunderstanding the precision involved in Map Pilot's current ability to capture the shutter action?
The DJI SDK has no knowledge of when the shutter actually takes the image with .1 second or so. If you want millisecond timing you have to get a lot closer to the camera hardware than the SDK. Even timing it off the shutter like the PPK units do isn't actually that close. It might be with 20 milliseconds. I am sure it is within a millisecond of the shutter trigger but the time at which the exposure occurs will be later than than. We know A LOT of about this stuff...
The Sony cameras are just triggered by a single I/O line signal from the Ninja. Recording the time and position of the aircraft when it is triggered is trivial but we aren't super sure it is worth it with the current SDK accessible GPS readings. That is why we are looking and integrating another PPK solution.
The Ninja OBC triggering and logging in Map Pilot is probably within .2 seconds or so.
Ah! This makes a lot of sense. I really appreciate you taking the time to walk through the limitations.
I know you all are deeply immersed in and knowledgeable about the DJI hardware and SDK! That's why I'm asking you directly about this stuff after unsatisfying searches through other forums. And also why I keep telling all my science colleagues that your flight planning software is the only suitable one for research purposes :)
For posterity: I will explore integrating the Reach M+ module with the RedEdge camera that I'm flying simultaneously since it appears that (hopefully using your parlance correctly) I *will* be able to get much closer to the hardware to detect the shutter action (https://support.micasense.com/hc/en-us/articles/115004200213-RedEdge-Emlid-Reach-RTK-GPS-Integration-Example-With-Pix4D-)
Thanks again for your thoughts!
Im currently using a M100 with a Klau Geomatics PPK unit fitted the top of the M100.
A PPK event is triggered when a photo is taken with the X3 using Map Pilot through the drone.
I have a M200 with the same Klau unit but its setup directly connected to a modifed X4s camera to get a more "accurate" shutter event.
Sure, you can crack your camera open, look up the part numbers, get the pinouts and use a scope to probe around for a good spot to find the frame sync line. That would work with most of the PPK devices out there.
The problem is it is also super possible to destroy your camera and DJI won't likely warranty it since the seals were broken.
To be honest, this level of synchronization is probably overkill for most types of processing since any point matching software will assume the tags have a certain amount of error in them.
Another more reliable way and non-invasive way of doing it is by measuring the current draw and looking for the readout spikes. This is usually easier to access since it is available on the cables, not the board, but it takes a some smarts to recognize the spikes.
I've also been tryign to do this, on and off, for the last year or so. I found a few posts about people who had found a way to sniff the shutter timing on a phantom, but hoped that the SDK on the M100 would expose more. The conclusion I reached was that it would mean getting into the CAN messages and deciphering.
The lag between the triggger and actual shutter release might be surmountable, if the lag behaves in a characterisable manner. I have a friend who uses the Reach with a Sony (I think), where he was able to approximate the shutter lag well enough to post-process to 10cm RMSE without ground control, flying fast at high altitude. Most of my surveys with the M100 are flown at about 4m/s, so lag becomes less of an issue.
Did you get anywhere with the Red Edge? I've seen plenty of people pairing that up with the Reach. I'm working with a Sequoia myself... less convenient but you gets what you pays for.
I'm wondering whether just replacing the Zenmuse with a third party camera and triggering that from the Reach might be a worthwhile compromise compared to trying to get the DJI shutter timing.