2015/11/26

四軸穿越 -- 小小機子大大學問

雖然 V686G 帶我入門 FPV 穿越,但是越飛越不滿足,視訊傳輸距離短、動力不足又怕風,某次回油太慢蜻蜓點水後鏡頭泡水後就掛了,後來弄了一組 SYMA X5 通用圖傳模組,雖然號稱有 100mW 的傳輸功率,但是依然雪花陣陣,樹林裡只能飛 50~60 公尺,而且畫質比 V686G 更差,重量過重讓 V686G 爬升無力,最嚴重的是圖傳似乎濾波不良會干擾 V686G 的 2.4G 接收,飛遠之後常會斷訊凍結操控而摔機。

重摔之下必有勇夫,某日終於鼓起勇氣向老婆大人告白,想想平日雖沒多辛苦,但也任憑差遣任勞任怨,應該值得這一點點小小的賞賜吧!

就這樣讓我踏上四軸穿越機的坎坷路!

哀,明明裝起來就能飛的四軸飛行器對我來說應該是輕而易舉的事,怎會搞得如此狼狽呢?

話說這些免費的開源系統讓各種可能都變成真,但也因為開放原始碼所以版本眾多,各種變化用法沒有一定公式或明確的安裝調整手冊,加上開源系統的內部參數完全開放,光專有名詞就讓人眼花撩亂,要把上百個參數調整到和諧運作想到就令人倒抽一口涼氣,除了某些參數需要小心使用之外,還要注意版本演進造成的參數變動。相信許多人看到這裡就準備打退堂鼓了,幸好也有人說簡單調一調就能飛了,對我來說這一定不是問題!

倒是這些知識網路上都找得到,卻沒看過一個有系統的整理,內容四散各地而且用詞專業,有些東西沒有親身實做更是難以體會。要不是我興沖沖一頭栽入,只想花小錢又想嘗試各種奇特功能,才會耐心的在網海打撈知識,不然買台套裝機那才是省時又省力的休閒娛樂!

以下是我從無到有的心路歷程,這個過程對我來說都顯得冗長繁複,若是 RC 的門外漢應該會比我更難度過吧!


飛控的選擇

我對飛控歷史沒什麼研究,只知自KK飛控帶起開放原始碼風潮後,四軸飛行器變得非常便宜。真的要研究這裡有篇文章交代得很清楚:技術貼!開源飛控那些事(上篇)技術貼!開源飛控那些事(下篇)

現在市面上最常見的穿越機幾乎都搭配 CC3D 飛控,超便宜又有多功能,預載 Openpilot 開源碼,可以外加 GPS 做定點飛行等控制。

近來開始流行的是性能更勝一籌的 Naze32 飛控(日語なぜ,簡單),甚至還有內建氣壓計的版本可以定高飛行,預載 Baseflight 開源碼,一樣可外接 GPS (但無法做深入的控制),缺點是價格多一倍(但還是少於一張小朋友)。

內建氣壓計這點很吸引我,雖然聽說效果非常有限,但是多一個功能可以玩玩自然比較佔優勢,所以我選了 Naze32 Rev5 AcroFlight 加了氣壓計的 10DOF 版。

有了飛控才是問題的開始,預載的 BaseFlight 是從 Multiwii 時代發展出來的韌體,現在有原生 32 位元的新韌體叫 CleanFlight,而且持續不斷的更新版本,那當然要升級到 CF 囉。

升級的方法越來越簡單,現在只要在 Chrome 瀏覽器上面下載 Cleanflight - Configurator,用 USB 連到電腦,就能輕鬆的更新韌體。

我開始組裝時使用 CF1.9 版(需搭配 Configurator 0.65),試飛中途 CF1.10 釋出(需搭配 Configurator 0.66),最近則是釋出了 Configurator V1.0 正式版,就不必再使用測試版了,選好搭配的硬體和版本就能線上下載然後更新。


CleanFlight Release 版本

其實 Youtube 上面還可看到其他版本的 CleanFlight,最常看到的是 BorisB 的版本,他算是 CF 缺點改進以及新功能的測試版,以前 1.9 被取消的低通濾波功能就有很多人反應不好飛,還好後來的 1.10 重新加入了幾個濾波器,就不用再裝 BorisB 版本了。


機身的選擇

早期四軸飛行器都長得像蜘蛛有細長的腳,穿越機要穿洞又耐摔,因此都做成緊緻小巧的結構。最常看到的是長長的機身伸出四片厚碳纖當馬達支架,可是光看到用鋁柱做腳架就令人擔心,最後找到 DL265,他用塑膠做馬達保護座並兼作腳架,看起來應該很耐摔。

選好機身後就順便買套裝比較省事,包含 2206-2300 馬達、12A Oneshot 電變、Sony 700 線 CCD、 600mW 32頻道圖傳、5V+12VBEC分電盤,額外買幾根備用槳、LED指示燈、Runcam 紀錄飛行影像、MinimOSD、平板天線,似乎這樣就能組一台穿越機了。


螢幕的選擇

一定要有獨立雙接收才能截長補短,蘑菇天線+平板高增益天線可以兼顧接收距離及角度,另外還要有錄影功能才能把眼睛看到的情況錄影起來,最好有折疊遮陽罩才方便攜帶,而且一定要有 32 頻道才能通吃各種圖傳,所以選了評價不錯的 SeeTec PVR732,聽說和 Feelworld 同一代工廠,比較便宜一點。

5.8G 圖傳跑的是未加密的影像,帶著螢幕出門就能收看別人的畫面,我拿到頭前溪就能清楚的收到對岸飛場的熱鬧影像。


開始組裝

組裝配線對我來說不是難事,網路上找到非常明確的一張接線圖,依樣畫葫蘆就好了。

不過手上僅有 DSM2 衛星接收,聽說把串列訊號接到 RC 輸入的 P4 就好了(上圖裡面取代GPS接收訊號),雖然我也有買 GPS ,眼前能用最重要,這問題以後再說吧!

DSM2 衛星使用3.3V 所以電源必須接到專用的接點,簡單三條線就有八通道可用。

