DJI GS Pro and a skewed areal map!? So, who’s to blame?

So. Recently I decided to run some tests on DJI Mavic Pro. In fact, I wanted to see how good this joyful bee was for aerial mapping. And I could allow myself to go into details about its calibration. About flight preps. And about how wonderful this thing is to fly – because it really is. But I won’t.

It is something else that is itching me. And if the image below has already caught your eye, then you can probably guess what that itch might be.

Aerial Mission: An image showing a skewed 3D model.
Aerial mapping: After capturing images, I get a skewed 3D model as a result.

Yes. Something does not look quite right here. And if I told you that the image below is supposedly an orthomosaic map, then you’ll know for sure that something has gone awry. And here, I go through the process of trying to figure out what exactly might have happened. I’ll aim to keep it brief. But no strict promises there.

An orthomap derived from a skewed 3D model. It's just wrong!
Something doesn't look quite right here. Orthomosaic map developed from a skewed 3D mesh.

The flight mission

In my hope to test DJI Mavic Pro’s mapping abilities, as well as DJI Ground Station Pro for iOS, I decided to carry out an aerial mapping mission over a test area I was familiar with.

I created a flight project in GS Pro for iOS. A small area of about 1.4 hectares. Initially, I wanted to fly in hover & capture mode. But this resulted in more than 99 way-points, which the app didn’t like. In fact, I think this limitation was on the drone side, not the app.

Not having many other options, I opted for equal distance capture. No big deal for a shutter speed faster than 1/2000.

DJI GS Pro App: Overlap Set to front 80%, and side 80%.
DJI GS Pro application interface. Both front and side overlaps set to 80%.

For information, I have provided below the summary of the set up.

  • DJI Mavic Pro, connected to a DJI GS Pro on iOS/iPad.
  • Camera calibrated indoors before flight.
  • Compass calibrated outdoors before flight.
  • IMU was not specifically calibrated. It was how it came out of the box.
  • Flight check list items were all reading normal.
  • Both front and side overlaps were set to 80%.
  • Visual meteorological conditions good.
  • Wind speed < 5 m/s (11mph).
  • Temperature 39℃ (102℉).
  • Planned height: 50m (164ft) above ground level.

The flight took a relatively short time to complete. Nothing too interesting there to report. And then it was back to the computer to check the results.

As I uploaded images to Pix4D, I was eager to see the results.

Disappointingly, the results were not what I expected. The 3D model looked simply wrong. It was all skewed. Its only useful purpose, I thought, was to entertain my 3 year-old son. And even his attention swiftly drifted elsewhere – although that was probably due to Diesel pulling tricks on Thomas again.

Aerial 3D Model

Aerial Mission: An image showing a skewed 3D model.
Aerial mapping: After capturing images, I get a skewed 3D model as a result.

In my bewilderment, I thought I’d first consult my dear friend Google.

I did a quick search to see if anyone else had a similar problem. I found only one post on RedIt. A question rather, by a user nicknamed Truegrit. And no responses to his pain. Googling seems to have failed me this time. And him.

“Never found anything, so I tested another app. The problem is with the DJI GS Pro app. I’ve tested with Pix4D’s app and everything is perfect. So, there is something going on or some setting I’m missing in GS Pro. If anyone can shed light on this, please do. I would prefer to use GS Pro since it has more settings and a good interface…”

Here is the link to Truegrit’s full post on RedIt.

In the absence of any further hits on Google, I started looking for the culprit of my own.

Is DJI Ground Station Pro app messing something up? Is DJI Mavic Pro not quite up to scratch? Or was I simply doing something completely wrong?!

I also revisited all the parameters I used to define the autonomous mission. All of those looked fine. I looked at the images and started measuring them in Photoshop. I wanted to see if, perhaps, they could shed some light on the issue.

Aerial mapping, overlap assessment. Side overlap.
Side overlap.
Aerial mapping, overlap assessment. Front/forward flight overlap.
Front overlap.

