開發紀錄:雲台指到哪、地上那個點在哪——座標轉換鏈與地理定位的誤差預算

這是 LocalPapa Notes 開發紀錄系列的第二十六篇,也是雲台系列的第九篇。

前面八篇有一個共同的邊界:全部停在「把視線穩住」。第二十一篇第二十四篇算馬達要多大,第二十五篇講三層迴路怎麼把它穩住。但真正的任務通常不是「穩住」,而是「那個東西在哪裡」——LOS 穩了之後,你要把它換算成一組經緯度交出去。

這一步跨出雲台本體,牽涉到一整條座標轉換鏈。它在系列裡一直是個缺口,這篇補上。

文獻基礎

無人機的目標地理定位在文獻上是個成熟題目,這篇挑的四篇各補一塊:

Wang, Liu, & Zhou (2017). Real-Time Multi-Target Localization from Unmanned Aerial Vehicles. Sensors, 17(1), 33.

以無人機光電穩定成像系統為基礎,用齊次座標轉換把多目標算成大地座標。它的貢獻在後面兩招:即時變焦鏡頭畸變修正,以及基於航位推算的遞迴最小平方濾波。前者讓單張影像的圓機率誤差(CEP)降 7%,後者比單張影像再降 25%。這篇對我們的用處是它把整條鏈寫成一連串齊次變換——下面第一節那張圖就是這個結構。

Gautam, D., Watson, C., Lucieer, A., & Malenovský, Z. (2018). Error Budget for Geolocation of Spectroradiometer Point Observations from an Unmanned Aircraft System. Sensors, 18(10), 3465.

這篇是本文的骨架。它把 GNSS 與 IMU 的誤差逐項傳播過整個空中定位模型,並逐一分析視場角、積分時間、飛行速度、離地高度與 IMU 等級的影響。結論裡最重要的一句是:飛行高度與姿態量測精度的影響最大。它的實驗條件(10 m 離地、3 m/s)跟一般吊艙差很遠,所以下面第三節我用自己的參數重算,但方法直接沿用它。

Hosseinpoor & Samadzadegan (2016). Precise Target Geolocation and Tracking Based on UAV Video Imagery. ISPRS Archives, XLI-B6, 243–249.

用 RTK GPS 加熱像視訊,走傳統攝影測量的光束法平差,再用擴展卡爾曼濾波平滑目標位置與速度。它明確指出一般商用無人機的 C/A code GPS 加低階 IMU 只有 5~10 公尺,並量到 RTK 讓定位精度改善十倍以上。這是「定位誤差主要不在雲台」最直接的一個佐證。

Improving Target Geolocation Accuracy with Multi-View Aerial Images in Long-Range Oblique Photography (2024). Drones, 8(5), 177.

專門處理遠距斜照:拍攝距離一拉長,量測誤差的影響就特別明顯。它的作法是用不同位置拍的多張影像做相機優化,藉此擺脫對 GNSS/INS 精度的重度依賴。這篇跟本文第二、三節的主題完全重疊——遠距斜照就是掠射角很低的情況。

Vision-Based Geolocation of Moving Ground Targets Using Kalman Filtering with a Gimbal Camera on Board a UAV (2025). Aerospace, 12(12), 1065.

雲台相機的完整定位管線,含追蹤模組與 UKF。它跟本文的關聯是把雲台幾何明確放進定位模型裡,而不是當成一個理想的方向感測器。

這幾篇解的是「怎麼算得更準」。它們預設你已經知道那條鏈長什麼樣子。 下面第一節就是把那條鏈畫出來,因為缺乏經驗的時候,最容易漏掉的不是公式,是中間某一跳。

本文的引用範圍

以上論文的方法與貢獻描述,來自摘要與公開的論文說明頁;受限於取用權限,我沒有逐篇核對全文的實驗數據,因此沒有引用任何未經查證的實驗數值。作者名只列到我查得到的程度,查不到完整作者列表的就只寫篇名。第三節的所有數字都是我用自己設定的參數算的,不是從論文抄的。

一、轉換鏈:從一個像素走到一組經緯度