剛開始對 Naze32 研究許久,發現主要的通訊埠 UART 只有兩個,接收用掉一個,一個接 USB 連電腦,如何同時擁有 GPS、OSD、聲納、甚至還有黑盒子呢?

一個方法是使用模擬串列埠(Soft Serial),開啟後便可多出兩個模擬通訊埠,雖然通訊速率不能太高,但是對於慢速周邊來說已經綽綽有餘。可是後來我安裝動態 LED 顯示時發生資源衝突,因此開啟 LED Strip 就必須關閉軟體串列埠,所以放棄這個方法。

另外一個絕妙方法是使用 PPM 接收機,PPM 就是把接收訊號依照順序由同一條線輸出的方法(和衛星接收的通訊方法不同),因此和衛星接收一樣只要三條線就可接上任意通道的接收機,不僅可減少接線數量,也才能完整釋出 UART2 的功能。

沒有 PPM 就不能飛了嗎?也不是,但是最新的電變支援 Oneshot 125 高速傳輸模式,可以提高四軸馬達的反應速率,飛控版才能跑更快的主程式迴圈 Looptime,這也是近來 Cleanflight 研究更新的重點,但是使用 Oneshot 就不能使用傳統 PWM 接收方式。為了讓四軸運作有更高效率,最好的方法就是用 PPM 接收機。

※ 經 Leon Chen 指正,Oneshot125 可以和 PWM 接收共用。

雖然 PPM 這麼好,但市面上極少有 PPM 輸出的接收,比較常見的是 FrSky,可惜他是 Futaba 系統,不然大部分人都是外加 PWM 轉 PPM 板子,可是這樣不就又回到滿滿的電線嗎!

還好找到一顆新的接收機, DSMX 系統卻具有 PPM 輸出,StormRC S603,天線有加長(適合遠離穿越機的碳纖板)並內建訊號放大器,號稱遙控距離達 1.5~2 公里,更棒的是 300 元一顆,而且露天就有賣,那當然給他踹踹看!

本來只買一顆 S603 來試,後來發現六動不大夠用,加上偶爾會斷訊,所以又買兩顆來交叉比對,發現六動性價比最高,七動硬體完全相同卻高了50%的售價。至於失控的問題後面再說。


佈置規劃

網路上看穿越機總覺得重量不輕體積應該也不小,結果拿到手上卻只比 V686G 大一點而已,大概就比手掌大一些些,這麼小的空間要塞滿電子零件確實不容易,然怪大家裝起來都塞得那麼難看。

我也學別人把電變和分電板裝在底層,但是電線真的擠到很滿。

Naze32 裝在中層板中央,飛控板方向使用預設配置,電變插座焊上90度彎角朝前。事後發現這樣很難插拔 USB (調參數時經常用到),一般會建議轉個 90 度比較合理,可惜彎角已焊上,若再轉90度則插座會突出機身而作罷!

圖傳綁在尾巴,天線向後突出機板遠離接收機天線。

DL265 的特色是連 CCD 都做在防震腳座上,而且角度可以調整。

接收放在上層版的後面,只要三條線就能運作。

我覺得 OSD 對四軸飛行器很重要,因為穿越飛行一定要靠影像,透過 OSD 便能及時知道電池電壓等資訊。

我買體積最小的 MinimOSD micro,想說這塊板子比較不占空間,誰知板子真的超小,最後學老外焊上雙排針,不過我讓他從側面出針,這樣比較容易固定。

接線其實很簡單,剛開始我學下圖把 OSD 接在 UART1 上,但是要把通訊速率設為 115200,才能與 USB 共用 (當時這麼認為)。

MinimOSD 也是開源碼的產物,核心是用 Arduino 系統,這是近年最夯的發展系統,利用單晶片 CPU 做成各種功能的小板子,因為開源所以我們可以用非常便宜的代價享用這些獨特的功能,例如藍芽模組也是這樣。缺點是甚麼都要自己弄。

同樣的在 OSD 界也有許多版本可以選擇,最常見的是 ArduCAM,不過我發現 MW OSD 有支援 Cleanflight 的 OSD 調整參數的功能,因此我選擇 MW OSD,有了他就能在螢幕上調整 PID 參數了!

更新韌體比較麻煩,需要下載器才能連線,手邊的 USB 轉 232 雖然能轉出訊號,但接上 OSD 卻無法連線,只好再買一條 FTDI 編程線

(後來發現可能我用 1S 電池供電才沒辦法連線,也不一定要買 FTDI 的晶片,不過 FTDI 價格也很便宜,將來其他模組也能用。)

使用方法在 MW OSD 官網有完整說明,更新韌體方法也說得很清楚只不過都是英文,先下載韌體包,安裝 Arduino 編程器,電腦連接 FTDI+MinimOSD,載入MWOSD韌體 MW_OSD.ino,板子選 Arduino Pro or Pro Mini,處理器選 Atmega328 (5V,16MHz),選好序列埠 (正確連接 FTDI 後會自動選取),然後執行"上傳"就會開始編譯然後上傳。

※ 下圖和 Micro 板有出入,沒有BLK,GRN就是DTR,總共五條線,記得 Tx(發送) 要連到 Rx(接收),這樣通訊才收得到。

※ 使用 Arduino 上傳時記得要關閉其他應用程式以免干擾傳輸,像我一邊用藍牙聽音樂,又開著 Cleanflight Configurator,結果怎麼上傳都失敗,關掉就正常了。

更新好韌體,繼續用 FTDI 連線,進入 MW_OSD_GUI 目錄,選取適合的作業環境,執行 MW_OSD_GUI.bat 啟動規劃器(會出現命令視窗很久很久),開機自動連線後可以調整顯示內容。

因為我有連接電池電壓到 Naze32 板上做電壓偵測,因此設定 "Use FC main voltage"  直接顯示飛控電壓;電池使用 3 Cell;電壓警示調到 10.5V;我的攝像頭都買自淘寶因此影像格式要選 PAL Video Signal;其他選項看自己高興開關。

