当前位置:网站首页>驱动点云格式修改带来的效率提升
驱动点云格式修改带来的效率提升
2022-08-04 21:25:00 【moneymyone】
驱动点云格式修改带来的效率提升
背景:
原有的自定义点云结构在读取、传输、解码整个时间段耗时非常巨大,因此将点云结构进行升级,提高整体运行时间。
protobuf字段类型介绍
.proto Type | Notes | C++ Type |
---|---|---|
double | double | |
float | float | |
int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 |
int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 |
uint32 | Uses variable-length encoding. | uint32 |
uint64 | Uses variable-length encoding. | uint64 |
sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 |
sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 |
fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 228. | uint32 |
fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 256. | uint64 |
sfixed32 | Always four bytes. | int32 |
sfixed64 | Always eight bytes. | int64 |
bool | bool | |
string | A string must always contain UTF-8 encoded text. | string |
bytes | May contain any arbitrary sequence of bytes. | string |
修改前:
message PointXYZI {
optional float x = 1 [default = nan];
optional float y = 2 [default = nan];
optional float z = 3 [default = nan];
optional uint32 intensity = 4 [default = 0];
}
message PointCloud {
repeated PointXYZIT point = 1;
}
修改后:
message PointXYZI2 {
repeate float x_array = 1 [default = nan];
repeate float y_array = 2 [default = nan];
repeate float z_array = 3 [default = nan];
optional bytes intensity_array = 4 [default = 0];
}
message PointCloud {
optional PointXYZI2 point_array = 1;
}
修改点:
- PointXYZI由重复的数据结构,改为重复的点。
意义在于:
- 原本读写需要多次读写这个结构体,现在改为直接一次性存储点,将所有点都存到这个结构体里面。
- 而且将intensity等参数改为bytes,后续解析出来,减少了整体点云包的大小,减少传输时间。
protobuf修改字段为bytes需要考虑一些问题:
- 电脑大序端和小序端的问题;不同系统会不一样,解读出的bytes会不同。如果其他语言调用C++的库,不通过自己的语言解析,能解决问题?
- 多语言兼容问题,解析问题
- 字段对齐问题
目前占用时间分析:
经验:
- 通过减小字段类型,提高传输速率,空间换时间;
- 通过一次性写入替代多次写入,解决时间,这部分节约的时间占大头。
边栏推荐
猜你喜欢
unity2D横版游戏教程9-对话框dialog
【SQL之降龙十八掌】01——亢龙有悔:入门10题
动手学深度学习_NiN
Hands-on Deep Learning_NiN
Spss-系统聚类软件实操
Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
Red team kill-free development practice of simulated confrontation
【CC3200AI 实验教程 1】疯壳·AI语音人脸识别(会议记录仪/人脸打卡机)-开发环境搭建
DSPE-PEG-Aldehyde, DSPE-PEG-CHO, Phospholipid-Polyethylene Glycol-Aldehyde A hydrophobic 18-carbon phospholipid
Chapter7 : Network-Driven Drug Discovery
随机推荐
经验分享|盘点企业进行知识管理时的困惑类型
PCBA scheme design - kitchen voice scale chip scheme
dotnet 使用 lz4net 压缩 Stream 或文件
Spss-系统聚类手算实操
AI/ML无线通信
LocalDate时间日期包的用法
dotnet 启动 JIT 多核心编译提升启动性能
mysql基础
Some problems with passing parameters of meta and params in routing (can be passed but not passed, empty, collocation, click to pass multiple parameters to report an error)
PowerCLi batch configuration of NTP
知识分享|如何设计有效的帮助中心,不妨来看看以下几点
Win11如何开启Telnet客户端?
dotnet 通过 WMI 获取系统安装软件
【编程思想】
mdk5.14无法烧录
【Programming Ideas】
括号匹配
Android 面试——如何写一个又好又快的日志库?
数电快速入门(三)(卡诺图化简法的介绍)
后缀式的计算