20个版本 (10个重大更改)
0.11.1 | 2024年6月27日 |
---|---|
0.10.0 | 2022年8月2日 |
0.9.1 | 2022年2月21日 |
0.8.0 | 2021年5月8日 |
0.1.2 | 2019年6月11日 |
#610 in 解析器实现
每月671次 下载
在 3 个crate中使用 (2个直接使用)
210KB
1.5K SLoC
pcd-rs: 从PCD文件格式读取点云数据
pcd-rs
允许您从文件或二进制缓冲区解析PCD点云数据。
使用方法
要将此crate添加到您的项目中,
cargo add pcd-rs
请访问 docs.rs 了解更多信息。
示例
示例代码位于 examples
目录中。运行 cargo run --example
列出所有可用的示例二进制文件。
许可
MIT许可。请参阅 LICENSE 文件。
lib.rs
:
读取和写入PCD文件格式。
此crate为PCD(点云数据)文件格式提供数据序列化和反序列化器。通过[DynReader]和[DynWriter]可以读取和写入任何有效架构的PCD文件。如果启用了derive
功能,它还支持将数据反序列化为静态类型。
支持的格式版本
- 0.7
- 尚不支持旧版本。
任何架构示例
对于任何架构,点由[DynRecord]数组或切片表示,其中record封装了一组数据[Field]。
读取器
通过[DynReader::open()]创建读取器,返回一个迭代器,生成一个Result&DynRecord序列。
use pcd_rs::DynReader;
// Declare the reader
let reader = DynReader::open("test_files/binary.pcd")?;
// The reader itself is an iterator of records
let points: Result<Vec<_>> = reader.collect();
println!("There are {} points found.", points?.len());
写入器
首先通过[WriterInit]配置写入器,然后调用[WriterInit::create()]来构建[DynWriter]。使用..push()将数据追加到写入器。最后必须通过..finish()完成写入器。
use pcd_rs::{DataKind, DynRecord, DynWriter, Field, Schema, ValueKind, WriterInit};
// Declare point data
let points = [
DynRecord(vec![
Field::F32(vec![3.14159]),
Field::U8(vec![2, 1, 7]),
Field::I32(vec![-5]),
]),
DynRecord(vec![
Field::F32(vec![-0.0]),
Field::U8(vec![254, 6, 98]),
Field::I32(vec![7]),
]),
DynRecord(vec![
Field::F32(vec![5.6]),
Field::U8(vec![4, 0, 111]),
Field::I32(vec![-100000]),
]),
];
// Declare the schema
let schema = vec![
("x", ValueKind::F32, 1),
("y", ValueKind::U8, 3),
("z", ValueKind::I32, 1),
];
// Build a writer
let mut writer: DynWriter<_> = WriterInit {
width: 300,
height: 1,
viewpoint: Default::default(),
data_kind: DataKind::Ascii,
schema: Some(Schema::from_iter(schema)),
}
.create("test_files/dump_ascii_untyped.pcd")?;
// Send the points to the writer
for point in points {
writer.push(&point)?;
}
// Finalize the writer
writer.finish()?;
依赖关系
~2.7–4.5MB
~79K SLoC