如果嫌字體太細可載入粗體字形,選好字形檔後要按 Upload 上傳,256 個字符要傳蠻久的。最後記得 Write 進去 OSD Controller。

有了 MW OSD 要調整 CF 參數很簡單,在 Disarmed 狀態下 油門置中 + Yaw-right + Pitch-down(搖桿向上),以日本手來說右手置中左手打右上就能進入調參畫面,Roll 左右移動,Pitch 上下移動,Yaw 增減數值以及確認或取消。

大部分參數都有,只是 CF 後來的版本把 Roll 和 Pitch Rate 分開,而 MW OSD 裡面只有一個欄位,所以下面的 Yaw Rate、TPA 等欄位會向下推一格。


Cleanflight 設定

首次使用最好做一次校正程序,在 Configurator 裡面依照指示校正加速度計 Accelerometer 和磁力計 Magnetometer,這樣方位比較準確,停懸時才不會自己飄走。


第二項 Ports 用來規劃通訊埠接什麼設備和速率。

這裡是我後期的用法,UART1 MSP 內建連到 USB (也可給 OSD 使用),同時啟用黑盒子 Blackbox 而且速率可以和 MSP 不同,這樣飛行中就會與黑盒子通訊,不飛時可接電腦。等調好飛機後再把黑盒子換成 GPS。

UART2 也是勾選 MSP,我把它接給 OSD,這樣飛行中有 OSD 也有 Blackbox。


第三項 Configuration 設定系統重要參數

Mixer 馬達配置:穿越機大都用 QuadX 型式(注意馬達方向和順序),若要修改 X-Y 軸比例或是特殊配置則需改成 CUSTOM,然後到 CLI 裡用  mmix 參數修改比例。

Board Alignment 機板方向:我沒旋轉板子所以都是 0,若有旋轉方向或是高速競賽傾斜配置可以在這裡修正。

Reciever Mode 接收機模式:我使用 PPM 接收機,若使用衛星接收則下面還有衛星型式可選。

Receiver failsafe 失控保護:這是 CF 內建的失控保護,沒收到接收機訊號後進入保護狀態 (預設5秒鐘),通常 1000 位置為關閉油門。

※ 油門和各遙控通道範圍都是以標準伺服機控制訊號的時差來設定,0~1000us 為前置訊號,1000~2000us 為伺服機位置,1000 就是最低點,2000 為最高點。

RSSI (Signal Strength) 收訊強度:有的接收機或是 OSD 系統有提供 RSSI 接收訊號強度,這樣就可以避免飛太遠而斷訊。可惜我這些陽春設備都沒有。

GPS 衛星定位:開啟後可以選定衛星型式和速率,比較熱門的 GPS 引擎是瑞士 Ublox 產品,較平價普遍的 M7N 可接收美國 GPS 和俄羅斯 Glonass,最新的 M8N 甚至還加入了中國北斗衛星、以及不再維護的摩托羅拉伽利略。

ESC/Motor Feature 電變設定:開啟 Motor_Stop 否則平常解鎖後馬達就會慢轉,電變韌體有支援 Oneshot125 當然要開啟 Oneshot125高速模式,其他用預設值就好,馬達低點1100、中點1500、高點1850,最低數值1000。

※ 開啟 Oneshot125 之後,雖然有 motor stop,但是馬達仍會間歇觸發一下子,這是正常現象。

Accelerometer Trim 加速度計調整:前面做的加速度計校正應該能讓機子水平停懸,照說不該再調整。

Battery Voltage 電池電壓警示:VBAT 開啟電壓監視、3.4V 低電壓警示、4.3V 高電壓警示。飛行中還要扣掉馬達吃電,我的經驗是出現 3.4V 低壓警示後再慢慢飛回來,回電後電池電壓都還能超過3.7V。

Current Sensor 電流偵測:這個要外接電流計才能偵測,有電流計也能推估耗電量,雖不精確但能知道大概用電量。

System configuration 系統規劃:Loop Time 用來規劃 Cleanflight 主程式迴圈的運算速度,通常越接近陀螺儀 1000us 效率越高,但就怕周邊設備受不了(主要是 ESC 來不及接收完整訊號),預設值是 3500us,適合所有飛控版,Naze32 有開 Oneshot125 高速傳輸模式的話可以設定 1200us,換算起來就是 833Hz,每秒跑 833 次迴圈。

Other Features 其他功能:各種裝置的開關,這裡我用了 Led Strip 和 Blackbox。

哇,開源飛控就是有這麼多參數和知識需要知道,別氣餒,後面還有更多更複雜的參數等著我們去探索。


第四項 PID Tuning 就是陀螺儀修正機身動態的特性參數,也是整個四軸機調參的靈魂(也有人說是惡夢)

PID Controller PID 控制器:這是陀螺儀和加速度計運算的演算法,共有六種可選,下面又要講歷史了:

0 - MultiWii (Old) :最早是由 MultiWii 2.2版本移植來的,聽說參數間有些交互干擾很難用。

1 - MultiWii (rewrite):基本上由 MultiWii 2.3 改寫而來,目前仍持續更新中,具有自動調整 PID 功能。缺點是手動模式 (Acro) 參數會影響自穩模式 (Angel 及 Horizon),因此適合只飛 Acro 模式的人 (通常指的是穿越老手)。

2 - LuxFloat :MultiWii 韌體是開發給8位元CPU用的,沒有浮點運算能力而且解析度較低,而 Naze 及 CC3D 都使用32位元CPU了,因此重新編寫32位元程序並加入浮點運算,自2015年開始被改名為 LuxFloat,算是較新穎而且也是最常被更新的一個。由於 PID 不受 Looptime 影響所以比較好調整參數。

3 - MultiWii (2.3 - Latest):直接由 MultiWii 2.3 移植而來。

4 - MultiWii (2.3 - hybrid):混和 MultiWii 2.2 和 2.3 優點而成。

5 - Harakiri:由 Harakiri 韌體移植而來,具有很好的 GPS 鎖定能力,但是參數不易使用。