座標轉換鏈:從一個像素走到一組經緯度 座標轉換鏈:從一個像素走到一組經緯度 座標系 這一跳注入什麼誤差 量級 影像像素 (u, v) 內參/畸變校正殘差 ≈0.1 mrad 旋轉 相機/視線座標系 光軸對準(boresight) 主要誤差源 旋轉 俯仰框架 俯仰編碼器零位與偏心 ≈0.2 mrad 旋轉 方位框架 方位編碼器零位與正交度 ≈0.2 mrad 旋轉 雲台基座/機體 安裝面對準+桿臂 lever arm 可校正 旋轉 地理系 NED 姿態量測 roll/pitch/yaw ≈0.5 mrad 平移 ECEF / WGS84 GNSS 定位 ≈1.5 m 射線求交 地面交點(目標座標) 地形高程 DEM ≈5 m 純旋轉:誤差以 mrad 計 含平移:以 m 計 前六跳只轉方向、不改位置——誤差是角度,會被斜距放大;後兩跳才引入長度誤差。這條分界決定了下面兩張圖要分開看。
圖 1:八個座標系與七次轉換。左側顏色分成兩段——前六跳只轉方向、不改位置,誤差是角度;後兩跳才引入長度誤差。右邊列出每一跳注入的誤差來源與量級。

從畫面上你點的那個像素開始:

  1. 影像像素 → 相機座標系 —— 用內參矩陣把 (u, v) 變成一條視線方向。誤差來自內參與畸變修正的殘差,約 0.1 mrad。
  2. 相機 → 俯仰框架 —— 這一跳就是 boresight:相機的光軸跟俯仰框架的機械軸永遠不會完全重合。
  3. 俯仰框架 → 方位框架 —— 用俯仰編碼器讀值旋轉。誤差是編碼器零位與偏心。
  4. 方位框架 → 雲台基座 —— 用方位編碼器讀值旋轉。誤差是零位與兩軸的正交度。
  5. 雲台基座 → 機體 —— 安裝面的對準誤差,加上桿臂(lever arm):雲台旋轉中心跟 GNSS 天線相位中心之間的位移。
  6. 機體 → 地理系 NED —— 用姿態估測(roll/pitch/yaw)旋轉。這一跳的誤差通常是整條鏈裡最大的角度項。
  7. NED → ECEF → WGS84 —— 加上載體的位置。這是第一次引入長度誤差
  8. 視線與地形求交 —— 把那條射線打到 DEM 上,交點就是目標座標。這裡引入的是高程誤差。

看這條鏈要抓住一件事:前六跳全部是純旋轉。 它們不改變射線的起點,只改變方向,所以它們的誤差全部是角度,而角度誤差會被斜距放大。第七跳才第一次引入位置誤差,第八跳引入高程誤差——這兩個是「長度」,不會被斜距放大。

這條分界就是接下來兩節的全部內容。

二、兩種誤差、兩種幾何

兩種誤差、兩種幾何:為什麼掠射角一低,定位就垮 兩種誤差、兩種幾何:為什麼掠射角一低,定位就垮 (甲)角度誤差 δθ h = 300 m 掠射角 γ δθ Δd ∂d/∂γ = − h / sin²γ ⇒ Δd = h · δθ / sin²γ γ = 30°、δθ = 0.714 mrad → 0.86 m d = h · cot γ (乙)高程誤差 δh h = 300 m δh 真實地形 DEM 假設面 Δd Δd = δh / tan γ γ = 30°、δh = 5 m → 8.66 m d = h · cot γ 圖上的 δθ 與 δh 都刻意放大以便觀看;右側數字是真值 兩者都是 1/sinγ 家族——這是這個系列第三次遇到割線放大:第 24 篇的 yaw gain 1/cos(el)、第 25 篇的追蹤環 cos(el),現在是 1/sin²γ
圖 2:兩種誤差各自的幾何。左格是角度誤差,交點沿著地面滑動;右格是高程誤差,射線提早或延後打到地面。兩格用同一個掠射角,所以兩段位移可以直接目視比較。

設載具離地 h,視線與地面的夾角是掠射角 γγ = 90° 是正下方,γ 很小是遠距斜看)。

地面交點的水平距離是:

`` d = h · cot γ ``

角度誤差。γ 微分:

`` ∂d/∂γ = − h / sin²γ ⇒ Δd = h · δθ / sin²γ ``

注意是 sin²,不是 sin。這裡有兩層放大:斜距本身是 h/sin γ,而交點沿地面滑動又再除一次 sin γ(因為射線越平,同樣的垂直位移對應越長的水平位移)。

高程誤差。 如果 DEM 假設的地面比真實地形低了 δh,射線會晚一點才打到地面:

