Holybro Pixhawk Raspberry Pi CM4 底板與 PX4 乙太網路通訊設定完整教學
本教學詳細說明如何設定 Holybro Pixhawk 6X 搭配 Raspberry Pi CM4 底板,透過乙太網路建立通訊連線,並使用 PX4 的 netman 模組配置靜態 IP、發布 MAVLink 資料,最終以 MAVSDK-Python 在 CM4 上接收無人機遙測數據。

文章重點
- Holybro Pixhawk 6X 透過 PX4 的 netman 模組,以 SD 卡上的 net.cfg 檔案設定靜態 IP 192.168.0.4 實現乙太網路通訊
- CM4 與 Pixhawk 6X 之間需使用 8-pin 轉 4-pin 連接線建立實體乙太網路連接
- MAVLink 資料透過 UDP 14540 連接埠從 Pixhawk 發送至 Raspberry Pi CM4
- 可在 QGroundControl 的 MAVLink Console 中直接執行 netman show 與 netman update 指令管理網路設定
- CM4 端可安裝 MAVSDK-Python 函式庫,透過網路程式化接收並處理無人機遙測資料
摘要
設定乙太網路(Ethernet)就像在拼拼圖,要讓所有元件就定位,你需要將每個系統配置在同一個 IP 網段中。這確保了每個裝置都擁有唯一的 IP 位址,並能找到彼此進行通訊。
在今天的教學中,我將使用 Holybro 友情提供的 Pixhawk 6X + Raspberry Pi CM4 底板進行示範,但以下教學適用於任何連接 CM4 的 Pixhawk 飛控。
你可以選擇依靠 DHCP 伺服器自動分配 IP 位址,也可以手動為網路上的每個系統設定靜態位址。
在本範例中,我們將系統設定在 192.168.0.XXX 網段內使用靜態 IP 位址。Holybro Pixhawk 6X 使用 192.168.0.4,而電腦端則使用 192.168.0.1。如果你想加入隨行電腦或其他系統,只需用類似的方式分配靜態位址即可。
提醒一下:這裡的網路設定原理跟一般家用或商用網路並無太大差別,建議先具備基本的 IP 網路知識。
Pixhawk 與 PX4 的網路設定
建立好乙太網路的基礎後,接下來要介紹主角——PX4 的 netman 模組,它負責管理整個網路設定。
網路設定的核心是存放在 SD 卡上的設定檔 /fs/microsd/net.cfg。這個文字檔以 name=value 的格式逐行列出各項設定。典型的設定檔如下:
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.0.4
NETMASK=255.255.255.0
ROUTER=192.168.0.254
DNS=192.168.0.254
各參數說明如下:
- DEVICE:介面名稱,預設為 eth0
- BOOTPROTO:取得 PX4 IP 位址的協定,可選 DHCP、static 或 fallback(先嘗試 DHCP,失敗則使用靜態位址)
- IPADDR:靜態 IP 位址(BOOTPROTO 為 static 或 fallback 時使用)
- NETMASK:子網路遮罩
- ROUTER:預設路由器位址
- DNS:DNS 伺服器位址
透過 QGroundControl 操作 netman
- 使用 USB 線將飛控連接到電腦
- 開啟 QGroundControl > Analyze Tools > MAVLink Console(需使用 FC 連接埠)。你也可以使用 MAVLINK shell
- 先用
netman show指令確認目前設定:
nsh> netman show
DEVICE=eth0
BOOTPROTO=static
NETMASK=255.255.255.0
IPADDR=192.168.0.3
ROUTER=192.168.0.254
DNS=192.168.0.254
如果需要更新設定,建議直接寫入設定檔。在 MAVLink Console 輸入以下指令:
nsh> echo DEVICE=eth0 > /fs/microsd/net.cfg
nsh> echo BOOTPROTO=static >> /fs/microsd/net.cfg
nsh> echo IPADDR=192.168.0.4 >> /fs/microsd/net.cfg
nsh> echo NETMASK=255.255.255.0 >> /fs/microsd/net.cfg
nsh> echo ROUTER=192.168.0.254 >> /fs/microsd/net.cfg
nsh> echo DNS=192.168.0.254 >> /fs/microsd/net.cfg
接著執行以下指令更新網路設定:
nsh> netman update -i eth0
系統會使用更新後的網路設定重新啟動。設定完成後就可以拔除 USB 連接線了。
透過乙太網路發布 MAVLink
完成網路設定後,還需要將乙太網路連接埠設定為傳輸 MAVLink(未來的文章也會介紹 XRCE-DDS)。
乙太網路連接埠的設定決定了序列連結的屬性,包括串流的 MAVLink 訊息集合、資料速率、遠端系統可連線的 UDP 連接埠等。
PX4 能夠透過 Pixhawk 上的幾個預定義連接埠發布遙測資料,通常用於連接地面站或其他 MAVLink 元件。可使用以下參數進行設定:
一般而言,隨行電腦會使用 14540 連接埠(而非 14550),並串流 Onboard 設定檔中指定的 MAVLink 訊息集合。你可以將 MAV_2_REMOTE_PRT 和 MAV_2_UDP_PRT 設為 14540,MAV_2_MODE 設為 2(Onboard)。不過使用 GCS 設定檔同樣可以運作。
更多關於 MAVLink 序列埠設定的資訊,請參閱 PX4 官方的 MAVLink Peripherals 文件。
連線測試
確認 Pixhawk 6X 已透過乙太網路線連接到區域網路後,在同一網路的電腦上開啟 QGroundControl。如果 QGC 在相同網段,通常會自動連接到飛控。若未自動連接,可手動設定:
- 進入「Connect」面板,點擊「Add」
- 選擇「UDP」選項
- 輸入 Pixhawk 6X 的靜態 IP 位址(本範例為 192.168.0.4)
- 填入適當的連接埠號碼
- 點擊「Connect」
連線成功後,你就能看到遙測資料串流,並可向 Pixhawk 6X 發送指令。
在 Raspberry Pi CM4 上訂閱資料
CM4 與 Pixhawk 的強力組合
將隨行電腦與飛控配對使用,能為無人機帶來影像處理、障礙物迴避甚至機器學習等進階功能。
建立實體網路連接
要在 CM4 與飛控之間建立乙太網路連接,需使用 8-pin 轉 4-pin 的連接線將兩者實體連接。
CM4 網路設定
由於此配置中沒有 DHCP 伺服器,需手動設定 IP。首先透過 SSH 連接到 CM4(連接 CM4 的 WiFi 或使用 WiFi 無線網卡)。插入乙太網路線後,eth0 網路介面會從 DOWN 切換到 UP。
使用以下指令檢查狀態:
ip address show eth0
也可以手動啟用:
sudo ip link set dev eth0 up
系統會自動設定一個鏈路本地位址,例如:
ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.0.3/24 brd 192.168.255.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::yyyy:yyyy:yyyy:yyyy/64 scope link
valid_lft forever preferred_lft forever
這表示 CM4 的乙太網路 IP 為 192.168.0.3(你的情況可能不同)。
網路連通測試
從 CM4 的 Linux 終端機 ping Pixhawk:
ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4) 56(84) bytes of data.
64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=0.188 ms
64 bytes from 192.168.0.4: icmp_seq=2 ttl=64 time=0.131 ms
64 bytes from 192.168.0.4: icmp_seq=3 ttl=64 time=0.190 ms
64 bytes from 192.168.0.4: icmp_seq=4 ttl=64 time=0.112 ms
--- 192.168.0.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 77ms
從 QGC 的 MAVLink Console ping CM4:
nsh> ping 192.168.0.3
PING 192.168.0.3 56 bytes of data
56 bytes from 192.168.0.3: icmp_seq=0 time=0 ms
56 bytes from 192.168.0.3: icmp_seq=1 time=0 ms
...
10 packets transmitted, 10 received, 0% packet loss, time 10 ms
透過網路發布 MAVLink
需要設定 MAVLink 實例將流量發送到 CM4 的 IP。作為初步測試,可執行:
nsh> mavlink start -o 14540 -t 192.168.0.4
這會將 MAVLink 流量透過 UDP 發送到 14540 連接埠(MAVSDK/MAVROS 預設埠)及 192.168.0.4 位址,任何程序都可以監聽該預設埠接收資料。
使用 MAVSDK-Python 透過網路撰寫 Python 腳本
設定完成後,就可以在 CM4 上開發程式,透過網路接收 MAVLink 遙測資料。對於簡單腳本,最佳方式是使用 MAVSDK-Python 函式庫。
以下範例使用 MAVSDK-Python 專案中的 "tune" 範例,可直接在 Pixhawk 硬體上播放音調:
python3 -m pip install mavsdk
wget https://raw.githubusercontent.com/mavlink/MAVSDK-Python/main/examples/tune.py
chmod +x tune.py
./tune.py
詳細的安裝與設定說明,請參考 MAVSDK-Python 的官方文件。
結語
以上就是 Holybro Pixhawk 6X 搭配 Raspberry Pi CM4 底板透過乙太網路與 PX4 通訊的完整設定教學。從網路設定、MAVLink 串流到 MAVSDK-Python 開發,涵蓋了從基礎到應用的完整流程。希望對你的無人機開發專案有所幫助!
原文來源: 查看原文
常見問題
Newsletter
訂閱低空產業電子報
每日精選低空經濟與無人機產業新聞,直送您的信箱。
本文由 LAETimes 編輯部審核發佈 ·