早期使用 3 號的人較多,後來 1 號的自動調整性能變好之後使用率上升,目前 CF 持續有在改寫更新的只剩 1 和 2 號。

Roll, Pitch, Yaw 分別對應三軸控制,遙控器上分別對應 Aeileron (副翼)、Elevator (升降舵)、 Rudder (尾舵) 這三個舵面控制通道。各有各的 PID,另外還有 Level (自穩模式)、Alt (定高控制)、Vel (自穩速度)、Mag (羅盤定向) 這幾項個有些許差異需要看手冊才知道,其中較常用而且奇特的是 Level 的定義,Level-P 是 Angle 模式的 P 值、Level-I 是 Horizon 模式的 P 值 (數字跟著 I 參數格式變為小數點)、Level-D 是自穩模式轉換時的輸出量。

Roll, Pitch, Yaw rate:各軸控制輸出量,由於四軸機動力驚人,全動力輸出會強得嚇死人,一般飛行用 50% 就很夠用了,原地翻滾也沒問題。

TPA, TPA Breakpoint:由於四軸動力太強,大油門時可能造成 PID 過度介入而造成機體晃動,TPA 以線性的方法來減少大出力時的 PID 輸出量,油門由 Breakpoint 開始,以 TPA 為斜率線性的減少 PID 介入。停懸油門大約是 1400,所以 Breakpiont 由 1400 開始減少 PID。


要調整參數就不能不知道什麼是 PID,Proportional 比例、Intergral 積分、Derivative 微分,聽起來很難懂,以實際結果來看的話 P 是修正力道、I 用來維持姿態、D 用來平滑修正量。

P 太小無法穩定姿態會有滑溜感不易控制,P 太大會高速往復震動。

I 太小無法保持姿態,I 太大會慢速往復震動。

D 太小則修正太直接不滑順,D太大則操控會延遲。

以上是以我用結果來看 PID,實際飛行還有很多條件會影響結果,似乎沒有完美的設定,而且手感也因人而異,因此沒有一定公式。目前看起來很難理解,沒關係,老外有整理調參步驟,後面試飛時再解釋。


第五項 Receiver:接收通道設定

Channel Map 通道分配圖:JR 系統用 AETR1234 排列 (就是Aileron, Elevator, Throttle, Rudder分別排在1,2,3,4通道)。

Throttle MID:油門中點,目的是調整指數曲線的中點平滑區,一般都用停懸油門。

Throttle EXPO 油門曲線:由於四軸動力強勁,油門稍微摸一下就會改變高度,為了讓停懸時高度不要變化太大,指數曲線都設很大。

RC Rate 遙控比率:相當於遙控器的 D/R,減少水平和副翼的控制量。

RC EXPO、RC Yaw EXPO 遙控指數曲線:相當於遙控器的曲線,由於四軸動力驚人,大家都把指數曲線設很大以平滑操控感,FPV 時會比較平順免得暈頭轉向。

※ 對了,各廠牌發射機和接收機輸出量都不一樣,像我的 Deviation + S603 輸出範圍偏高,要在遙控器上調整通道偏移-20 才能讓中點對齊1500,而輸出總量又偏少所以要調整通道行程量到 120 才能讓上下極限落在1000~2000。

※ PPM 訊號無法像一般 PWM 或是衛星接收那麼穩定,我的 S603 偏移量約 4~6us,這是正常現象,不會影響操控,若真要避免微量跳動影響操控的話,在 CLI 裡面設定 deadband = 6 就能過濾 6us 以下的變動。


第六項 Modes 操控模式

ARM 武裝模式:四軸飛控有完善的安全機制,馬達轉動完全由飛控控制,通電後油門無法直接控制馬達轉動,必須經過解鎖程序,武裝以後 (ARM) 才會開始轉動。ARM 之後若沒有切到其他自穩模式,則飛機處於 ACRO 特技模式,或叫手動模式,搖桿置中後機身會維持飛行姿態。ARM 雖然可以使用開關來切換,但我一直無法成功解鎖,後來發現更好的方法是用搖桿解鎖,連續 5 秒馬達沒轉動還能自動上鎖,更省去一個開關。

ANGLE 角度模式(純自穩):此模式基本上只會讓機子水平飛行,搖桿只能控制極少的傾斜量來移動 (也可在 CLI 裡面設定 max_angle_inclination 改變最大傾斜幅度),大概只用於迷向或是快墜機時的自救吧!

HORIZON 水平模式:相當於直升機說的六軸模式,搖桿放手馬上恢復水平自穩,卻也兼顧特技飛行的動作量,可以讓你放心地翻滾。

BARO 氣壓定高模式:聽說可以調整 PID 來停懸於固定高度,但是穿越機只有停懸沒多大意義,倒是可以利用氣壓計來輔助油門輸出,讓飛行中的高度偏移量減小,後來喜歡這樣飛。對了,BARO 模式一定是在自穩模式下,我把他和 Horizon 重疊使用,不過分開也是一樣的結果。

MAG 磁力定向模式:利用羅盤和加速度計來穩定飛行方向,這個看起來沒甚麼意義。

HEADFREE 無頭模式:從不覺得需要無頭模式。

另外還有 BEEPER 蜂鳴器開關、LEDLOW 開關、OSD 開關、Autotune 開關,蜂鳴器是穿越必備品否則掉到草叢真的很難找,有用 Controller 1 的人就應該設 Autotune,體驗一鍵調參的快感。

網路上只見 Mode2 的搖桿模式切換說明,這裡我把 Mode1 也整理出來給大家參考,雖然我只用到解鎖而已。


第七項 Adjustments 遙控調參,利用遙控器的開關調整 PID 參數,這是手動調參的必備技能,可以邊飛邊調立即看出細微的變化。

左邊選擇功能,右邊指定三段開關用來增減數值。

這裡至少會用到兩個遙控通道,這也是我覺得六動接收不夠用的原因,除非 PID 調整完成後就不再使用,把這兩個通道移做飛行模式開關。