`` Δd = δh / tan γ ``

這是這個系列第三次遇到割線家族。 第二十四篇的 yaw gain 是 1/cos(el)第二十五篇的追蹤環是 cos(el),這裡是 1/sin²γ。三次都是同一件事:幾何把某個方向的解析度壓扁了,代價以三角函數的形式出現。

三、誤差預算:把數字放進去

設定一組吊艙上常見的參數:

  • 離地高度 h = 300 m
  • 姿態量測 1σ = 0.5 mrad(機體 → NED)
  • 編碼器+對準 1σ = 0.5 mrad(相機 → 基座那幾跳的合成)
  • 相機內參與視線解算 1σ = 0.1 mrad
  • 合成角度誤差 δθ = √(0.5² + 0.5² + 0.1²) = 0.714 mrad
  • 地形高程 1σ δh = 5 m(一般公開 DEM 的量級)
  • 載體水平定位 1σ = 1.5 m
誤差預算:h = 300 m 時,沿距誤差怎麼隨掠射角變化 誤差預算:h = 300 m 時,沿距誤差怎麼隨掠射角變化 0.1 1 10 100 5 10 15 30 45 60 90 掠射角 γ(度,90° = 正下方) 沿距誤差(m,對數) 合成(RSS) 地形誤差 δh/tan γ 角度誤差 h·δθ/sin²γ GNSS 1.5 m(定值) 87.5° 以下,地形誤差就已經大於角度誤差 地形與合成兩條幾乎重疊——這就是本圖的重點。 90°→5°:角度項放大 132 倍(= 1/sin²5°) 合成從 1.5 m 變成 63.7 m(42 倍) 幾乎整個實用範圍內,主導項都是地形而不是指向。把雲台的指向精度再翻一倍,斜看時的定位誤差幾乎不動——該投資的是 DEM 或雷射測距。
圖 3:三個誤差項與合成值隨掠射角的變化(縱軸對數)。地形項與合成項在圖上幾乎重疊——那就是本圖的重點。

逐個掠射角算出來(單位公尺):

  • 90°(正下方) —— 斜距 300、角度項 0.21、地形項 0.00、合成 1.52
  • 60° —— 斜距 346、角度項 0.29、地形項 2.89、合成 3.27
  • 45° —— 斜距 424、角度項 0.43、地形項 5.00、合成 5.24
  • 30° —— 斜距 600、角度項 0.86、地形項 8.66、合成 8.83
  • 15° —— 斜距 1159、角度項 3.20、地形項 18.66、合成 18.99
  • 10° —— 斜距 1728、角度項 7.11、地形項 28.36、合成 29.27
  • —— 斜距 3442、角度項 28.20、地形項 57.15、合成 63.75

三個讀法:

第一,角度項從 90° 到 5° 放大 132 倍。 這正好是 1/sin²(5°) = 131.6。公式不是在嚇人,它就是這樣長的。

第二,地形項在幾乎所有掠射角都比角度項大。 兩者相等的掠射角解出來是 sin 2γ = 2h·δθ/δh,也就是 87.5°(另一個根 2.5° 在實用範圍外)。換句話說,只有在幾乎正下方的那一小塊,指向精度才是主導項;一旦斜看,主導的就是你對地形的無知。

第三,合成誤差從 1.5 m 變成 63.8 m,差 42 倍。 而這中間你的雲台什麼都沒變差。

四、所以錢該花在哪

這張表的實務結論相當直接,而且跟直覺相反:

把雲台的指向精度再翻一倍,斜看時幾乎沒有幫助。 在 10° 掠射角,角度項 7.11 m、地形項 28.36 m、合成 29.27 m。就算把角度誤差砍半到 3.56 m,合成只從 29.27 降到 28.62——改善 2.2%。為了那 2% 去換更貴的 IMU 或更高階的編碼器,是把錢丟進水裡。

真正有效的三件事:

一、雷射測距。 有測距值就完全繞開地形誤差——你不用猜射線在哪裡打到地面,你直接量到斜距。這是最有效的一招,也是為什麼稍有規模的吊艙都掛測距儀。

二、更好的 DEM。 把 5 m 換成 1 m,10° 時的地形項從 28.36 降到 5.67,合成從 29.27 降到 9.21。改善 68.5%——跟上面那 2.2% 差了一個數量級。

