Fieldwatch无人机监听实战:如何靠Remote ID与OpenDroneID解码看穿头顶的飞机和飞手位置
【免费下载链接】FieldwatchReceive-only Wi-Fi and Bluetooth LE observer for Android. MIT.项目地址: https://gitcode.com/gh_mirrors/fi/Fieldwatch
Fieldwatch 是一款运行在 Android 手机上的免费无人机监听工具:它以"只接收"的方式监听 Wi-Fi 与蓝牙 LE 广播,内置 Remote ID(ASTM F3411 / OpenDroneID)解码能力,能把头顶无人机的位置、高度、航向、速度,甚至飞手(操控端)坐标直接画在你自己的地图上——无需任何后端服务器、无需网络,一切都在手机本地完成。
上图:Fieldwatch 从"听到信标"到"识别、绘图、记录"的完整数据流,全部在本机完成(来源:docs/diagrams/how-it-works.png)
一、为什么用 Fieldwatch 做无人机观测?
很多人看到无人机第一反应是"它从哪来?谁在飞?"。传统做法需要外接硬件(无人机侦测棒、ADS-B 式的插件)并联网上报,而 Fieldwatch 的思路完全不同:
- 只监听、不发射:它不调用任何 Wi-Fi 客户端功能,只读取手机本来就收到的广播包;
- 完全离线:没有账号、没有服务器、没有遥测,隐私风险由自己掌控(免责声明见 README.md);
- Remote ID 是"出厂即支持"的:符合 ASTM 标准的无人机必须广播 Remote ID 数据包,Fieldwatch 的签名库自带解码地图,开箱即可把坐标钉在地图上。
它的定位边界很明确:不做定向测向、不做 802.11 监听模式、不覆盖经典蓝牙(详见 README.md 中 "What Fieldwatch is not" 一节)。把它当作"信息读取器"而不是"雷达",心态就对了。
二、Remote ID 到底广播了什么?
无人机广播的 Remote ID 是一组按 ASTM F3411 打包的25 字节消息,通过两条信道送达你的手机:
| 信道 | 特征 | 说明 |
|---|---|---|
| 蓝牙 LE | 服务 UUIDFFFA | 最常见的信道 |
| Wi-Fi | 厂商 OUIFA:0B:BC,类型0x0D | 部分机型用 Wi-Fi 厂商信息元素承载 |
解码器 OpenDroneId.kt 会自动从两条信道中提取消息,并识别四种核心类型:
- Basic ID(id_type 0):无人机的 UAS ID / 序列号,等于"身份证号"。若序列号符合 CTA-2063 前缀,还能反查出具体机型——例如内置的 Cta2063.kt 可识别 Freefly、BRINC、Teal 等厂商;
- Location(id_type 1):经纬度、几何高度、航向、地速、垂直速度——这是钉在地图上"飞机本体"的坐标;
- Self ID(id_type 3):飞手/操控端的标识文本;
- System(id_type 4):飞手的位置坐标(op_lat / op_lon),也就是本文标题里"看穿飞手位置"的关键。
一个容易踩的坑:这四类消息是轮换广播的——某几秒可能只发 Basic ID,没有经纬度。所以 PayloadLocation.kt 实现了"粘性合并"(mergeSticky):本会话内最后一次有效的飞机坐标、飞手坐标、UAS ID 会被记住并持续沿用,直到新消息覆盖。你在屏幕上看到的标记因此不会出现"闪一下就没"。
三、三步上手:从安装到看到飞机
1. 一键安装 APK
从仓库dist/目录下载Fieldwatch.apk(要求 Android 10+),用文件管理器打开并允许"来自该应用的安装"即可,不要改名 APK。完整步骤见 docs/instruction.txt,完整手册见 docs/Fieldwatch_User_Manual.pdf。
如果你要从 1.0.4 或更早版本升级:新版换了正式发布者证书,需要先卸载旧版再安装。卸载前记得在 Settings 里先Export signatures和Export settings备份自定义内容。
2. 授予权限并启动扫描
首次启动按引导授予蓝牙与位置权限(位置权限用于你自己的 GPS 路径,Remote ID 的解码坐标不依赖它,见 SettingsScreen.kt 中的说明)。之后 Home 页保持前台"Fieldwatch scanning"通知即可,扫描由系统通知驱动。
3. 打开"Payload location"开关
Remote ID 的坐标来自广播负载本身而非你的 GPS,需要在设置中启用Payload location (on),之后 Live 视图里就会出现两类标记:
- ✈️一个飞机标记:以 UAS ID 为键的单一位置点(Location 消息);
- 🧍一个人形"飞手"图钉:当 System 消息解出 op_lat/op_lon 时出现——两个图钉之间的距离,大致就是"飞机离飞手多远"。
绘制逻辑在 SitPathCanvas.kt 与 ReportsScreen.kt 中,报告界面也会自动生成"= pilot"图例,方便出图给别人看。
四、实战技巧:把"看"变成"追"
用 Hunt 模式听声辨位
Remote ID 的蓝牙部分本质是 BLE 广播,Hunt.kt 用 RSSI 的相对变化给出提示:Very Close / Closer / Further / Quiet / Gone。它明确提示"RSSI 不是距离,更不是方位"——-45 dBm 以上的"Very Close"通常意味着设备在你手边或包里。配合 FilterEngine.kt 按类名/签名过滤后单看一架目标,步行追踪的体验会好很多。
用飞机航迹(Aircraft Trail)复盘航路
AircraftTrail.kt 会把广播坐标累积成一条最多 40 点、带速度合理性校验(丢弃 >120 m/s 的跳点)的航迹,写入 Sit 报告。哪怕广播断了几秒,航迹依然连续,复盘时可以直接看出起降点、绕飞区域和返航路径。
出报告与共享
- Sit 报告:把"听到过的所有电台 + 你的 GPS 路径 + 飞机航迹"打包成可分享的日志(SitExport.kt);
- TAK 发布:需要给团队共享态势时,Remote ID 目标会作为带 UAS ID 的标记(+飞手图钉)推送到 ATAK,默认关闭(TakPublish.kt);
- Debrief / AI Export:生成文字复盘,语言描述属于"假设"而非法律结论,分享前请自行判断。
⚠️ 提醒:Privacy 模式只会遮蔽屏幕显示,日志文件里仍保存完整坐标;这些文件离开手机后的使用责任在你。
五、常见问题速答
Q:为什么有的无人机看不到?广播必须"活着"才收得到:关掉广播、仅走蜂窝的遥控链路、休眠、随机化 MAC 或超出手机射频能力的目标都不会出现——这是射频物理限制,不是软件 bug。
Q:飞手图钉什么时候不出现?只有 System 消息解出有效 op_lat/op_lon 才出现;部分机型只广播飞机位置不广播操控端位置,属正常现象。
Q:坐标会不会漂移?广播坐标的异常跳点会被航迹的速度/距离校验丢弃;屏幕上的图钉是"广播声称的位置",与真实位置的偏差取决于机载定位质量。
写在最后
Fieldwatch 的价值在于把"合规广播"变成了普通人可读取的信息:一个 APK、一部手机,就能完成从 Remote ID 解码、飞手定位到航迹复盘的完整链路,且全程离线。想深入了解签名库、过滤引擎与报告结构,可以直接读 domain/ 目录下的源码;更新历史见 CHANGELOG.md。项目基于 MIT 协议开源,上手前请阅读免责声明并遵守当地法规。
【免费下载链接】FieldwatchReceive-only Wi-Fi and Bluetooth LE observer for Android. MIT.项目地址: https://gitcode.com/gh_mirrors/fi/Fieldwatch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考