上面我把 AUX1 切成六段用來選擇 Roll 和 Pitch 的 PID,一般的遙控器很難這麼設定,還好我用的是 Deviation 萬用控,設定這種複雜段數真是輕而易舉。我只是把 AUX1 設成四段開關,前三段用 Mix 來切換,但是數值分別設定為固定的 -100, -60, -20,第四段用 Aile D/R 來切換,切入時把 AUX1 數值加上 120,把 Mix 的三段數值移到正值,這樣就能把 AUX1 均勻的切成六等分啦!

如此一來,飛行中就能持續改變 PID 數值,配合手動調整的心法,可以迅速地調出一個堪用的 PID,過程留待我試飛時再講。


第八項 Servos 伺服機 第九項 GPS 目前都沒用到

第十項 Motors 馬達控制

前面說過四軸飛控的馬達並非直接由油門通道控制,鑒於四軸有四顆獨立的馬達和電變,為了要讓每一顆馬達能同步運作,因此電變的校準變得很重要。

校準方法就是先連接 CF,把 Master 拉到最高再接上電池,這樣就能確保每一顆電變都進入油門行程設定狀態,再把 Master 拉桿拉到最低,聽到電變校準完成的音樂就算完成了。

※ 測試馬達時務必移除螺旋槳,不然後果會很可怕!


第十一項 LED Strip LED串燈

這是以通訊的方法來控制 LED 燈串,只支援 WS2812 控制 IC,最多 32 顆獨立顯示的 LED 燈。

剛開始霧煞煞看沒有,後來終於知道,上面的矩陣只是讓你模擬安裝在機身上的位置,實際作用主要是決定方向燈怎麼顯示。

進入 Wire Ordering Mode 可以照順序排列 LED,實體接線也要照這個順序。

例如我有兩塊 WS2812 板,後面左右三顆燈中間是蜂鳴器,前面就裝整排的 LED,接線的順序就是由 0 號的位置輸入訊號,5 號燈為訊號輸出端,再接到前板的 6 號輸入端。

點選燈泡後可以啟動右邊的功能,例如上圖選在 2 號燈,其功能同時有紅色的 Warning(警示) 和綠色的 Mode & Orientation(模式與水平)。

0, 5, 6, 13 四個角落燈號的功能為 Indicator (方向燈,右傾則右邊閃,前傾則前面閃),Arm State (解鎖與否)。

7~12 我讓他顯示 Ring (跑馬燈),顏色選白色。


第十二項 Sensors 感應器狀態,看看有沒有正常輸入就好。

第十三項 Logging 紀錄器,即時顯示個元件狀態,除非插著 USB 邊飛邊連線,否則沒有意義。

第十四項 Dstaflash 使用 CPU 內建快閃記憶體紀錄飛行資訊。通常只有 2M 大小大概只能記錄 3~4 分鐘,除非每次飛完都連接電腦下載,否則實用性欠佳。


第十五項 CLI 命令列介面

CLI 就像是 DOS 作業系統,其他的頁面都是圖形化介面 GUI 就像是視窗作業系統。

CLI 可以設定所有完整參數,但只能用文字操作,功能最完整但卻不易使用,基本上是給寫程式的人用的,當初的韌體也是這樣一點一滴開發出來的。

參數的數量非常之多,全部搞成圖形介面的話又顯得繁雜,對於一般使用者來說也不夠便利。然而某些參數雖然少用卻又攸關效能,不用 CLI 就不能設定,再則 Cleanflight 操作手冊裡面大部分的操作都建立在 CLI 上,而且參數定義就寫在 CLI 指令上,即使繁瑣還是得懂得如何使用,這就是開源系統讓人卻步的原因吧!

除了一些隱藏參數需要設定外,CF 資料的備份也只能靠 CLI,備份的方法就是在 CLI 輸入 dump,他會用文字的方式條列所有參數,複製然後貼到文字檔就能存檔了。下次要套用備份檔時也一樣,複製再貼到命令列中執行"就好了"!

因為命令列寫入資料需要一點時間,一次貼上所有參數會遺漏或是中斷,最好一次貼幾行,慢慢貼才能確保資料全部執行!

※ 糟糕的一點是每一個 CF 版本參數可能變動,有的是數值定義不同,有的連參數名稱都改了,改版的時候要特別注意。

雖然 CLI 令人卻步,但開始調整 PID 的時候卻不時得求助於使用手冊裡面 CLI 的定義,主要是每個參數的定義和用法都不同,不研究清楚怎麼調機呢!

使用 CLI 的一個特殊例子是當我發現我的四軸機的長寬比例不是 1:1,而修正的方法只能用 CLI 的 mmix 指令。

這個修正的方法連 Cleanflight 說明書都沒提到,網路上有一個範例 Custom Motor Mixing Multirotors,基本上可以修正任何比例或是排列,方法是:

mmix 馬達編號, 油門比例  Roll比例  Pitch比例  Yaw比例 

例如我的馬達排列長寬比是 0.82:1,那麼必須這麼設:

mixer CUSTOM
mmix reset
mmix 0 1.000 -1.000 0.820 -1.000
mmix 1 1.000 -1.000 -0.820 1.000
mmix 2 1.000 1.000 0.820 1.000
mmix 3 1.000 1.000 -0.820 -1.000

※ CF 1.9 使用 cmix 指令而且馬達編號由 1 起算,1.10 版以後改用 mmix 指令馬達序號由 0 開始算起,這是特別要注意的地方。

設定完成後陀螺儀修正馬達出力會更自然一些,只是 Cleanflight Configurator 裡面使用自訂排列,看不到四軸形狀,而且規劃的畫面也看不到馬達排列位置,初學者要特別小心。

怪我當初想得太簡單,想說四軸穿越機的配件都是現成的,線接一接就應該就能飛了,結果搞到這裡花了近一個月才組好,終於準備要試飛了。

很多人在試飛前不敢拍照怕變成遺照,我是忘了拍卻只能拍事後照,第一周試飛還沒飛起來就摔成這副德性!

經驗老到的我竟會落到如此田地,真是太小看四軸飛行器了!

