[PX4/QGC 筆記] 深入解析 VTOL 航點規劃:為何 QGC 會自動產生一堆「隱藏」指令?

作為一名無人機軟韌體開發者,我們經常需要處理 MAVLink 協議與地面站 (GCS) 的互動。最近在開發自有的 Android GCS (GeekNexus) 並進行 PX4 VTOL 機型的航點規劃測試時,我注意到一個有趣的現象:「我在地圖上明明只點了一個起飛點和一個降落點,為什麼 Log 裡卻噴出了一大串我不認識的指令?」

這篇文章將透過實際的 Log 分析,來拆解 QGroundControl (QGC) 對於 VTOL 機型的任務規劃邏輯,特別是自動產生的「降落航線 (Landing Pattern)」。

1. 實際 Log 觀察

這是當我在 QGC 規劃好航點並上傳後,App 透過 MISSION_REQUEST_LIST 下載回來的實際結構:

[00] seq=0, cmd=VTOL_TAKEOFF, lat=24.570…, alt=50.00
[01] seq=1, cmd=WAYPOINT, …

[05] seq=5, cmd=WAYPOINT, …
[06] seq=6, cmd=DO_LAND_START, lat=0.00, lon=0.00
[07] seq=7, cmd=DO_SET_CAM_TRIGG_DIST, p1=0.00
[08] seq=8, cmd=IMAGE_STOP_CAPTURE
[09] seq=9, cmd=VIDEO_STOP_CAPTURE
[10] seq=10, cmd=LOITER_TO_ALT, lat=24.564…, alt=30.00
[11] seq=11, cmd=VTOL_LAND, lat=24.567…, alt=0.00

可以看到,seq=6seq=11 全部都是自動產生的。這並非 Bug,而是 PX4 針對固定翼與 VTOL 飛行特性的標準程序。

2. 起飛邏輯:Launch vs. Take-off

在 QGC 介面上,起飛通常涉及兩個概念:

  • Launch (Home): 這是飛機解鎖 (Arm) 的當下位置。
  • Take-off (VTOL_TAKEOFF): 這是飛機要「爬升」到的目標。

當你按下「Takeoff」按鈕,QGC 會自動在飛機前方或指定位置生成一個 VTOL_TAKEOFF 指令。對 VTOL 而言,這代表**「垂直爬升至指定高度 (例如 50m)」**。若該點有水平位移,飛機通常會在多旋翼模式下邊爬升邊移動,到達此高度後,才會轉入下一個航點(通常伴隨著由旋停轉平飛的 Transition)。

3. 降落邏輯:自動生成的 Landing Pattern

最令人困惑的通常是降落段。為什麼點一個 Land 會生出 6 個指令?讓我們逐一拆解:

A. 邏輯標記:DO_LAND_START (Seq 6) 這是一個「邏輯錨點」,其座標通常為 0。它不是讓飛機飛去哪裡,而是告訴飛控:「從這個步驟開始,進入降落程序」。

  • 重要性: 如果飛機在任務中途觸發 RTL (返航),且位置已經過了這個點,聰明的飛控邏輯(視 RTL_TYPE 設定)可能會選擇繼續執行降落程序,而不是掉頭飛回起飛點,這對於電力吃緊的 VTOL 至關重要。

B. 設備安全檢查 (Seq 7-9)

  • DO_SET_CAM_TRIGG_DIST (0)
  • IMAGE_STOP_CAPTURE
  • VIDEO_STOP_CAPTURE 這一連串指令是為了「收拾善後」。在降落前強制停止相機觸發、結束錄影。這不僅保護鏡頭(若有伸縮機構),更重要的是確保影片檔案正確寫入(Finalize),避免落地斷電導致檔案損毀。

C. 進場過渡:LOITER_TO_ALT (Seq 10) 這是降落前的關鍵點。

  • 行為: 飛機(通常以定翼模式)飛到此座標,並開始盤旋下降。
  • 目的: 讓飛機穩定地降低高度至(例如 Log 中的 30m)。對於 VTOL,這通常是準備進行 Back Transition (由平飛轉旋停) 的位置。它確保飛機以穩定的姿態和安全的高度進入最後階段,而不是從巡航高度直接「跳」下來。

D. 最終著陸:VTOL_LAND (Seq 11) 這才是我們在 UI 上點擊的那個點。飛機在此處切換為多旋翼模式 (Multicopter),垂直下降直到觸地並 Disarm。

4. 給開發者的建議 (Takeaway)

如果你正在開發自己的地面站 (GCS) 或進行自動化航點規劃,必須注意:

  1. 不要只傳送一個 LAND 指令: 針對 PX4 固定翼或 VTOL,若省略了 LOITER_TO_ALT 這樣的進場程序,可能會導致飛機行為不可預期(例如嘗試在過高的位置切換模式,或進場角度過大)。
  2. UI 呈現: 在設計 UI 時,可以參考 QGC 的做法,將這些自動產生的指令群組化顯示,避免讓終端使用者感到困惑。

理解這些「隱藏」的邏輯,才能寫出更安全、更穩定的無人機控制軟體。

You may also like...

發表迴響