????????openipc 的定位是為各種模塊提供底層的驅動和linux最小系統,openipc 是采用buildroot系統編譯而成,因此二次開發能力有點麻煩。為啥openipc 會用于無人機圖傳呢?因為openipc可以將現有的網絡攝像頭ip-camera模塊直接利用起來,從而降低硬件成本,但是記住,openipc 的核心是處理各種廠家的攝像頭的最小系統,用于無人機圖像傳輸的應一個重要應用是wfb,wifi-broadcast,此時采用的是wfb-ng,新一代的wifi廣播技術。
? ? ? ? ?如果你想用網絡攝像頭,淘寶搜索 網絡攝像頭,選擇支持wifi 模塊的,但是購買不要選擇焊接WiFi模塊,?主芯片和sensor 的支持請參考文章wiki,注意留意是否暴漏串口刷機的引腳(RX,TX,GND),上閑魚搜索創維A6 wifi 網卡,焊接wfi-USB 接口,openipc 官網上刷機FPV固件即可支持。
? ? ? ? 對于無人機圖傳看來說,本文將采用wfb-ng技術,將數據傳輸出去。openipc 提供了圖像的數據,雖然openipc 也有4G的方案,但是受制于主芯片頻率和二次開發的方便性,采用了瑞芯微的主芯片,嗶哩嗶哩上也有采用rv1103-rv1106的方案,但是考慮后期AI加入,因此采用radxa zero 3E 方案。,切記3e 安裝官方的debian 11 的系統,其它系統暫不考慮,整體架構如下:
1. wfb-ng 以及8812eu 驅動安裝
?1.1 安裝 8812EU 驅動
?需要安裝dkms, 這是一個驅動包安裝軟件
sudo apt-get install -y dkms bc rpm libelf-dev
下載8812EU 包 github
sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile
sed -i 's/CONFIG_PLATFORM_ARM64_RPI = n/CONFIG_PLATFORM_ARM64_RPI = y/g' Makefile
sudo? ./dkms-install.sh
1.2 安裝wfb-ng
下載wfb-ng,安裝必要的編譯包
sudo apt install -y libpcap-dev libsodium-dev libevent-dev debhelper dh-python python3-all python3-pip python3-pyroute2 python3-future python3-twisted python3-msgpack python3-stdeb python3-all-dev python3-setuptools python3-jinja2 python3-serial virtualenv
編譯,最重要的是編譯過程需要下載大量的額github的內容因此需要翻墻
git設置ssh 代理(非常重要,如果沒有代理不建議編譯,建議直接下載 我編譯的包 deb)
git config --global http.proxy 'http://123.45.67.89:8080'
git config --global https.proxy 'https://123.45.67.89:8080'
編譯 make deb
編譯后會產生drone.key? gs.key, 沒有產生可以運行script/wfb_keygen 生成,將drone.key 和gs.key復制到? /etc/
安裝 deb
sudo dpkg -i deb_dist/wfb-ng_24.11.29.69559-1_arm64.deb
wfb-ng是通過python的安裝包啟動
設置? /etc/wifibroadcast.cfg
sudo tee /etc/wifibroadcast.cfg > /dev/null <<EOF
[common]
wifi_channel = 149 ? ? # 149 -- radio channel @5745 MHz, range: 5735–5755 MHz, width 20MHz
wifi_region = 'BO' ? ? # Your country for CRDA (use BO or GY if you want max tx power)
#wifi_power = 3000[drone_mavlink]
# use autopilot connected to /dev/ttyUSB0 at 115200 baud:
# peer = 'serial:ttyUSB0:115200'# Connect to autopilot via malink-router or mavlink-proxy:
peer = 'listen://0.0.0.0:14550' ? # incoming connection
# peer = 'connect://127.0.0.1:14550' ?# outgoing connection[drone_video]
peer = 'listen://0.0.0.0:5602' ?# listen for video stream (gstreamer on drone)EOF
設置網卡的一些參數,用于后期提升功率
sudo cat > /etc/modprobe.d/wfb.conf <<EOF
# blacklist stock module
blacklist 88XXau
blacklist 8812au
blacklist rtl8812au
blacklist rtl88x2bs
# maximize output power, see note below
options 88XXau_wfb rtw_tx_pwr_idx_override=30
options 8812eu rtw_tx_pwr_by_rate=0 rtw_tx_pwr_lmt_enable=0
EOF
wfb-ng 設置自啟動
設置開機自動啟動
sudo systemctl enable wifibroadcast.service
sudo systemctl enable wifibroadcast@drone.service
手動啟動
sudo systemctl start wifibroadcast@drone.service
wfb-ng 啟動流程如下
1. 啟動后會去讀取環境變量獲取wifi設備名稱?/etc/default/wifibroadcast
該腳本會調用? wifi-nics 遍歷設備8812au/ 8812eu名稱并賦值給環境變量WFB_NICS。(wifi-nics安裝在/usr/bin/)
2.執行exec? python 調用包 wfb-server, 此時會讀取/etc/wifibroadcast.cfg 文件,
該文件會 設置wifi 通道 wifi_channel??wifi_region?wifi_power?
sudo iw reg set <wifi_region>
sudo iw <wlan> set monitor otherbss
sudo iw <wlan> set channel <same_channel> <10MHz>
sudo iw dev wlan0 set txpower fixed <mBm>
3,緊接著會根據 /etc/wifibroadcast.cfg?
drone_mavlink drone_video 啟動天空端服務
1. video? 用于將本地的udp 視頻流廣播出去
2. mavlink 可以使用串口或者mavlink-router 進行轉發
3.還有一個tun 數據通道的用于發送信息
同樣的 gs_mavlink 和gs_video 啟動地面端服務,數據流方向與天空端相反
本地啟動視頻流
1.gst 轉發rtsp視頻流
gst 將openipc 啟動的視頻流rtsp 轉發到本地的udp 5602 端口上
gst-launch-1.0 rtspsrc location=rtsp://root:12345@192.168.1.10/stream=0 ! udpsink port=5602
?