錯誤第一步,馬達方向正確,但不知哪根神經太大條,竟然沿用過去的經驗把馬達順序當成逆時鐘排列,一加油門就翻倒,不管怎麼調整參數都沒用,耗去一個上午摔了很多次才發現這個錯誤!

錯誤第二步,沒搞清楚控制器的意義就開始飛,明明使用 LuxFloat 卻一直讓他自動調整 PID (使用 1 - MultiWii (rewrite) 才能自動調 PID)。

錯誤第三步:不清楚 Level PID 的定義,使用預設值的自穩 P 值太大,加油門會讓機子擺盪,切換模式又會爆衝,然而自動 PID 又一定要在自穩模式下執行。

總之當時已經暈頭轉向到底發生甚麼事已不可考,只知道很多次高速插地,摔得膽戰心驚,而且每摔 CCD 必定脫落,雖然插回去就好了,但最終還是摔到沒有訊號輸出了。

此次重大挫敗讓我痛定思痛,一定要搞清楚每個參數的定義和用法,後來才發現許多錯誤和不足。

等到參數研究出大概之後,重新鼓起勇氣挑戰 PID,因為 CCD 摔壞了,只好掛上 Runcam,用他的訊號輸出來代替 CCD。

這次也把天線使用轉接頭固定在基板上,這樣才不會突出機身,摔機時才不會折斷天線,而且天線折彎的時候才不會折到圖傳電路板。

另外為了不想帶筆電又能快速調整參數,除了使用遙控器調整之外,也外接藍牙到 UART1,利用 MSP 訊息傳到手機 APP,目前只有 EZ-GUI Ground Station 大致能用。

這顆 HC-06 藍牙要先設定正確的通訊速率才能使用,設定方法可以直接以 AT 命令設定,通訊終端機可以使用 Arduino skech 裡面->工具->序列埠監控視窗,猜對原本的通訊速率後就能用使用 AT+BAUD8 設定成 115200,AT+PIN1234 可以把 Pin 設成 1234。有關藍牙設定可以參考 雄的家

另外先前視訊雖然能傳,但是電源和馬達共用沒經過濾波,結果回傳影像有斜紋,還好當初有多買一顆濾波器,圖傳和攝影機電源都先經過濾波器,影像就純淨無雜紋了。

既然選了 LuxFloat 那就全手動調整 PID 吧,反正有藍牙+遙控調參應該容易多了。

首先用預設值飛,左搖右遙看手感如何,調高調低 PID,只知 P 太高則操控時會伴隨晃動,但是 I 和 D 實在看不出對操控有明顯影響!

聽說 LuxFloat 對參數比較不敏感,隨便調也能飛,只是這樣到底要調甚麼、要怎麼調才好?

不管了,能飛就好,反正飛起來似乎還蠻跟手的,要翻要滾都沒問題,甚至還學高手把攝影機抬高,準備開始高速穿越!

結局再次證明我是一個四軸菜鳥。

錯誤第一步:聽說高手都用 Acro 模式穿越,我技術不差當然不會用 Horizon 自穩模式飛。但是我忘了四軸的動作量極大,用了指數曲線後小動作看來平順好控制,一旦動作太大則輸出馬上陡增,可能隨時翻滾過去,尤其是視訊不佳的混亂時刻,加上心理素質不穩的話結局很可能是自取滅亡。

錯誤第二步:飛順手後放膽用頭戴顯示器全程 FPV,飛到忘我的時候竟然穿越到訊號被遮蔽的區域,看不見影像就搞不清楚機子在哪裡,加上沒有事先演練突發救援對策,外加穿越機速度飛快,結局當然很慘!

錯誤第三步:遙控失效,有時候飛稍微遠一點會突然 Failsafe 馬達停止一秒鐘。這個算是硬體系統問題,我是無辜受害著,但卻嚴重影響飛行安全,為此摔了很多很多次,而且摔得不明不白,信心全失。

上面三項問題讓我摔得淒慘兮兮,第一次是 Runcam 領軍直插水泥地,避震板整個脫出四散各地,避震橡膠弄丟了好幾顆,還好 Runcam 夠硬只在鏡頭上留下一個小洞。

為了研究失控現象不停試飛因此接二連三的墜地,摔到六根鋁柱都斷光了,不死心用膠帶纏一纏繼續奮戰。

Runcam 電池用乾了直插系統 5V,螢幕電源用盡就用飛完的電池供電,槳摔斷了馬上換,最後帶著滿滿的影像回家研究。

心理素質問題只能慢慢練習,以後還是乖乖用 Horizon 自穩模式飛行,緊急時切到 Angle 模式保持停懸。

影像傳輸則需要先在飛場觀察好地形地貌,第一次測好飛行距離,確保飛行範圍內視訊不會雪花或中斷。

失控問題比較傷腦筋,事後研究斷訊時距離都不足 100 公尺,這和 S603 宣稱的 1.5~2 公里差太多了,而且發生時機不定,讓人飛得很不安。

為此又進了 F701 和 F801 來測試,測試方法和以前測 DEVO 控的時候一樣,發射機設好油門失控保護後油門開最大放在陽台,接收機油門插一顆伺服機,通電後拿在手上,一旦斷訊伺服機會轉到另一邊,這樣就能在馬路上安全的測試遙控距離了。

就這樣一次次跑進跑出,發現安全遙控距離只有200~300公尺,怎會這樣,那誰敢飛到一公里外靠 FPV 盲飛啊,失控了怎麼辦、砸到人怎麼善了?

再次搜尋茫茫網海,大家都用得好好的少有相同現象,唯一看到幾則是關於 Deviation 使用 DSMX 傳輸模式時有斷訊的問題回報,這現象和我完全相同,但因為通訊協定寫好了不會去改動,聽說 2015 曾經有人重寫 DSMX,但是不清楚有沒有把它放回 Deviation 中。

於是下載最新的 Nightly build,再次測試結果還是一樣,倒是發現 DSM2 穩定多了而且距離比較遠,難道真的和 Deviation 韌體有關?

立馬在網路上找到極其便宜的八動 DSMX 搖控器 FsFly T-i8,到手卻貼著 Stormrc i6S,不過上面多了兩顆旋鈕。

