网易首页 > 网易号 > 正文 申请入驻

实时追踪的飞机雷达系统,用 JavaScript “搞定”!高度、经纬度等一目了然

0
分享至

摘要:是否还记得上个月数百万人同时围观佩洛西航班轨迹的那个夜晚?当时,飞行跟踪服务 Flightradar24 火了好一把。最近,本文作者 Charlie Gerard 也对这类飞行器雷达系统十分好奇,并尝试用 JavaScript 来构建一个。

原文链接:https://charliegerard.dev/blog/aircraft-radar-system-rtl-sdr-web-usb/

声明:本文为 CSDN 翻译,未经授权,禁止转载。


作者 | Charlie Gerard

译者 | 弯月

出品 | CSDN(ID:CSDNnews)

几年前,我看了Thomas Waston的演讲,介绍了他构建AirplaneJS的过程。这是一个Web应用,能接收飞机等飞行器的ADS-B雷达信号,然后通过浏览器实时绘制在地图上。我不知道JavaScript还能实现这个功能,所以我仔细研究了一下。

我尝试了这个项目,并思考我能否更进一步。由于AirplaneJS在服务上使用Node.js,我决定试验一下能不能通过WebUSB把它变成一个完全的前端项目。几周前,我终于搞定了。

(注:由于目前我还在学习USB协议以及怎样解码ADS-B信号,所以这篇文章不会在这方面深入探讨。)

先来看一个演示:

演示网站在此:https://aircraft-radar-system.netlify.app/


RTL-SDR适配器

本项目的主要组件包括WebUSB API、一个RTL-SDR适配器加天线,以及一些JavaScript代码。

如今,绝大多数飞行器都会广播ADS-B数据,其全称是Automatic Depedent Surveillance-Broadcast(广播式自动相关监视)。这种监视技术可以让飞行器在不需要地面的问询信号的情况下主动广播其飞行状态,这样就不需要地面的输入了。该数据包括飞行器的位置、经纬度、速度、代码等。飞行器会定期将数据发送给航空控制台,而使用带有天线的信号接收器,你也可以截获这些数据并制作自己的飞行器雷达系统。

由于数据广播频率为1090MHz,偶极子天线的尺寸可以通过以下公式来计算:

  • 总长度=14264 / 频率(MHz)

  • 每侧天线的长度=总长度/2

在该项目中,总长度约为13cm,所以每侧天线的长度应该为6.5cm。


利用WebUSB连接适配器

WebUSB API是一个浏览器API,可以通过USB连接插到电脑上的设备并与之通信。

要使用该API,首先应该检查浏览器是否支持。实现代码如下:


