# 通过原始 WiFi 无线电进行远距离视频流和遥测
本页介绍了如何设置带有摄像头(罗技 C920 或 RaspberryPi 摄像头)的配套计算机,以便将视频流从无人飞行器传输到地面计算机,并显示在屏幕上。 QGroundControl.该机制还提供双向遥测链路(即类似 SiK 无线电)。这种设置在非连接(广播)模式下使用 WiFi,而软件来自于 Wifibroadcast 项目 (打开新窗口).
备注
使用前 Wifibroadcast 检查监管机构是否允许在您的国家使用这种 WiFi。
# Wifibroadcast 概览
Wifibroadcast 项目 提供视频和遥测传输,使用低级 WiFi 数据包,以避免普通 IEEE 802.11 协议栈的距离和延迟限制。
的高水平效益 Wifibroadcast 包括
- 1:1 映射 RTP 到 IEEE 802.11 数据包,以缩短延迟(不会序列化为字节蒸汽)。
- 智能 FEC 支持(如果 FEC 管道无间隙,则立即向视频解码器发送数据包)。
- 双向 MAVLink 遥测技术 (打开新窗口).可用于 MAVLink 上/下行和视频下行链路。
- 自动 TX 分集(根据 RX RSSI 选择 TX 卡)。
- 流加密和验证 (解钠 (打开新窗口)).
- 分布式运行。它可以从不同主机上的卡收集数据。因此,你不会受限于单一 USB 总线的带宽。
- 聚合 MAVLink 数据包。不会为每个 MAVLink 数据包发送 WiFi 数据包。
- 增强型 OSD (打开新窗口) 用于 Raspberry PI(在 PI Zero 上占用 10% 的 CPU)。
- 兼容任何屏幕分辨率。支持 PAL 到 HD 缩放的宽高比校正。
更多信息见 常见问题 下图
# 硬件设置
硬件设置由以下部分组成:
在 TX(无人机)一侧:
- NanoPI NEO2 (打开新窗口) (和/或 Raspberry Pi(如果使用 Pi 摄像头)。
- 罗技摄像头 C920 (打开新窗口) 或 Raspberry Pi 摄像头 (打开新窗口).
- WiFi 模块 alpha awus036ach (打开新窗口).
在 RX(地面站侧):
- 任何装有 Linux 的计算机(在 Fedora 25 x86-64 上测试)。
- WiFi 模块 alpha awus036ach (打开新窗口).湖泊 wifibroadcast wiki > WiFi 硬件 (打开新窗口) 了解有关支持模块的更多信息。
如果您不需要大功率卡,您可以使用任何带有 rtl8812au 芯片组。
# 硬件改造
Alpha AWUS036ACH 是一款高功率板卡,在传输时会消耗过多电流。如果用 USB 给它供电,大多数 ARM 板的端口都会重置。因此,它必须以两种方式之一直接连接到 5V BEC:
- 定制 USB 电缆 (剪切
+5V
将 USB 插头上的导线连接至 BEC (打开新窗口) - 剪一个
+5V
在靠近 USB 端口的 PCB 上接线,然后将其连接到 BEC(如果有疑问,请勿这样做,而应使用定制电缆)。此外,我建议在电源和地线之间添加 470uF 的低 ESR 电容器(如 ESC 的电容器),以过滤电压尖峰。注意 接地回路 (打开新窗口) 当使用多条接地线时。
# 软件设置
设置(Linux)开发计算机:
- 安装 libpcap 和 解钠 开发库并安装 python2.7 + python-twisted 打包。
- 下载 wifibroadcast 信号源 (打开新窗口).
- 参见 设置 HOWTO (打开新窗口) 如何构建 debian、rpm 或 tar.gz 软件包并进行配置。
# 无人机设置
设置摄像机输出 RTP 流:
a.罗技摄像头 C920:
gst-launch-1.0 uvch264src device=/dev/video0 initial-bitrate=4000000 average-bitrate=4000000 iframe-period=3000 name=src auto-start=true \ src.vidsrc ! queue ! video/x-h264,width=1280,height=720,framerate=30/1 ! h264parse ! rtph264pay ! udpsink host=localhost port=5602
b.RaspberryPi 摄像头:
raspivid --nopreview --awb auto -ih -t 0 -w 1280 -h 720 -fps 49 -b 4000000 -g 147 -pf high -o - | gst-launch-1.0 fdsrc ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=5602
按照以下步骤为无人机配置 WFB 设置 HOWTO (打开新窗口)
配置自动驾驶仪(px4 堆栈),以 1500kbps 输出遥测数据流(其他 UART 速度与 NEO2 分频器不匹配)。设置 mavlink-router (打开新窗口) 将 MAVLink 数据包路由到/从 WFB:
[UdpEndpoint wifibroadcast] 模式 = 正常 地址 = 127.0.0.1 端口 = 14550
# 地面站设置
- 运行 QGroundControl 或使用以下命令解码视频:
gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \ ! rtph264depay ! avdec_h264 ! clockoverlay valignment=bottom ! autovideosink fps-update-interval=1000 sync=false
- 按照以下步骤为地面站配置 WFB 设置 HOWTO (打开新窗口).
# 调整参数无线电设置
在默认设置下,WFB 使用无线电信道 165(5825 MHz),宽度为 20MHz,MCS #1(QPSK 1/2)和长 GI。这可提供 ~7 mbit/s 的 有效 速度(即经过 FEC 和数据包编码后的可用速度)为 双向 总之,因为 WiFi 是半双工的。因此,它适用于 720p@49fps (4 mbit/s)视频下行流 + 两个全速遥测流(上行和下行)。如果您需要更高的带宽,可以使用其他 MCS 指数(例如 2 或更高)和/或 40MHz 信道。
# 天线和分集
在简单的情况下,您可以使用线性全向天线(与 WIFI 卡捆绑在一起)或环形天线(与 WIFI 卡捆绑在一起)。圆极化盖叶天线 (打开新窗口)极化)。如果要建立长距离链接,可以使用多个带有定向和全向天线的无线适配器。开箱即支持多个适配器的 TX/RX 分集(只需添加多个网卡到 /etc/default/wifibroadcast
).如果 WiFi 适配器有两根天线(如 Alfa AWU036ACH),TX 分集可通过以下方式实现 STBC (打开新窗口).目前不支持带 4 个端口的板卡(如 Alfa AWUS1900)进行 TX 分集(只支持 RX)。
# 常见问题
Q: 与原来的 wifibroadcast 有什么不同?
A: 最初版本的 wifibroadcast 使用字节流作为输入,并将其分割为固定大小(默认为 1024)的数据包。在这种方案下,如果无线电数据包丢失(FEC 无法纠正这种情况),结果就是数据流中出现随机/意外的漏洞。如果数据协议无法抵御这种随机擦除,这种情况就会特别糟糕。
新版本改写为使用 UDP 作为数据源,并将一个 UDP 源数据包打包成一个无线电数据包。无线电数据包的大小现在可变,取决于有效载荷的大小。这大大减少了视频延迟。
Q: 使用 wifibroadcast 可以传输什么类型的数据?
A: 数据包大小为 1466 的任何 UDP。例如 RTP 或 MAVLink 内的 x264。
Q: 什么是传输保证?
A: Wifibrodcast 使用 FEC(前向纠错),默认设置下可从 12 个数据包块中恢复 4 个丢失的数据包。您可以根据自己的需要进行调整(TX 和 RX 同时进行!)。
注意 不要使用遥控发射机工作的波段!或正确设置 RTL 以避免模型丢失:
Q: 只支持 Raspberry PI 吗?
A: Wifibroadcast 与任何 GPU 都无关 - 它使用 UDP 数据包。但要获得 RTP 流,您需要一个视频编码器(将摄像机的原始数据编码为 x264 流)。在我的例子中,RPI 仅用于视频编码(因为 RPI Zero 太慢,无法做其他事情),所有其他任务(包括 Wifibroadcast)都由其他板卡(NanoPI NEO2)完成。
# 理论
Wifibroadcast 使 WiFi 卡进入监控模式。该模式允许发送和接收任意数据包,无需关联和等待 ACK 数据包。 监控模式下 IEEE 802.11 硬件的注入能力和媒体访问分析 (打开新窗口) 802.11 时序 (打开新窗口)
# UAV 建议使用哪些 ARM 板?
董事会 | 优点 | 缺点 |
---|---|---|
Raspberry Pi Zero (打开新窗口) | - 庞大的社区 - 摄像头支持 - 采用 OMX API 的硬件视频编码器/解码器。 | - 在美国以外很难买到(运费 >> 其价格) - CPU 运行速度慢 - 只有一条 USB 总线 - 512MB SDRAM |
Odroid C0 (打开新窗口) | - 快速 CPU - EMMC - 1GB SDRAM | - 对无线电干扰非常敏感 - 主线内核不支持 - 高成本 - 硬件视频编码器损坏 - 印刷电路板质量差(太薄,接地引脚没有 热溢流 (打开新窗口)) |
NanoPI NEO2 (打开新窗口) | - ARM 64 位 CPU - 非常便宜 - 由主线内核支持 - 3 条独立的 USB 总线 - 1Gbps 以太网端口 - 3 个 UART - 外形非常小巧 - 抗无线电干扰 | - 小型社区 - 512MB SDRAM - 无摄像头接口 |
本文选择使用 Pi Zero 作为相机板(视频编码),NEO2 作为无人机主板(wifibroadcast、MAVLink 遥测等)。
# TODO
- 制作预制图像。欢迎拉取请求。
- 使用不同的卡/天线进行飞行测试。