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 解析器实现

Download history 101/week @ 2024-04-25 200/week @ 2024-05-02 266/week @ 2024-05-09 193/week @ 2024-05-16 89/week @ 2024-05-23 105/week @ 2024-05-30 117/week @ 2024-06-06 101/week @ 2024-06-13 129/week @ 2024-06-20 212/week @ 2024-06-27 163/week @ 2024-07-04 82/week @ 2024-07-11 120/week @ 2024-07-18 296/week @ 2024-07-25 162/week @ 2024-08-01 80/week @ 2024-08-08

每月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