第 9 章:特技(空翻)模式怎麼實現¶
本章學習目標
- 理解空翻其實是「把姿態控制暫時關掉、叫飛機全速繞一軸轉一圈」
- 看懂為什麼空翻必須繞過第 4 章的角度外環(這就是第 4 章思考題的答案)
- 認識空翻的四個階段與可調參數
9.1 空翻看起來很猛,原理其實很單純¶
一個漂亮的空翻 = 「短暫地不要『穩定』,改成『全速翻一圈』,轉夠了再接回穩定」。
這台把它拆成四步(HAL/control.c 的特技段 + USER/INIT.c 的 teji 參數):
- 墊高:翻之前先短暫加大油門爬升一點(怕翻完掉太多高度)。
- 進入翻滾:收掉油門 + 繞過角度外環 + 直接命令一個很大的角速度。
- 數圈:用陀螺積分「轉了多少」,到達設定門檻(約一整圈 360°)就算翻完。
- 恢復:接回正常姿態穩定 + 補回油門。
9.2 關鍵:為什麼要「繞過角度外環」¶
還記得第 4 章的思考題嗎?答案就在這裡。
第 4 章的角度外環目標是「回到某個角度並穩住」。但空翻要的是「持續轉、轉完一整圈」—— 這兩件事是矛盾的:
- 如果用角度外環,你叫它翻到 180°,它到了就會「想停在 180°」,甚至開始往回修正——翻不過去。
- 而且角度在 ±180° 會跳變,外環一遇到就亂了。
所以空翻時,程式把角度外環關掉(旗標 sum.qhqh = 1),直接給內環角速度一個大目標,
讓飛機「不管現在幾度,就給我用這個角速度一直轉」:
| HAL/control.c(節錄,已將 GBK 註解翻成正體中文) | |
|---|---|
對照第 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 各參數(墊高、角速度、停止門檻) |
最後一章:把整台飛機串起來——用上位機調參,以及保命的安全機制總整理。