What I noticed was that the actual overlap achieved was less than what I specified in GS Pro app. Whilst I specified 80% overlap, the actual overlap was around 70% mark. But 70% should have still given a good, non-skewed 3D model. So I convinced myself that the overlap wasn’t to blame. Still, the fact that the achieved overlap was less than what was specified in DJI GS Pro left me with more of a worried mind than a trusting heart.

Why was there such a discrepancy anyway?

Captured aerial imagery. Assessment of image overlap.
Measuring ground overlap of adjacent areal photographs.

The math

To double check on things, I thought I’d carry out some calculations. To start off with, I wanted to estimate at which distances should Mavic be triggering the shutter to give the projected overlap of 80%. And then to compare my estimates with the actual flight data.

I based my calculations upon 1/2.3” CMOS Sony Exmor IMX377 sensor. I’ve summarised key parameters in the table. Maybe someone will find them of use, or just wants to double check my numbers.

DJI Mavic Pro Camera Sensor Details
* Distance calculated on the basis of a resolving power of 0.05mm on a 8x10" photo print. Calculated CoC was 0.0012mm.
Camera DescriptionDJI F220
Horizontal Resolution4032 px
Vertical Resolution3024 px
Sensor Type1/2.3" CMOS Sony Exmor IMX377
Sensor Width6.25 mm
Sensor Height4.69 mm
Sensor Diagonal7.81 mm
Sensor Pixel Size1.55 µm
Crop Factor5.54
Angle of View78.8°
Focal Distance4.75 mm
Focal Distance (35mm)26.3 mm
Aperturef/2.2
Hyperfocal DIstance*8562 mm

After a few hours in front of my screen – and a few more – I had the answer. The front/forward distance between shots needed to be about 9.8m. The side distance needed to be around 13.5 m. I thought these two numbers must be the key to solving the mystery (and in a way, they were). But, this is where I initially got even more confused. The actual, measured distance between captured images was around 8.6m and 11.5m. In other words, less than what was needed. This implied that the actual overlap measured from the photos should have been more than 80%, not less!

I’ve double checked my math and my diagrams. All seemed ok. So what was wrong?

To recap:

  • The actual photos were captured at closer distances than required for the specified overlap.
  • The measured / actual overlap was less than what was specified.
  • The ground structures were at a skew angle.

The feature

Now, there’s one feature that Mavic has, which escapes the conscious part of brain. I call it a feature because it has its own dedicated setting located in the Advanced Settings menu. The gimbal settings menu that is.

Enable Upwards Gimbal Tilt Limit to 30 Degrees

I don’t understand why this should have a dedicated setting. I would have expected to be able to control the gimbal tilt with the controller alone. It tilts up as far as it will go. It tilts down as far as it will go.

So, in retrospect, this feature smells a bit like left overs from a development stage dinner party. And it somehow found its way into the final release version of the app.

But this is just my speculation.

Anyway, what I found interesting was the following. The angle of 30 degrees is more or less exactly the amount by which the buildings in the 3D model are skewed by. Just a coincidence? Perhaps. However, if you remember those numbers from the Math section. The forward distances between captures were 8.5m, whilst the calculations told me they should have been 9.8m.

Well, if we project those lengths onto a surface inclined at 30° to the horizontal, we get:

  • 9.8m ⅹ cos(30°) = 8.5m
Elevation view of the skewed 3D model (skew angle approximately 30°).
Elevation view of the skewed 3D model (skew angle approximately 30°).

And finally we have an aerial map

Aerial orthomosaic map. Captured with DJI Mavic Pro, using DJI GS Pro application. Camera pixel size had to be corrected to 1.55 µm.
Aerial orthomosaic map. Captured with DJI Mavic Pro, using DJI GS Pro application. Camera pixel size had to be corrected to 1.55 µm.

Even though I managed to get the data to map correctly, there are unanswered questions lurking about.

  • Why is the actual, measured overlap of the images less than what I specified in DJI GS Pro?
  • What makes the software think the pixel size should be something else than what it is?