透過 MSP 代理和 WebSockets 遠端控制

透過 MSP 代理和 WebSockets 遠端控制

使用 WebSocket 上的 MSP 協議遠端控制 TFC1 飛行控制器 — 啟用自訂地面站和自主控制

超越 Configurator

BetaFlight 的 Master System Protocol (MSP) 是為與 BetaFlight Configurator 應用程式一起使用而設計的 — 一個 Chromium 基於的桌面工具,透過 USB 序列與飛行控制器通訊。但對於我們的用例,我們需要一種方式從 Raspberry Pi 同伴電腦向 TFC1 發送 RC 指令,而不受 USB 束縛。

解決方案:一個將 WebSocket 連線橋接到 TFC1 序列端口的 MSP 代理。

協議堆疊

架構如下:

[遠端客戶端] <-> [WebSocket] <-> [RPi 上的 MSP 代理] <-> [UART/USB] <-> [TFC1]

MSP 代理監聽 WebSocket 端點,並將傳入的 MSP 訊息翻譯為發送到飛行控制器的序列協議幀。回覆流向相反方向。這允許任何會說 WebSocket 的客戶端(包括網頁瀏覽器、Node.js 腳本或 Python 應用程式)向 TFC1 發送 MSP 指令。

透過 MSP v1 發送 RC 指令

關鍵功能是 SET_RAW_RC,一個 MSP v1 指令,將搖桿位置直接發送到飛行控制器。這與 BetaFlight Configurator 的手動 RC 標籤頁使用的協議相同 — 四個通道值(副翼、升降、油門、方向舵)以 BetaFlight 預期的更新速率發送。

結合用於將光學流資料從 PiCamera 發回飛行控制器的 MSP2_SENSOR_OPTICALFLOW_MT 協議(MSP v2),完整的迴路已建立:

光學流 (PiCamera -> PX4-Flow 演算法 -> MSP v2 -> TFC1)
RC 指令    (WebSocket -> MSP v1 -> TFC1)

示範

一段影片演示了完整系統運作:來自 Raspberry Pi 攝影機的光學流資料經過處理並透過 MSP 代理發送到 TFC1,同時 RC 搖桿指令通過相同的 WebSocket 連接發送。飛行控制器同時回應兩種輸入,證明了這種架構對於自主懸停和位置保持的可行性。

開放原始碼考量

MSP 代理實作是一個輕量級 Node.js 服務,可能適合開放原始碼。它填補了 BetaFlight 生態系(設計用於 USB 序列連線)和網路化同伴電腦架構之間的空白,啟用了以下用例:

  • 自訂基於網頁的地面站
  • 在同伴電腦上運行的自主飛行腳本
  • 與 ROS2 整合以進行進階任務規劃
  • 透過網路或網際網路遠端操作(考慮適當的延遲)

開發期間討論的 PX4 埠設計表明,類似的代理方法可以與 PX4 的 MAVLink 協議一起工作,為使用 PX4/ArduPilot 堆疊而非 BetaFlight 的團隊提供並行路徑。

有任何問題?需求?建議?

我們期待聽到您的聲音!

您正在尋找