10 个版本
新 0.3.0 | 2024年8月20日 |
---|---|
0.2.5 | 2024年6月28日 |
0.2.2 | 2024年5月27日 |
0.2.0 | 2024年4月11日 |
0.1.1 | 2024年2月27日 |
#791 in 编码
每月下载量 185
用于 3 crates
6.5MB
6K SLoC
rs1090
rs1090 是一个用于解码 Mode S、ADS-B 和 FLARM 消息的 Rust 库。
它从 Python pyModeS 库中汲取灵感,并使用 deku 以清晰声明的方式解码二进制数据。
该项目最初是名为 adsb-deku 的类似项目的分支,但已重构模块以匹配 pyModeS 设计,实现了广泛的审查、简化、纠正和完成。
rs1090 的目标方向归结为
- 提高 Python 中 Mode S 解码的性能;
- 将轨迹数据导出到跨平台格式,如 JSON 或 parquet;
- 提供高效的多接收器 Mode S 解码;
- 为外部应用程序提供实时丰富轨迹数据。
如果您只想从您的树莓派中解码 ADS-B 消息并在地图上可视化数据,您可能希望坚持使用 dump0190 的某个实现。
rs1090 库附带一个配套应用程序 decode1090 和一个 Python 绑定 rs1090。
性能
在解码欧洲航班(从起飞到降落)时进行的基准测试
- pyModeS 在完整的 Python 模式下;
- pyModeS 使用 Cython 编译的函数;
rs1090
在单个核心上使用 Python 绑定(为了公平比较);rs1090
在多个核心上使用 Python 绑定 (默认);- 在多个核心上执行完整的 Rust
rs1090
基准测试 (默认)。
基准测试的 Python 脚本在 python/examples。
使用 cargo bench
执行 Rust 基准测试。
两个脚本都在 Intel(R) Core(TM) i7-10850H CPU @ 2.70GHz 上运行。
[!NOTE]
rs1090
的默认出厂模式是在所有核心上执行。这个基准测试是在一台普通笔记本电脑上进行的。在超级计算机上可能会更快,但考虑到现在大多数笔记本电脑至少有4个核心,这个基准测试可以提供你自己在电脑上应该获得的速度提升。
安装
在项目目录中运行以下Cargo命令:
cargo add rs1090
或者将以下行添加到你的Cargo.toml
中:
rs1090 = "1.0.0" # check for the latest version, we are not there yet
用法
use hexlit::hex;
use rs1090::prelude::*;
fn main() {
let bytes: [u8; 14] = hex!("8c4841753a9a153237aef0f275be");
// ADS-B decoding
if let Ok((_, msg)) = Message::from_bytes((&bytes, 0)) {
// JSON output
let json = serde_json::to_string(&msg).expect("JSON error");
println!("{}", json);
}
}
在crates/rs1090/examples
文件夹中查看更多示例。
Python绑定
你可以使用以下命令安装为大多数Python版本编译的绑定:
pip install rs1090
该库提供了一个名为decode()
的单个多功能函数
>>> import rs1090
>>> rs1090.decode("8c4841753a9a153237aef0f275be")
{'df': '17',
'icao24': '484175',
'bds': '06',
'NUCp': 7,
'groundspeed': 17.0,
'track': 92.8125,
'parity': 'odd',
'lat_cpr': 39195,
'lon_cpr': 110320}
对于Python中的大量消息(例如,您可以通过pyopensky下载的消息)
>>> import rs1090
>>> rs1090.decode(msg_list, ts_list) # includes CPR to position decoding
...
>>> rs1090.decode(msg_list, ts_list, reference=(lat0, lon0)) # useful for surface messages
...
对于FLARM消息(也作为批量处理)
>>> msg = "7bf2381040ccc7e2395ecaa28e033a655d47e1d91d0bf986e1b0"
>>> rs1090.flarm(msg, 1655279476, 43.61924, 5.11755)
{'timestamp': 1655279476,
'reference_lat': 43.61924,
'reference_lon': 5.11755,
'icao24': '38f27b',
'is_icao24': True,
'actype': 'Glider',
'latitude': 43.6812864,
'longitude': 5.150585599999999,
'geoaltitude': 970,
'vertical_speed': 1.0,
'groundspeed': 18.698261951315153,
'track': 29.655457935479006,
'no_track': False,
'stealth': False,
'gps': 129}
decode1090
预构建的二进制文件可在发布页面上找到。
使用帮助命令可以查看用法。
decode1090 --help
jet1090
预构建的二进制文件可在发布页面上找到。
使用帮助命令可以查看用法。
jet1090 --help
nix
此存储库提供了一个用于构建和管理此项目的Nix flake配置。
nix develop # open a shell with the proper environment to compile rs1090
nix build # build the jet1090 executable
nix run # run the jet1090 executable
nix profile install # install jet1090 and decode1090 in your PATH
依赖关系
~10–19MB
~257K SLoC