三、boresight 校正。 這是唯一「不用花錢買硬體」的那一項。相機光軸與機械軸的安裝誤差如果沒校正,它會系統性地偏,而且偏在整條鏈的最前面、被整個斜距放大。前面文獻裡不只一篇強調高精度導航模組與光電裝置之間的安裝誤差如果不校正,會嚴重影響定位結果。做法是拿已知座標的地面控制點,在不同方位角與俯仰角各拍幾組,把殘差解成一組固定的旋轉偏置。這件事只要做一次,之後每一次定位都受益。

五、回頭看前面幾篇

這篇跟系列的關係值得說清楚,因為它改變了前幾篇的一些權衡:

指向精度的規格該從哪裡來。 前幾篇算 θ_max = 0.1 mrad 是從影像品質來的——LOS 抖動會糊掉畫面。但地理定位對指向精度的要求,從上面的表看是低得多。這是兩個不同的規格,來自兩個不同的需求,不要互相綁架。穩定精度要 0.1 mrad 是為了畫面;定位精度在斜看時連 1 mrad 都嫌太嚴格,因為根本輪不到它主導。

編碼器該選多好。 同理。編碼器精度進到 0.2 mrad 以下之後,對定位的邊際效益極低。它真正的價值在別的地方——第二十五篇的位置環回授品質、以及 boresight 校正時的可重複性。

天底禁區又出現了。 第二十四篇算過雙軸雲台在接近正下方時追不動。有趣的是,正下方恰好是定位精度最好的地方(合成只有 1.5 m)。這兩件事拉扯的方向相反:機構叫你別靠近天底,定位叫你盡量靠近。這個矛盾沒有純機構的解——它是雙軸架構的固有代價,要嘛接受,要嘛上三軸。

本文的分析界線

  • 只算了平坦地形與單點交會。 真實地形有坡度,坡度會讓 δh/tan γ 這一項再放大(射線打在朝向你的坡面上和背向你的坡面上,誤差不一樣)。這篇沒處理。
  • 誤差當成互相獨立的 1σ 做 RSS。 實際上姿態誤差與桿臂效應是相關的,而 boresight 是系統性偏差而不是隨機誤差——RSS 會低估系統性項。這篇把 boresight 放在「該校正掉」而不是「該進預算」。
  • 所有量級都是我設定的典型值,不是量測結果。 換一組硬體,數字全部會動;但三個結論(1/sin² 放大、地形主導、boresight 要校正)的方向不會變。
  • 沒有處理動態。 目標在動、載具在動、影像有延遲——這些會再貢獻誤差,屬於卡爾曼濾波那一層的題目,見上面 Hosseinpoor 2016 與 2025 年那篇 Aerospace

想一起把這件事做完整

