【项目私活案例】01_基于ADS-B的数据接收和解析上报模块

  这个项目是最近接的一个私活,刚刚完工,在这里记录下,也算是对项目的复盘吧。

 

1.系统总体方案

  整个项目主要是做飞行器数据采集汇总和显示的,分了很多模块,由多个人一起配合完成的。整个项目系统总体方案,包括了三个部分:底层硬件组网,中间层服务器端,以及上层客户端应用程序。

  我主要是做底层硬件组网以及ADS-B数据接收和解析上报,也就是上图中的底层硬件组网部分。本文主要讲讲我做的这部分,当然了,部分涉及客户信息的内容会一笔带过。

 

2.硬件组网的核心(ADS-B)

  在正式开始之前,有必要先简单讲下ADS-B,这有助于理解硬件组网。

  ADS-B (Automatic Dependent Surveillance-Broadcast),中文名称为广播式自动相关监视,是一种基于全球卫星定位系统和利用空地、空空数据链实现交通监控和信息传递的空管监视技术。

  简单来说就是,安装有ADS-B设备的飞机,会以一定的时间间隔对外发送自身位置、身份、高度、速度等数据。而ADS-B地面站,则能够接收到发射的数据并转发给空中交通管制员以准确跟踪该飞机。

  因此,ADS-B是实现硬件组网的核心。

 

3.硬件组网设备(RTL-SDR)

  地面站如何接收ADS-B设备发出的数据呢?

  这就需要用到ADS-B接收器了,某宝上可以自行搜索下,有很多,都是非常成熟的硬件模块了,这个项目上用的是如下这款。

  这款接收器使用的芯片方案为:RTL2832U+R820T,可以接收的频率范围为:24-1766 MHz,不过接收能力一般。如果想要接收能力强,可以选择芯片方案为RTL2832U+R820T2的接收器。

  在首次使用该设备之前,需要使用zadig软件进行驱动安装。安装过程比较简单,就不细说了。

 

4.数据的接收和转发

  至此,硬件环境已经搭建好了,下一步就是从设备中获取数据了。RTL-SDR提供了相应的动态库文件,里面封装了很多的接口函数,比如下面两个接口,就是用来打开和关闭设备的。

  RTL-SDR库文件,可以从其官网上下载得到。

  不过,在实际的开发过程中,我们可以借用开源的解码软件,去进行二次开发就可以了,并不需要从最原始的库接口开始写起。

  一个比较出名的开源解码软件是dump1090,能够从RTL2832U中读取原始的无线电信号,然后解码出ADS-B数据。dump1090内建了TCP服务器,并将解析出来的数据以BaseStation的格式输出到30003端口。

  来看看30003端口上输出的数据是什么样的吧。

  从这些数据可以看出格式好像是固定的,每条数据有多个字段,各个字段之间以逗号分隔。是的,这就是BaseStation格式的数据了(也被称为SBS1数据)。

  BaseStation的数据第一位是消息类型,总共有六种消息类型,分别是MSG, SEL, ID, AIR, STA, CLK。其中,我们最常见到的消息类型是MSG,MSG又分了八种子消息类型,子消息类型在BaseStation数据的第二位。完整的BaseStation数据格式如下。

  知道了每个字段的含义后,剩下的工作就简单了,对BaseStation数据进行解析后,按与后台服务器约定好的通信协议,打包数据发送给服务器就可以了。这就是ADS-B数据接收和解析上报模块的全部功能了。

  如果你在做这方面的东西遇到什么问题,欢迎和我联系,微信公众号“诗远科室工作室“,我的邮箱:menlsh@163.com

 

posted @ 2022-05-22 21:53  依旧淡然  阅读(866)  评论(0编辑  收藏  举报