15 个版本
0.2.4 | 2024 年 3 月 25 日 |
---|---|
0.2.3 | 2024 年 1 月 26 日 |
0.1.8 | 2024 年 1 月 9 日 |
0.1.5 | 2023 年 12 月 30 日 |
0.1.0-alpha2 |
|
80 在 机器人 中
每月 下载 105 次
在 4 个 Crates 中使用 (通过 mavspec_rust_gen)
430KB
5K SLoC
MAVInspect
Rust 库,用于解析 MAVLink XML 定义。
关于 MAVLink 的更多信息
MAVLink 是一种轻量级开源协议,用于无人机、机载组件和地面控制站之间的通信。它被像 PX4 或 ArduPilot 这样的自动驾驶仪使用。MAVLink 具有简单紧凑的序列化模型。基本抽象是 message
,可以通过链路(UDP、TCP、UNIX 套接字、UART 等)发送,并反序列化为具有原始类型或原始类型数组的结构体。这些字段可以通过 enum
变体进一步限制,并使用元数据(如度量单位、默认值或无效值)进行注释。
存在几种MAVLink方言。官方方言定义是可以在MAVlink 仓库中找到的XML文件。基于message
抽象,MAVLink定义了所谓的microservices
,它指定了客户端在特定条件下对特定消息的响应方式,或者如何启动特定操作。
这个库是其他MAVLink相关工具(代码生成器、遥测收集器、IO等)的构建块。我们故意将所有与协议检查无关的内容移到了其他Mavka项目中。
什么是Mavka?
Mavka是一个工具集合,用于解析、存储和通信由Rust编写的MAVLink数据。特别是
本项目遵循semantic versioning
。根据规范,在达到版本1.0.0
之前,可以在次要版本中引入破坏性更改。然而,只要可能,我们将在unstable
功能标志下保持不稳定的功能。
安装
使用cargo安装MAVSpec
cargo add mavinspect
用法
从./message_definitions
解析标准自定义XML定义
use mavinspect::parser::Inspector;
fn main() {
// Instantiate inspector and load list of XML definitions
let inspector = Inspector::builder()
.set_sources(&[
"./message_definitions/standard",
"./message_definitions/extra",
])
.build()
.unwrap();
// Parse all XML definitions
let protocol = inspector.parse().unwrap();
// Get `minimal` dialect
let minimal = protocol.dialects().get("minimal").unwrap();
// Get `HEARTBEAT` message
let heartbeat = minimal.get_message_by_name("HEARTBEAT").unwrap();
println!("\n`HEARTBEAT` message: {:#?}", heartbeat);
}
方言命名
为了避免在库中使用MAVInspect进行代码生成时,类似名称(如SomeDialect
和some_dialect
)之间的冲突,我们匹配到lower_snake_case
。这意味着SomeDialect
、SOME_DIALECT
和some_dialect
将被视为相同的,而somedialect
将被视为不同的方言。
示例
parser
— 解析XML定义。cargo run --example parser --features=serde
路线图
API被认为是相对稳定的,但某些高级功能仍需开发。然而,这些功能大多是锦上添花的,而不是使这个库完整的必要条件。
里程碑v1
包含被认为达到稳定版本1.0.0
所必需的功能。
存在一些实验性功能,可能发布也可能不发布。其中大部分与gRPC
里程碑相关。
其他MAVLink工具
首先,值得提到的是官方的Rust语言MAVLink客户端:rust-mavlink
。编写这个库的一个原因是将解析器和代码生成器解耦成独立的项目。
我本人受到了MAVLink(Go语言)的gomavlib
库的启发。我喜欢它的编写方式,其源代码在某些情况下帮助我解决了官方MAVLink文档不够清晰的问题。
如果你想要自动生成语言绑定并且偏好Python,可能会对官方的mavgen
代码生成工具感兴趣。如果你需要MAVLink消息的路由器,我们建议使用mavp2p
。如果你需要一个支持MAVLink微服务的解决方案,那么值得检查使用gRPC API的MAVSDK
。
MAVLink已经有近15年的历史了,但围绕这个协议的生态系统仍然充满活力,不断发展。一些项目稳定且健壮,而另一些则功能丰富但尚不完整。
许可证
我们在这里简单遵守根据Rust API指南(C-PERMISSIVE)提出的双重许可建议。
以下两种许可证中选择其一:
- Apache License,版本2.0(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0》)
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT》)
由你选择。
贡献
除非你明确声明,否则你根据Apache-2.0许可证定义,有意提交给作品包含在内的任何贡献,都应如上双重许可,没有任何附加条款或条件。
依赖关系
~4–6MB
~102K SLoC