要把這套算在你的吊艙上,需要這些:

  • 你的典型工作高度與掠射角範圍(這兩個決定一切
  • 姿態源是什麼等級(MEMS AHRS?戰術級 IMU?有沒有 RTK 輔助?)
  • 編碼器的規格與雙軸正交度
  • 有沒有雷射測距,有的話量程與精度
  • 手上的 DEM 是哪一套、標稱高程精度多少
  • boresight 有沒有校正過,用什麼方法

沒有的就說沒有,我不會幫你猜一個值填進去。

參考文獻

  • Wang, Liu, & Zhou (2017). Real-Time Multi-Target Localization from Unmanned Aerial Vehicles. Sensors, 17(1), 33. DOI: 10.3390/s17010033
  • Gautam, D., Watson, C., Lucieer, A., & Malenovský, Z. (2018). Error Budget for Geolocation of Spectroradiometer Point Observations from an Unmanned Aircraft System. Sensors, 18(10), 3465. DOI: 10.3390/s18103465
  • Hosseinpoor & Samadzadegan (2016). Precise Target Geolocation and Tracking Based on UAV Video Imagery. ISPRS Archives, XLI-B6, 243–249. Link
  • Improving Target Geolocation Accuracy with Multi-View Aerial Images in Long-Range Oblique Photography (2024). Drones, 8(5), 177. DOI: 10.3390/drones8050177
  • Vision-Based Geolocation of Moving Ground Targets Using Kalman Filtering with a Gimbal Camera on Board a UAV (2025). Aerospace, 12(12), 1065. Link
  • Ekstrand, B. (2001). Equations of Motion for a Two-Axes Gimbal System. IEEE Transactions on Aerospace and Electronic Systems, 37(3), 1083–1091. Link
  • Hilkert, J. M. (2008). Inertially Stabilized Platform Technology: Concepts and Principles. IEEE Control Systems Magazine, 28(1), 26–46.

上一篇:三層串級迴路與運動學對照。要算馬達?雲台馬達選型計算機。想追這個系列?把 LocalPapa Notes 加進書籤。

Dev Log: Where the Gimbal Points and Where That Actually Is — The Transform Chain and a Geolocation Error Budget

This is the twenty-sixth post in the LocalPapa Notes dev-log series, and the ninth on gimbals.

The previous eight share a boundary: all of them stop at holding the line of sight steady. Posts 21 through 24 size the motor; post 25 covers the three loops that hold it. But the actual mission is usually not "hold steady" — it is "where is that thing". Once the LOS is stable, you have to turn it into a latitude and longitude and hand that over.

That step leaves the gimbal proper and runs through a whole chain of coordinate frames. It has been a gap in this series; this post fills it.

The literature

Target geolocation from UAVs is a mature topic. These four each contribute a different piece:

Wang, Liu, & Zhou (2017). Real-Time Multi-Target Localization from Unmanned Aerial Vehicles. Sensors, 17(1), 33.

Built on a UAV electro-optical stabilized imaging system, computing geodetic coordinates for multiple targets by homogeneous coordinate transformation. Its contributions are the two refinements: real-time zoom lens distortion correction, and recursive least squares filtering based on dead reckoning. The first cuts single-image circular error probable (CEP) by 7%, the second by a further 25% over single-image localization. What matters here is that it writes the whole chain as a sequence of homogeneous transforms — that structure is exactly figure 1 below.

Gautam, D., Watson, C., Lucieer, A., & Malenovský, Z. (2018). Error Budget for Geolocation of Spectroradiometer Point Observations from an Unmanned Aircraft System. Sensors, 18(10), 3465.

This is the skeleton of this post. It propagates GNSS and IMU errors term by term through an aerial georeferencing model, analyzing field of view, integration time, flight speed, above-ground height and IMU grade. The key sentence in its conclusions: flying height and orientation measurement accuracy have the largest influence. Its experimental conditions (10 m AGL, 3 m/s) are far from a typical pod, so section three below recomputes with my own parameters — but the method comes straight from this paper.

Hosseinpoor & Samadzadegan (2016). Precise Target Geolocation and Tracking Based on UAV Video Imagery. ISPRS Archives, XLI-B6, 243–249.

RTK GPS plus thermal video through classical photogrammetric bundle adjustment, then an extended Kalman filter to smooth target position and velocity. It states plainly that the C/A-code GPS and low-cost IMU on typical commercial UAVs give only 5–10 m, and measures RTK improving geolocation accuracy by more than tenfold. That is the most direct evidence available for "the geolocation error is mostly not in the gimbal."

Improving Target Geolocation Accuracy with Multi-View Aerial Images in Long-Range Oblique Photography (2024). Drones, 8(5), 177.

Specifically about long-range oblique photography: as shooting distance grows, measurement errors become far more evident. Its approach uses multiple images taken from different positions to optimize the camera, escaping heavy dependence on GNSS/INS accuracy. This overlaps completely with sections two and three below — long-range oblique is the low-grazing-angle case.

Vision-Based Geolocation of Moving Ground Targets Using Kalman Filtering with a Gimbal Camera on Board a UAV (2025). Aerospace, 12(12), 1065.

A full gimbal-camera geolocation pipeline with a tracking module and a UKF. Its relevance here is that it puts gimbal geometry explicitly inside the geolocation model, rather than treating the gimbal as an ideal direction sensor.

These papers answer "how to compute it more accurately." They assume you already know what the chain looks like. Section one draws it out, because when you lack hands-on experience the thing you miss is never the formula — it is one of the hops in the middle.

Scope of citation in this post

The method and contribution descriptions above come from abstracts and public paper pages. Access limits meant I could not verify every full text, so no unverified experimental values are quoted. Author lists are given only as far as I could verify them; where I could not, the paper is cited by title alone. Every number in section three is computed from parameters I set myself; none of them are copied from a paper.

1. The chain: from one pixel to a latitude

The transform chain: from one pixel to a latitude and longitude The transform chain: from one pixel to a latitude and longitude Frame Error injected at this hop Magnitude Image pixel (u, v) Intrinsics / distortion residual ≈0.1 mrad rotate Camera / LOS frame Boresight alignment dominant rotate Elevation frame Elevation encoder zero / eccentricity ≈0.2 mrad rotate Azimuth frame Azimuth encoder zero / orthogonality ≈0.2 mrad rotate Gimbal base / body Mounting alignment + lever arm calibratable rotate Local NED frame Attitude estimate roll / pitch / yaw ≈0.5 mrad translate ECEF / WGS84 GNSS position ≈1.5 m ray cast Ground intercept (target) Terrain elevation (DEM) ≈5 m Pure rotation, errors in mrad Translation, in m The first six hops only rotate — they never move the origin, so their errors are angular and get multiplied by slantrange. Only the last two add length errors. That boundary is why the next two figures have to be read separately.
Figure 1: Eight frames and seven transforms. The colored brackets split the chain in two — the first six hops only rotate, never move the origin, so their errors are angular; only the last two add length errors. The right-hand columns list what each hop injects and how big it is.

Starting from the pixel you clicked on:

  1. Image pixel → camera frame — the intrinsic matrix turns (u, v) into a line-of-sight direction. Error comes from intrinsics and distortion-correction residual, about 0.1 mrad.
  2. Camera → elevation frame — this hop is the boresight: the camera's optical axis never coincides exactly with the elevation frame's mechanical axis.
  3. Elevation → azimuth frame — rotate by the elevation encoder reading. Error is encoder zero and eccentricity.
  4. Azimuth frame → gimbal base — rotate by the azimuth encoder reading. Error is zero offset and the orthogonality of the two axes.
  5. Gimbal base → body — mounting-face alignment, plus the lever arm: the offset between the gimbal's center of rotation and the GNSS antenna phase center.
  6. Body → local NED — rotate by the attitude estimate (roll/pitch/yaw). This hop is usually the largest angular term in the whole chain.
  7. NED → ECEF → WGS84 — add the vehicle's position. This is the first hop that introduces a length error.
  8. Intersect the ray with terrain — cast the ray onto the DEM; the intersection is the target. This is where elevation error enters.

One thing to hold onto: the first six hops are pure rotations. They never move the ray's origin, only its direction, so their errors are all angular — and angular errors get multiplied by slant range. The seventh hop introduces position error for the first time, the eighth introduces elevation error. Those two are lengths; slant range does not amplify them.

That boundary is the whole content of the next two sections.

2. Two error types, two geometries

Two error types, two geometries: why a low grazing angle wrecks geolocation Two error types, two geometries: why a low grazing angle wrecks geolocation (a) Angular error δθ h = 300 m grazing angle γ δθ Δd ∂d/∂γ = − h / sin²γ ⇒ Δd = h · δθ / sin²γ γ = 30°, δθ = 0.714 mrad → 0.86 m d = h · cot γ (b) Elevation error δh h = 300 m δh actual terrain assumed DEM surface Δd Δd = δh / tan γ γ = 30°, δh = 5 m → 8.66 m d = h · cot γ δθ and δh are exaggerated in the drawing; the numbers at right are the real values Both belong to the 1/sin family — the third time this series hits secant amplification: the yaw gain 1/cos(el) in post 24, the track loop cos(el) in post 25, and now 1/sin²γ.
Figure 2: The geometry of each error type. Panel (a) is angular error, sliding the intercept along the ground; panel (b) is elevation error, where the ray hits early or late. Both panels use the same grazing angle, so the two displacements can be compared by eye.

Let the vehicle be at height h, with the line of sight meeting the ground at grazing angle γ (γ = 90° is straight down; small γ is a distant oblique look).

The horizontal distance to the ground intercept is:

`` d = h · cot γ ``

Angular error. Differentiate with respect to γ:

`` ∂d/∂γ = − h / sin²γ ⇒ Δd = h · δθ / sin²γ ``

Note that is sin², not sin. There are two amplifications stacked: slant range itself is h/sin γ, and the intercept sliding along the ground divides by sin γ a second time (the flatter the ray, the more horizontal distance a given vertical displacement buys).

Elevation error. If the assumed DEM surface sits δh below the real terrain, the ray hits later:

`` Δd = δh / tan γ ``

This is the third time the series has hit the secant family. Post 24's yaw gain is 1/cos(el), post 25's track loop is cos(el), and here it is 1/sin²γ. All three are the same thing: geometry has squashed the resolution along one direction, and the price shows up as a trig function.

3. The error budget, with numbers in it

A set of parameters typical of a pod:

  • Height above ground h = 300 m
  • Attitude measurement 1σ = 0.5 mrad (body → NED)
  • Encoders plus alignment 1σ = 0.5 mrad (the camera → base hops combined)
  • Camera intrinsics and LOS solution 1σ = 0.1 mrad
  • Combined angular error δθ = √(0.5² + 0.5² + 0.1²) = 0.714 mrad
  • Terrain elevation 1σ δh = 5 m (the order of magnitude of a public DEM)
  • Vehicle horizontal position 1σ = 1.5 m
Error budget: along-range error versus grazing angle at h = 300 m Error budget: along-range error versus grazing angle at h = 300 m 0.1 1 10 100 5 10 15 30 45 60 90 Grazing angle γ (degrees, 90° = straight down) Along-range error (m, log) Combined (RSS) Terrain δh/tan γ Angular h·δθ/sin²γ GNSS 1.5 m (constant) Below 87.5°, terrain error already exceeds the angular error Terrain and combined sit almost on top of each other — that is the point of this figure. 90°→5°: the angular term grows 132× (= 1/sin²5°) Combined goes from 1.5 m to 63.7 m (42×) Across almost the whole usable range the dominant term is terrain, not pointing. Doubling the gimbal's pointing accuracybarely moves the oblique-view geolocation error — the money belongs in a better DEM or a laser rangefinder.
Figure 3: The three error terms and their combination against grazing angle (log vertical axis). The terrain curve and the combined curve sit almost on top of each other — that is the point of the figure.

Per grazing angle, in metres:

  • 90° (straight down) — slant 300, angular 0.21, terrain 0.00, combined 1.52
  • 60° — slant 346, angular 0.29, terrain 2.89, combined 3.27
  • 45° — slant 424, angular 0.43, terrain 5.00, combined 5.24
  • 30° — slant 600, angular 0.86, terrain 8.66, combined 8.83
  • 15° — slant 1159, angular 3.20, terrain 18.66, combined 18.99
  • 10° — slant 1728, angular 7.11, terrain 28.36, combined 29.27
  • — slant 3442, angular 28.20, terrain 57.15, combined 63.75

Three readings:

First, the angular term grows 132× from 90° to 5°. That is exactly 1/sin²(5°) = 131.6. The formula is not being dramatic; that is simply its shape.

Second, the terrain term beats the angular term at almost every grazing angle. Setting them equal gives sin 2γ = 2h·δθ/δh, i.e. 87.5° (the other root, 2.5°, is outside the usable range). In other words, pointing accuracy dominates only in the narrow band almost directly below you; the moment you look obliquely, what dominates is your ignorance of the terrain.

Third, the combined error goes from 1.5 m to 63.8 m — a factor of 42. And nothing about your gimbal got worse along the way.

4. So where should the money go

The practical conclusion is blunt, and it runs against intuition:

Doubling the gimbal's pointing accuracy barely helps on an oblique look. At 10° grazing, angular is 7.11 m, terrain 28.36 m, combined 29.27 m. Halving the angular error to 3.56 m moves the combined figure from 29.27 to 28.62 — a 2.2% improvement. Buying a more expensive IMU or a higher-grade encoder for that 2% is throwing money away.

Three things that actually work:

One: a laser rangefinder. A range measurement bypasses terrain error entirely — you no longer have to guess where the ray meets the ground, you measure the slant range directly. It is the single most effective move, and it is why any pod of consequence carries one.

Two: a better DEM. Going from 5 m to 1 m drops the terrain term at 10° from 28.36 to 5.67 and the combined figure from 29.27 to 9.21. A 68.5% improvement — an order of magnitude better than the 2% above.

Three: boresight calibration. This is the only item that costs no hardware. If the mounting error between the camera's optical axis and the mechanical axis is not calibrated out, it biases systematically, and it does so at the very front of the chain where the full slant range multiplies it. More than one of the papers above stresses that an uncalibrated mounting error between a high-accuracy navigation module and the electro-optical device seriously degrades localization. The procedure: shoot several sets of ground control points of known coordinates at various azimuths and elevations, and solve the residuals into a fixed rotation offset. Do it once and every subsequent fix benefits.

5. Looking back at the earlier posts

This post changes some of the trade-offs made earlier, so it is worth being explicit:

Where the pointing-accuracy spec should come from. The θ_max = 0.1 mrad used in earlier posts comes from image quality — LOS jitter smears the picture. But what geolocation demands of pointing accuracy is, from the table above, far looser. These are two different specs from two different requirements; do not let one hold the other hostage. Stabilization needs 0.1 mrad for the image; geolocation on an oblique look would find even 1 mrad over-specified, because it never gets to be the dominant term.

How good the encoder needs to be. Same logic. Past about 0.2 mrad, encoder accuracy has very little marginal value for geolocation. Its real value is elsewhere — post 25's position-loop feedback quality, and repeatability during boresight calibration.

The nadir keep-out is back. Post 24 showed a two-axis gimbal cannot slew fast enough near straight down. The interesting part is that straight down is exactly where geolocation is most accurate (1.5 m combined). The two pull in opposite directions: the mechanism says stay away from nadir, geolocation says get as close as you can. There is no purely mechanical fix — it is an inherent cost of the two-axis architecture. Accept it, or go to three axes.

The limits of this analysis

  • Flat terrain and a single-point intersection only. Real terrain has slope, and slope amplifies the δh/tan γ term further (a ray hitting a slope facing you behaves differently from one hitting a slope facing away). Not handled here.
  • Errors are RSS'd as independent 1σ terms. In reality attitude error and lever-arm effects are correlated, and boresight is a systematic bias rather than a random error — RSS underestimates systematic terms. This post treats boresight as "calibrate it out" rather than "budget for it."
  • Every magnitude is a typical value I chose, not a measurement. Different hardware moves all the numbers; but the direction of the three conclusions (1/sin² amplification, terrain dominance, calibrate the boresight) does not change.
  • No dynamics. A moving target, a moving vehicle, image latency — all contribute further error, and all belong to the Kalman filtering layer. See Hosseinpoor 2016 and the 2025 Aerospace paper above.

How to work through this with me

To apply this to your pod, have these ready:

  • Your typical operating height and grazing-angle range (these two decide everything)
  • The grade of your attitude source (MEMS AHRS? tactical-grade IMU? RTK-aided?)
  • Encoder specs and the orthogonality of the two axes
  • Whether there is a laser rangefinder, and if so its range and accuracy
  • Which DEM you have and its nominal elevation accuracy
  • Whether the boresight has been calibrated, and by what method

If something's missing, say it's missing — I won't guess a value and fill it in for you.

References

  • Wang, Liu, & Zhou (2017). Real-Time Multi-Target Localization from Unmanned Aerial Vehicles. Sensors, 17(1), 33. DOI: 10.3390/s17010033
  • Gautam, D., Watson, C., Lucieer, A., & Malenovský, Z. (2018). Error Budget for Geolocation of Spectroradiometer Point Observations from an Unmanned Aircraft System. Sensors, 18(10), 3465. DOI: 10.3390/s18103465
  • Hosseinpoor & Samadzadegan (2016). Precise Target Geolocation and Tracking Based on UAV Video Imagery. ISPRS Archives, XLI-B6, 243–249. Link
  • Improving Target Geolocation Accuracy with Multi-View Aerial Images in Long-Range Oblique Photography (2024). Drones, 8(5), 177. DOI: 10.3390/drones8050177
  • Vision-Based Geolocation of Moving Ground Targets Using Kalman Filtering with a Gimbal Camera on Board a UAV (2025). Aerospace, 12(12), 1065. Link
  • Ekstrand, B. (2001). Equations of Motion for a Two-Axes Gimbal System. IEEE Transactions on Aerospace and Electronic Systems, 37(3), 1083–1091. Link
  • Hilkert, J. M. (2008). Inertially Stabilized Platform Technology: Concepts and Principles. IEEE Control Systems Magazine, 28(1), 26–46.

Previous post: A Gimbal's Three-Loop Cascade. Want to size a motor? Gimbal Motor Sizing Calculator. Want to follow the series? Bookmark LocalPapa Notes.

探索 61 個隱私優先的瀏覽器工具
全程本地運算、檔案不上傳。
前往 LocalPapa →
Explore 61 privacy-first browser tools
Everything runs locally — your files never leave your device.
Visit LocalPapa →

想看英文版?點右上角 EN 切換語言。

Prefer Chinese? Tap at the top-right to switch.