# 通过原始 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(无人机)一侧:

在 RX(地面站侧):

如果您不需要大功率卡,您可以使用任何带有 rtl8812au 芯片组。

# 硬件改造

Alpha AWUS036ACH 是一款高功率板卡,在传输时会消耗过多电流。如果用 USB 给它供电,大多数 ARM 板的端口都会重置。因此,它必须以两种方式之一直接连接到 5V BEC:

  1. 定制 USB 电缆 (剪切 +5V 将 USB 插头上的导线连接至 BEC (打开新窗口)
  2. 剪一个 +5V 在靠近 USB 端口的 PCB 上接线,然后将其连接到 BEC(如果有疑问,请勿这样做,而应使用定制电缆)。此外,我建议在电源和地线之间添加 470uF 的低 ESR 电容器(如 ESC 的电容器),以过滤电压尖峰。注意 接地回路 (打开新窗口) 当使用多条接地线时。

# 软件设置

设置(Linux)开发计算机:

  1. 安装 libpcap解钠 开发库并安装 python2.7 + python-twisted 打包。
  2. 下载 wifibroadcast 信号源 (打开新窗口).
  3. 参见 设置 HOWTO (打开新窗口) 如何构建 debian、rpm 或 tar.gz 软件包并进行配置。

# 无人机设置

  1. 设置摄像机输出 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
    
  2. 按照以下步骤为无人机配置 WFB 设置 HOWTO (打开新窗口)

  3. 配置自动驾驶仪(px4 堆栈),以 1500kbps 输出遥测数据流(其他 UART 速度与 NEO2 分频器不匹配)。设置 mavlink-router (打开新窗口) 将 MAVLink 数据包路由到/从 WFB:

    [UdpEndpoint wifibroadcast] 模式 = 正常 地址 = 127.0.0.1 端口 = 14550
    

# 地面站设置

  1. 运行 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
    
  2. 按照以下步骤为地面站配置 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 时序 (打开新窗口)

董事会 优点 缺点
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

  1. 制作预制图像。欢迎拉取请求。
  2. 使用不同的卡/天线进行飞行测试。