









gr-air-modes 是一个开源的软件定义无线电(SDR)接收器,用于解析飞机的 Mode S 应答器信号,包括 ADS-B 报告。它基于 Gnuradio 框架,支持 USRP 和 RTLSDR 等设备,可将信号处理后以多种格式输出。
项目地址:https://github.com/bistromath/gr-air-modes/tree/master
由于是老 gnuradio 项目,因此需要用 docker,项目提供了 dockerfile 文件,因此直接可以构建:
# 构建的命令
systemctl start docker
docker build -t ubuntu:gr-air-modes .
# 以后每次启动的命令
systemctl start docker
xhost -
xhost +local:docker
docker run -it --rm \
--net=host \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /dev/bus/usb/:/dev/bus/usb/ \
-v /home/btfz/Desktop/B210:/home/gnuradio/B210 \
--privileged \
ubuntu:gr-air-modes bash
export UHD_IMAGES_DIR=/home/gnuradio/B210/B210_images/
uhd_find_devices
安装好之后可以用 modes_rx --help 来看看是否安装成功。
案例 1:基础模式 - 接收并在终端显示航班数据
这是最基本的用法,通过 USRP B210 接收 1090MHz ADS-B 信号,并在终端实时显示解析后的航班信息。
modes_rx -s uhd -f 1090000000 -g 40 -l 30.24661575,119.95823993
参数说明:
-s uhd:指定使用 USRP 设备(uhd 是 USRP 硬件驱动的标识)
-f 1090000000:设置接收频率为 1090MHz(ADS-B 信号的标准频率)
-g 40:设置 RF 增益为 40dB(USRP B210 增益范围建议 0-76dB,可根据信号强度调整)
-l 35.14218,133.55393:设置接收地点的 GPS 坐标(示例为杭州,需替换为你的实际位置)
运行后,终端会实时输出附近飞机的信息(如航班号、高度、速度、经纬度等)。
输出格式的基本结构:
(信号强度 时间戳) 消息类型描述 [附加信息]
(-47 24.68509747) No handler for message type 24 from 620783
(-47 27.77715472) Type 4 from 3b10a2 at 18775ft (SPI)
(-46 36.21386772) Type 0 from 9ff8f2 at 106700ft (speed 300-600kt)
(-50 41.09071772) Type 5 from 76d8bf with ident 4510 (GROUND ALERT)
(-46 193.36927622) Type 20 link capability report from 231f72: ACS: 0x5e863, BCS: 0xae6b, ECS: 0x6b, continues 6 at 95400ft
案例 2:输出数据到 Google Earth(KML 文件)
如果需要在 Google Earth 中可视化飞机位置,可将数据输出为 KML 文件:
modes_rx -s uhd -f 1090000000 -g 45 -l 30.24661575,119.95823993 -K aircrafts.kml
参数说明:
1)需要在 aircrafts.kml 同目录下放置一个 airports.png 图片,表示飞机,同时修改 kml.py 文件对应的条目,为 ./airports.png(当然也可以手动编辑 /usr/local/lib/python3.6/dist-packages/air_modes/kml.py 将其中的 \n\t\t\t<Icon><href>airports.png</href></Icon> 去掉,采用默认的图标)。此外,网页端的 google earth 似乎不支持自定义的 png 图标,桌面端的需要仔细和对图标的朝向,才能达到想要的效果,下图是个例子。

2)我研究了 kml 的语法,写出一个自动刷新的脚本给 google earth 网页端,发现不支持 networklink,最终得出结论:网页端不支持动态刷新,因此需要使用桌面版 yay -S google-earth-pro(这是 arch linux 安装命令,根据你的平台安装命令自行安装)
安装好之后按照下图所示创建一个 Network Link:

并设置动态刷新 aircrafts.kml:

之后就可以拖动地球找到我们对应的坐标点,观察搜索到的飞机信息:

案例 3:指定 USRP B210 硬件参数(进阶配置)
USRP B210 支持多种子设备(subdev)和天线选择,可通过参数精细配置:
modes_rx -s uhd -f 1090000000 -g 60 -l 30.24661575,119.95823993 -K aircrafts.kml \
-R A:B -A TX/RX -D "num_recv_frames=512"
参数说明:
案例 4:启动 SBS-1 兼容服务器(供其他软件连接)
许多飞行跟踪软件(如 Virtual Radar Server)支持 SBS-1 协议,可通过 -P 参数启动兼容服务器:
modes_rx -s uhd -f 1090000000 -g 60 -l 30.24661575,119.95823993 -P -t 5000
参数说明:
启动后,其他软件(如飞行跟踪工具)可通过 localhost:30003 或 localhost:5000 接收数据。
Virtual Radar Server is an open-source .NET application that runs a local web server,其在 linux 上安装理论上会很麻烦,不过有个 github 开源项目支持一键安装(适配的平台超多):
bash -c "$(wget -qO - https://github.com/mypiaware/virtual-radar-server-installation/raw/master/virtual_radar_server_install.sh)"
在安装过程中可以顺带配置下 Receiver(我们这里是 B210 SDR):
Receiver name: B210 # 任意名称
Receiver source type: BaseStation # 对应 SBS-1
Receiver address: 192.168.101.192 # ADS-B 接收器设备的 IP 地址。如果 VRS 与接收器安装在同一设备上,输入统一台电脑的 ip
Receiver port: 30003 # 输入提供飞机消息的 ADS-B 接收器的端口值
安装完之后 vrs -gui 以 GUI 方式启动 VRS(先启动 modes_rx),同时可以选中 B210 进行调整配置:

当我们看到 modes_rx 的 log 中显示 connect 时,表明我们 vrs 已经连接上了接收者,此时打开 http://127.0.0.1:8090/VirtualRadar 链接,就能在网页中看到实时的飞机信息了:

案例 5:禁用终端输出,仅保存数据到文件
如果不需要在终端显示,可禁用输出并专注于数据保存:
modes_rx -s uhd -f 10900000 -g 50 -l 30.24661575,119.95823993 \
-n -K aircrafts.kml -P -t 5000
参数说明:
[1]. 豆包 —— 咨询 gr-air-modes 的用法(个人)
[2]. Gemini —— 咨询网页端的 google earth networklink 为啥不行(个人)
[3]. Github —— gr-air-modes
[4]. B210专项 —— 03-环境搭建与驱动安装
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。