跳轉到

第 9 章:特技(空翻)模式怎麼實現

本章學習目標

  • 理解空翻其實是「把姿態控制暫時關掉、叫飛機全速繞一軸轉一圈」
  • 看懂為什麼空翻必須繞過第 4 章的角度外環(這就是第 4 章思考題的答案)
  • 認識空翻的四個階段與可調參數

9.1 空翻看起來很猛,原理其實很單純

一個漂亮的空翻 = 「短暫地不要『穩定』,改成『全速翻一圈』,轉夠了再接回穩定」。 這台把它拆成四步(HAL/control.c 的特技段 + USER/INIT.cteji 參數):

  1. 墊高:翻之前先短暫加大油門爬升一點(怕翻完掉太多高度)。
  2. 進入翻滾收掉油門 + 繞過角度外環 + 直接命令一個很大的角速度
  3. 數圈:用陀螺積分「轉了多少」,到達設定門檻(約一整圈 360°)就算翻完。
  4. 恢復:接回正常姿態穩定 + 補回油門。

9.2 關鍵:為什麼要「繞過角度外環」

還記得第 4 章的思考題嗎?答案就在這裡。

第 4 章的角度外環目標是「回到某個角度並穩住」。但空翻要的是「持續轉、轉完一整圈」—— 這兩件事是矛盾的:

  • 如果用角度外環,你叫它翻到 180°,它到了就會「想停在 180°」,甚至開始往回修正——翻不過去
  • 而且角度在 ±180° 會跳變,外環一遇到就亂了。

所以空翻時,程式把角度外環關掉(旗標 sum.qhqh = 1),直接給內環角速度一個大目標, 讓飛機「不管現在幾度,就給我用這個角速度一直轉」:

HAL/control.c(節錄,已將 GBK 註解翻成正體中文)
if (Angle_roll <= teji.KF_jiaodu_qian)        // 還沒轉夠一圈
{
    thr_temp = 000;                            // ② 收油門
    sum.qhqh = 1;                              //    繞過角度外環!
    pidRateX.desired = teji.KF_jiaosudu_qian;  //    直接命令大角速度(如 1600°/s)
    pidPitch.desired = 0;
    Angle_roll += MPU6050.gyroX * Gyro_G * 0.04;  // ③ 用陀螺積分「轉了多少」
}

對照第 4 章:平常是「外環算出角速度目標」,空翻時是你直接塞一個角速度目標給內環。 內環(第 4 章那套)照樣忠實地把這個大角速度執行出來——飛機就翻起來了。


9.3 帶你算一次:翻一圈要多久

進入翻滾後 pidRateX.desired = 1600(°/s)。翻一整圈是 360°,理論上:

\[ t = \frac{360°}{1600°/s} \approx 0.22 \text{ 秒} \]

加上前面的墊高和後面的恢復,整個空翻動作大約半秒內完成——又快又乾脆,這就是為什麼空翻角速度要設這麼大。


9.4 可調參數(在 pid_param_Init() 裡)

USER/INIT.c 把特技參數都集中在 teji,註解寫得很清楚,你調手感就改這些:

參數 意義 調大的效果
KF_shangsheng_time / KF_shangsheng_youmen 翻之前墊高的時間/油門 翻得更高再翻、掉高更少
KF_jiaosudu_*(前後左右) 翻滾的角速度 翻得更快、更猛
KF_jiaodu_* 判定「翻完」的累積門檻(約對應 360°) 太小翻不滿一圈、太大會多轉

配套文件:11.PID调节和空翻精细调节/空翻精细调节.pdf。先用預設值飛,再依手感微調這幾個數。


9.5 動手驗證與安全

空翻務必在足夠高度與空曠場地

  • 至少 2~3 公尺以上高度再翻(給墊高和恢復留空間)。
  • 電量充足(翻滾瞬間電流大,電壓會掉)。
  • 空曠、無人、戴護目鏡。先在模擬或預期會摔的心態下練習。
  • 上位機看 Angle.roll:手動快速翻轉飛控,觀察角度怎麼變化(體會 ±180° 的跳變問題)。
  • 飛行中觸發空翻後,回放波形看 roll 角速度(陀螺)是否在翻滾瞬間衝到設定值附近。
  • 微調一個 KF_jiaosudu,感受「翻得更快」與「翻過頭不穩」之間的界線。

9.6 思考題

  • 用 9.3 的方法,若把角速度設成 2500°/s,翻一圈約需多久?
  • 為什麼空翻要「先墊高、翻時收油門」?如果翻滾全程維持大油門會怎樣?
  • 空翻繞過了角度外環,但內環(角速度)全程都在工作。如果這時內環沒調好,會發生什麼?(呼應第 4 章「先調內環」)

9.7 本章對應的原始碼

檔案 看什麼
HAL/control.c Mode_Controler() 內的特技段(sum.qhqh 繞過外環、直接給角速度)
USER/INIT.c teji 各參數(墊高、角速度、停止門檻)

最後一章:把整台飛機串起來——用上位機調參,以及保命的安全機制總整理。