if(navigator.usb){console.log("The Web USB API is supported!")} else {console.log("I'm afraid this won't work")

接下来,你需要指定连接到哪个设备。你可以列出所有设备,或者指定一个过滤器,写明设备的制造商ID和产品ID。在Mac上可以通过以下方式找到这些ID:将设备插入电脑,点击苹果图标 > About this Mac > System Report,然后检查 Hardware > USB下的列表。

上面的图片表明,制造商ID为0x0bda,产品ID为0x2838。

出于安全的考虑,WebUSB API必须由用户动作触发,所以我在屏幕上加了一个按钮,来启动连接。

首先调用navigator.usb上的requestDevice方法:


button.onclick = () => {navigator.usb.requestDevice({filters: [vendorId: 0x0bda,productId: 0x2838,],

它会返回一个promise,里面包含了列表中选中的设备。接下来,在该设备上开启一个绘画,选择一项配置,然后声明一个接口:


.then((device) => device.open());.then(() => device.selectConfiguration(1)).then(() => device.claimInterface(0))

配置和接口是设备特有的。我没有在网上找到该设备的具体信息,所以我尝试了不同的值。

完成这些步骤之后,设备就连接好了。现在需要设置频率和采样率。我使用了Sandeep Mistry的rtlsdrjs库。我使用的频率是 1090000000(1090MHz),采样率是2000000,如果你想尝试类似的项目 ,可以用作参考。

最后,当设备接收到数据时,执行如下transferIn方法:


.transferIn(1, 256000).then((result) => {const data = new Uint8Array(result.data.buffer);console.log(data);

该代码返回的原始数据大致如下:

处理并格式化后如下:

处理原始ADS-B数据

这部分极大依赖于已有的成果。我需要深入研究Mode S通信协议才能解码数据,不过这篇文章(https://mode-s.org/decode/content/ads-b/1-basics.html)可以作为入门。

到目前为止,据我的理解,ADS-B消息包含两个部分:信息头和数据块。数据块包含112比特,分为5个节:


  • DF:下行格式

  • CA:应答器功能

  • ICAO:飞行器地址

  • ME:消息

  • PI:校验ID

比特33-38位消息专用。前5个比特是类型代码。如果该代码位于1~4之间,表明ADS-B消息是一条飞行器鉴别信息;如果类型代码位于5~8之间,表明这是一条地面位置消息,等等。类型代码很重要,它决定了消息其余部分的含义。

一条原始ADS-B消息的十六进制如下:

8D4840D6202CC371C32CE0576098

用二进制表示为:

你可以猜一下它一共有多少比特……

112比特!

利用前面的表,可以将该消息分成各个节:

转换成十进制:

消息的前5比特是十进制的4,表示这是一条飞行器鉴别消息。如果我的理解正确,消息的其余部分是关于飞行器类别和呼号的,如下表所示:

你可以利用该数据,使用诸如planespotters.net之类的在线工具,并搜索ICAO代码,来获取有关飞行器的信息。

在处理完数据后,得到的JSON对象包含高度、经纬度等信息。

最终配置

最终的配置如下:

下面是另一段演示:

这篇文章没有涉及深入的细节,但我希望我的实现方法是正确的!很高兴我能用WebUSB实现这个项目。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
马刺首败多惨:最多落后31分榜眼受伤 文班14中4+前三节7中1梦游

马刺首败多惨:最多落后31分榜眼受伤 文班14中4+前三节7中1梦游

醉卧浮生
2025-11-03 11:28:35
统一台湾后,相较于洪秀柱马英九,此人更适合担任台湾省省长?

统一台湾后,相较于洪秀柱马英九,此人更适合担任台湾省省长?

通文知史
2025-10-15 21:00:03
172cmD杯女孩,撩走肌肉猛男,网友:没X生活的我哭晕了…

172cmD杯女孩,撩走肌肉猛男,网友:没X生活的我哭晕了…

健身迷
2025-10-16 10:10:40
86岁老人随口乱说代号,儿子上报后,国安领导:马上接通中央部委

86岁老人随口乱说代号,儿子上报后,国安领导:马上接通中央部委

知鉴明史
2025-10-23 14:01:49
不敢认!“这还是李宗伟?”43 岁近照引热议!

不敢认!“这还是李宗伟?”43 岁近照引热议!

情感大头说说
2025-11-03 12:28:01
原北京市国家税务局党组书记、局长吴新联被查

原北京市国家税务局党组书记、局长吴新联被查

新京报
2025-11-03 10:07:06
你遇到过最尴尬的事是啥?网友:护士这活一般人还真干不了

你遇到过最尴尬的事是啥?网友:护士这活一般人还真干不了

解读热点事件
2025-11-02 00:15:03
“黑马”泰州队夺冠,奖励传言炸翻全网?江苏省体育局:假的,未听说这样的奖励

“黑马”泰州队夺冠,奖励传言炸翻全网?江苏省体育局:假的,未听说这样的奖励

环球网资讯
2025-11-03 14:13:12
比三冠王赛季还疯!哈兰德“推土机”式进球,碾出英超新纪录!

比三冠王赛季还疯!哈兰德“推土机”式进球,碾出英超新纪录!

足球王国
2025-11-03 15:53:52
湖人三连胜!29+26+25,布朗尼惊天一扣,老詹激动坏了

湖人三连胜!29+26+25,布朗尼惊天一扣,老詹激动坏了

准者篮球训练营
2025-11-03 15:59:48
吉隆坡首会,中美军方谈崩了?美防长提的要求,董军一个也没答应

吉隆坡首会,中美军方谈崩了?美防长提的要求,董军一个也没答应

来科点谱
2025-11-02 09:31:28
雷军这波“自杀式公关”,暴露了小米的流量焦虑

雷军这波“自杀式公关”,暴露了小米的流量焦虑

热点菌本君
2025-11-02 15:26:23
奇怪!上官正义协助警方解救被贩卖的婴儿后,自己却被控制数小时

奇怪!上官正义协助警方解救被贩卖的婴儿后,自己却被控制数小时

火山诗话
2025-11-03 07:10:37
郑丽文就职现场,韩国瑜做重磅报道,承诺国民党“全面赢回执政”

郑丽文就职现场,韩国瑜做重磅报道,承诺国民党“全面赢回执政”

蓝色海边
2025-11-03 15:56:00
从明天起,关心这些打NCAA的中国青年才俊

从明天起,关心这些打NCAA的中国青年才俊

林子说事
2025-11-03 14:55:09
社会因为缺钱,已出现这4个明显的变化,你有没有注意到?

社会因为缺钱,已出现这4个明显的变化,你有没有注意到?

猫叔东山再起
2025-11-03 09:40:03
小米粥再次被关注,研究发现:高血糖患者喝小米粥,或有8大改变

小米粥再次被关注,研究发现:高血糖患者喝小米粥,或有8大改变

周哥一影视
2025-11-01 09:05:09
佟丽娅现身深圳罗湖水贝买珠宝!打扮朴素眼袋重,毫无明星气质

佟丽娅现身深圳罗湖水贝买珠宝!打扮朴素眼袋重,毫无明星气质

柠檬有娱乐
2025-11-03 10:38:49
重大利好,300402,“20cm”涨停!储能市场迎来拐点,社保重仓股曝光

重大利好,300402,“20cm”涨停!储能市场迎来拐点,社保重仓股曝光

数据宝
2025-11-03 12:20:05
弃车保帅!太子集团陈志末日已到,是被“自己人”灭口的

弃车保帅!太子集团陈志末日已到,是被“自己人”灭口的

吃瓜局
2025-10-31 21:11:55
2025-11-03 17:16:49
CSDN incentive-icons
CSDN
成就一亿技术人
26067文章数 242175关注度
往期回顾 全部

科技要闻

余承东内部信:鸿蒙下一步要实现上亿覆盖

头条要闻

特朗普称靠关税阻止8场战争 遭反问"为何对普京没用"

头条要闻

特朗普称靠关税阻止8场战争 遭反问"为何对普京没用"

体育要闻

开拓者官宣召回杨瀚森 队记解析核心原因

娱乐要闻

录音彻底揭露知名导演王家卫的体面

财经要闻

最新省市GDP:谁在飙升,谁掉队了?

汽车要闻

超跑同款磁流变减振 深蓝L06包你开得爽

态度原创

时尚
本地
旅游
艺术
教育

秋季穿衣别太老气横秋,看看这27套造型,时尚舒适又显高

本地新闻

全网围观,到底多少人被这个野人大学生笑疯了

旅游要闻

一步一景入画来!济南红叶谷的深秋藏着最治愈的诗意

艺术要闻

90后跨国夫妻,到浙江山居:花20万租20年,值了!

教育要闻

教育部发文要求高校特殊类型招生严格报名资格审核

无障碍浏览 进入关怀版