詭異的是網路上找不到任何 T-i8 的說明書,大部分都是 i6S,而且是 OrangeRX 橘子牌的。

看到這麼詭異的訊息,最後發現這些控的外殼和橘子一模一樣,只是貼標不同,塑膠顏色不同,我猜裡面的電路和韌體也一模一樣,出自同一工廠,或是內部工程師拆夥另起爐灶吧。倒是有橘子加持比較放心,至少國外有很多人用。

測試過程讓我氣餒的是那顆 F801 的 DSMX 異常,非常容易受到干擾,害我反覆多做兩天的測試。

我的測試結果是 DSMX 以 T-i8+S603 US247發射功率到了 300 米就斷斷續續,而且測試中途曾經斷訊過,但是 DSM2 就能穩定超過 350 米(我這裡最遠只有這樣),而 DEVO10 使用 Deviation 100W 結果大致相同。

我猜 DSMX 連結速度較快,失控後可以快速連結,但比較容易受到干擾而斷訊 (例如 Wi-Fi);而 DSM2 連結速度慢,有時候甚至要2~3秒,但也因此不易斷線失控。

或許使用 Spektrum 的發射機就沒這問題,但搭配副廠的接收機又難保完全正常,總之,不要使用 DSMX 就好。


 回家看影片,四軸飛起來雖然跟手但錄影起來的畫面卻完全走樣,只覺得畫面晃動很大,有風吹襲的時候自動修正更大,畫面嚴重的上下抖動。

看到網路上很多調整 PID 的討論都用很炫的動態圖形來分析動作,也聽說要深入調整 PID 最好要有 Blackbox 黑盒子,分析起來才準確,於是我又弄了一塊 SD Logger 來用。

這個黑盒子和 MinimOSD 一樣是在 Arduino 開發的開源碼,外型尺寸也相仿,背面是 microSD 記憶卡插槽,一樣連接 FTDI 就能更新韌體。使用方法在開發者網站有詳細說明 - Blackbox flight data recorder

由於這顆是支援 Cleanflight 的新版本,通訊速率可以直接在記憶卡裡面寫入一個 CONFIG.TXT 的檔案,裡面寫 115200 baud,開機後就能設定通訊速率為 115200 了。

不過黑盒子紀錄的資料量和記憶卡速度、飛控板硬體效能還有 Looptime 都有關係,黑盒子預設通訊速率是 115200,然而我記錄起來會有中斷破碎情形,後來調到極限 250000 就幾乎沒有遺漏了,即使 Looptime 設為 1200 也沒關係,可見 Naze32 效能夠強悍。

※ 若是其他硬體不夠快的時候,還有終極方法可以在 CLI 裡面設定 set blackbox_rate_num =1, set blackbox_rate_denom =2,前面是分子,後面是分母,這樣就只會記錄 1/2 的資料量。

我把黑盒子接到 UART1 上,剛開始為了遷就 MSP 速度設比較慢,後來發現可以和 MSP 不同速,於是用最高速率,每次 ARM 之後就會開始記錄所有的飛行資料。

第一次飛行時掃到樹枝摔機,結果記憶卡就飛丟了,原來這個插槽不會卡住記憶卡,而且飛行途中的震動也可能讓記憶卡脫出而無法紀錄,最後索性用一根汰換下來的鋁柱擋住。

飛完把記憶卡插到電腦就能用 Cleanflight - Blackbox Explorer (beta) 來觀看結果,每一次通電會新增一個檔案,每次 ARM 會記錄一段內容,包含陀螺儀和 PID 數值,連遙控改變 PID 都有紀錄,這樣用來分析就非常方便了。

上圖是我的陀螺儀訊號,抖得厲害。後來發現是一根槳受損,換掉後比較平順,但仍有鋸齒狀。

這時候就要動到 Cleanflight 1.10 版的新參數:

gyro_lpf:陀螺儀訊號低通濾波器,Naze32 使用 MPU6050 只能設為 256, 188, 98, 42, 20, 10, 5 Hz,預設值 42,通常設 188,表示過濾掉比 188 更高頻的訊號。

pterm_cut_hz:P 值的高頻切除,預設值 0,通常設 50,表示切除高於 50 Hz 的訊號,雜訊大的機子要降低數值。(不懂這樣和低通濾波有何差別?)

dterm_cut_hz:D 值的高頻切除,預設值 0,通常設 20。

gyro_cut_hz:陀螺輸入的高頻切除,預設值 0,通常設 100。

上面的通常數值是 BorisB 建議的,濾波器太大無法反映細碎修正,但我追求的是平順的操控,因此我把四軸抓在手上邊試邊測,最後設定 gyro_lpf=42, pterm_cut_hz=45, dterm_cut_hz=10,這樣就讓陀螺儀還有 PD 修正的曲線極其平滑。

上面畫面是截自 Cleanflight Blackbox Explorer,雖然也能載入 mp4 的影像疊加,但輸出只有 webm 一種格式,一般撥放器根本沒辦法看也沒辦法編輯。怎麼看也和網路上的影片差異很大,原來大家都經過特別處理。處理的方法要用 Blackbox flight data recorder tools,點擊 Release 就能下載最新版本。

這個轉檔工具要在 Windows 的命令列模式才能執行,開啟命令列提示視窗,使用 DOS 指令,進入 blackbox-tools 資料夾,執行 blackbox_render.exe 程式並加上要開啟的檔案及格式,就會產生一個新的資料夾,裡面存放的是一張張 .PNG 的透明圖檔,例如預設值是 1080P 30 fps 則每秒有 30 張 1920x1080 的圖片,用影片剪輯軟體就能把這些圖檔組成連續影片,再套疊在影片上。

為了方便輸入,我把整個轉檔工具放在 D:\Temp 資料夾內,例如上面圖片中,進入 blackbox-tools 資料夾後,輸入 blackbox_render --index 4 --plot-pid LOG00053.TXT,就能打開 LOG00053.TXT 這個紀錄檔,轉換第四段紀錄,並且打印 PID 統計資料,這樣的結果就和網路上看到的影片一樣了。

