將 Betaflight BlackBox 遙測資料從 TFC1 串流到 Raspberry Pi 進行分析與時間同步
BetaFlight 支援 BlackBox 飛行資料記錄到三個目標:內部閃存、microSD 卡和 UART。TFC1 沒有配備 microSD 插槽,而 RP2354B 的內部閃存同時用於韌體和 EEPROM 設定。這使得 UART 成為唯一實用的選項。
出現了兩種部署場景:
獨立運作:OpenLog 或 OpenLager 模組連接到 TFC1 的 J9 UART 標頭(PIOUART0)。這些是廉價的硬體裝置(淘寶上不超過 300 新台幣),可透過 UART 接收 BlackBox 資料並將其寫入 microSD 卡作為單次飛行日誌檔案。
Raspberry Pi 同伴電腦:與 Pi 配對時,TFC1 的 J9 連接到 Pi 的 UART3。Pi 上的一個輕量級 Node.js blackbox 日誌記錄服務(blackbox-logger)接收資料 — 本質上是 OpenLog 協議的軟體實現,簡化以專注於核心檔案寫入功能。
BetaFlight BlackBox 日誌包含時間戳記,但 TFC1 沒有即時時鐘(RTC)。沒有 RTC 時,飛行控制器的內部計時器會漂移,使得日誌時間戳記在分析時不可靠 — 特別是當關聯多次飛行或同伴電腦日誌的資料時。
評估了幾種方法來進行時間同步:
Oscar Liang 的 BlackBox 時間戳記同步指南透過無線電遙控器進行。地面站的 OpenTX Lua 腳本將時間戳記注入 BlackBox 串流。然而,這種方法需要驗證與我們 ELRS 接收器設定的相容性。
當 TFC1 與 Raspberry Pi 配對時,Pi 可以使用 Master System Protocol 的 MSP_SET_RTC 命令來設定飛行控制器的時間。這需要仔細處理時區,但提供了一個乾淨的中心化時間來源。
Pi 自己的時間可以透過以下方式同步:
time-sync-py,該程式更新 Pi 的系統時鐘,然後透過 MSP 同步 TFC1這兩種方法都需要經過現場驗證,特別是 GPSD 方案。
對於開發和測試,BlackBox 模式設定為 “ALWAYS” 而不是預設的 “NORMAL”。這會持續記錄資料,即使在地面也能記錄,使得在不實際飛行的情況下除錯通訊問題更容易。
serial PIOUART0 128 115200 115200 0 115200
set acc_calibration = -48,-20,-122,1
set blackbox_device = SERIAL
set blackbox_mode = ALWAYS
set debug_mode = FFT_FREQ
PIO-UART 也需要韌體修復才能正確同時支援 MSP(用於設定)和 BlackBox(用於記錄)協議。這個修復記錄在專案的 Gitea 實例上的專屬問題中。
UART 上的 BlackBox 資料遵循 OpenLog 命令協議。飛行控制器發送特殊的跳脫序列來控制檔案操作 — 建立新的日誌檔案、刷新資料和重置緩衝區。Pi 上的 blackbox-logger 服務實現了這些命令的核心子集,以實現可靠的日誌捕捉。
對於生產用途,可以實現完整的 OpenLog 命令集(記錄在 SparkFun 的綁線指南中),以實現更豐富的檔案管理功能,如命名約定和自動檔案輪換。