不過檔案很大,2"24 的圖檔佔去 870M,轉檔花了很多時間,將來套疊影片時也花時間,電腦負擔很重,真的只是做給別人看的,自己要分析用 Blackbox Explorer 就好。

設好濾波器後重頭操練 PID,網路看了許多教程只有一篇寫得比較具體 Cleanflight PID Tuning,原文同樣很冗長,我把它簡化如下:


何謂PID?

Proportional:修正的力道。若 P 太低則飛機因修正太慢而不易平穩,若 P 太高則反應太快而高速擺動。

Integral:修正稍長時間的細微偏差。若 I 太低則飛行高度會緩慢飄移,若 I 太高則會緩慢擺動。

Derivative:為增加系統穩定而修正的長時間偏移。簡單說就是阻尼效果,緩和 P 的力道。若 P 已穩定則可減少 D 值以加快操作反應。


PID的影響

P:P 越大姿態越穩固,過大會造成高速擺動;P 越小越滑溜,過小無法穩住方位。

I:I 越大越能鎖住角度,減少飄移感;I 越小越容易改變角度,過低會飄移。

D:D 越大修正動作越緩和;D 越小操控越即時。


PID調整法

1. 載入預設值,若可以邊飛邊調整則 I 和 D 都設 0,否則 I 設 0.02,D 設 15。

2. 檢測可用 P 值

    A. 停懸時加大 P 值,直到產生高速擺動或是馬達產生共振聲,這就是可用的最大 P 值。

    B. 將 P 值減半當作穩定停懸P值。

3. 調整 I 值

    停懸時瞬間減油門至 25% 令其準備墜落,再全力推油門接住機子,若機身有任何傾斜則I值太小,若機身會擺動則 I 值太大。

4. 微調 P 值

    航道飛行時盡可能調高 P 值以獲得穩定控制

5. 加入 D 值

    P 和 D 會交互影響需要搭配調整,加大 D 值可以允許更高 P 值以獲得更快反應,但是過高 D 值會讓動作遲鈍,停懸時高度會上下飄移。

6. 調整 TPA


理論上這樣的調法目標很明確,然而實際飛起來卻不一定看得出差異,尤其是 I 和 D 調很大都沒有明顯的差異,直到某天遇到強勁側風才發現搖晃嚴重。總之,還是需要事後慢慢調。

軟體搞定了,硬體也要加強!

減震橡膠一定要套上束線帶,不然每摔必掉,這麼改以後再也沒有弄丟一顆橡膠,重摔之後頂多斷束線帶而已!

Runcam 也用束線帶綁上,但是方向必須是前後綁,正面衝擊時才不會滑出去。後來覺得鏡頭太突出了,把出線孔往後移,讓鏡頭縮到避震版後面。

CCD 換成小板後根本無法靠塑膠圈固定,最後還得縮小塑膠圈直徑,並外加玻纖膠帶增加摩擦力,最後再把鏡頭固定螺絲加長,穿過塑膠圈來固定,這樣摔機就不再脫出了。

上次圖傳綁在下面再用延長線雖然摔機不傷圖傳,但延長線下面突出機板很快就磨斷了,這次把圖傳綁到上板背面,一來天線可以伸得比較高,再則拆機維修比較方便。

最後也是最困擾我的就是傳回影像的品質。

聽說 600mW 可以傳1公里以上,然而我在綠園道繞樹不到一百公尺就偶爾閃出雪花,感覺訊號不強啊,飛得很不放心。

最終還是要實驗才知道,所有可能零件都是嫌犯,首先從天線改起。

剛開始怕摔用套裝搭配的超便宜蘑菇天線,後來換上 Aomway 天線,果然訊號清晰穩定很多,但是飛遠一點還是有雪花。

最後換上最貴的 Fatshark 天線,嗯,好像又更好一點點。

四軸玩到後來終於領悟,我玩的不是技術而是設備,追求的完美其實是建構在設備性能上,有些東西不花錢是買不到的!

不過就算是花了錢,沒找到重點還是一樣出問題。

即使有了肥鯊天線+14dB 平板天線,我到南寮海邊測試,也只能飛到 250 公尺左右,畫面不時夾雜大片雪花,這其中一定還有甚麼地方有問題。

灰心之餘本來還想弄個整套肥鯊來試的,不過摔機整修的時候,慢慢看到問題。

一般人的天線通常都直接插在圖傳上,而穿越機重量輕所以都搭配小型輕量化的圖傳,小到連固定的地方都沒有,只能用雙面膠+束線帶綁在機板上,摔機時天線扭轉自然也會折到圖傳電路板,這樣圖傳能撐多久?另外是圖傳配的線組線徑都很細,沒有綁緊晃久了是不是會鬆動?

最後把這些疑惑全部排除,用了新的 QX600 圖傳+線組,把天線用延長線鎖在上層板,再出發,終於有想哭的 FU,原來圖傳真的可以這樣清晰,原來遙控可以控這麼遠不會失控。

影片中為了安全還是使用 Horizon 模式,但是飛航道就看出缺點了,為了維持前進的角度,搖桿必須準確地推在定點,偏偏指數曲線讓邊緣區域變量很大,很難穩定維持在一定的角度,只見我在向前飛行時不斷修正前傾角度,就像暈船一樣搖頭晃腦。

結論是 Acro 模式飛起來比較好看,但我用 Acro 低空飛行則老是摔機,軟硬體搞好了,最後要搞的竟是我自己!

沒想到一台小小四軸飛行器讓我折騰這麼久,沒想到看似簡單的飛行器卻包藏如此學問。

慶幸我決定自己組裝,不然怎會知曉這麼底層的技術,現在也終於懂得別人在討論什麼了!

這篇文章是我兩個月來不停的揮汗浸盈累積的經驗,即使在寫這篇文章的時候也需要不斷重新翻找文獻資料才寫得出來,若不記錄下來,將來恐怕又得重新來過。

慶祝我終於搞懂四軸穿越機的時候,特發此文以資紀念!