讲师中心 微信公众号
AI工具推荐 视频效率加速

c++如何解析LASER扫描仪生成的LMS原始流数据【深度】

陌磊君_9536

陌磊君_9536

发布时间:2026-04-10 19:05:03

|

743人浏览过

|

来源于php中文网

原创

LMS原始流数据是设备特定二进制Telegram帧(UDP/串口),含角度、距离、强度等字段,无时间戳、坐标系或点云封装;需按协议解析帧头、长度、CRC16,并动态提取Start/StopAngle以计算真实角度步长。

c++如何解析laser扫描仪生成的lms原始流数据【深度】

什么是LMS原始流数据的典型结构

LMS系列激光扫描仪(如SICK LMS1xx、LMS5xx)输出的原始流数据不是标准LAS或PCD格式,而是设备特定的二进制协议流——通常为UDP或串口传输的Telegram帧。它包含扫描角度、距离值、信号强度、设备状态等字段,但**没有内置时间戳、坐标系定义或点云封装逻辑**。直接用pcl::PointCloud或laspy读取会失败,因为这不是LAS文件,也不是ROS sensor_msgs/LaserScan序列化消息。

如何从UDP流中正确提取单帧扫描数据

关键在识别帧头与长度字段。SICK LMS100常用协议以0x02(STX)开头,后跟2字节长度(小端)、1字节命令号、2字节状态码,再是有效载荷。常见错误是直接recvfrom()后按固定偏移解析——实际长度字段可能因固件版本变化,且部分型号(如LMS511)使用ASCII协议(sRN LMDscandata),需先发送请求指令。

  • 用setsockopt(..., SO_RCVBUF, ...)增大UDP接收缓冲区,避免丢包(尤其高频率扫描时)
  • 必须校验Telegram尾部的CRC16(非简单和校验),SICK文档明确要求使用0x8005多项式
  • 角度分辨率不恒定:LMS111默认0.5°,但起始角(StartAngle)和终止角(StopAngle)需从响应报文中解析,不能硬编码
  • 距离值单位是毫米,但部分固件返回的是16位缩放值(需查Resolution字段并除以对应因子)

如何把原始距离数组转成可用的点云结构

原始数据里只有极坐标下的angle和distance,要生成笛卡尔点云,必须做坐标变换。但容易忽略三点:扫描仪安装俯仰角未补偿、镜面反射导致的无效距离(如0、65535、或超量程值)、以及多帧间的时间对齐缺失。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 剔除无效距离前,先确认设备手册定义的“无效值”——LMS100是0x0000和0xFFFF,而LMS511可能用0x8000
  • 转换公式应为:x = distance * cos(angle_rad + mounting_pitch),其中mounting_pitch是物理安装引入的俯仰偏移,非零时会导致Z轴系统性偏差
  • 不要直接用std::vector<:point3f></:point3f>存点;若后续要配准或滤波,建议用Eigen::MatrixXf(3×N)或PCL的PointCloud<pointxyzi></pointxyzi>,预分配内存避免频繁realloc
  • 单帧无时间信息,若需构建3D体素地图,必须外接IMU或用主机clock_gettime(CLOCK_MONOTONIC, &ts)打时间戳

为什么用Boost.Asio比原生socket更稳妥

原生recvfrom()在处理变长Telegram时易粘包或拆包错位,尤其当网络抖动或CPU负载高时。Boost.Asio的async_read配合自定义CompletionCondition可精准等待完整帧到达,且支持deadline_timer自动超时重连。

立即学习“C++免费学习笔记(深入)”;

  • 定义帧解析器时,用boost::asio::streambuf缓存未完成帧,避免手动维护ring buffer
  • 异步回调中别直接操作GUI控件或全局点云容器;用post()派发到IO线程或加锁保护
  • 注意LMS设备的UDP端口:LMS1xx默认2112,但部分配置工具会改写为0x0000(即0端口),需检查设备Web界面的“Interface Settings”

实际部署时,最常被跳过的一步是验证StartAngle和StopAngle是否随扫描频率动态调整——例如LMS151在100Hz下角度范围缩小,硬编码角度步长会导致点云拉伸。这需要每次收到新帧都重新计算angle_step = (stop - start) / (num_measurements - 1)。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
go中interface用法
go中interface用法

本专题整合了go语言中int相关内容,阅读专题下面的文章了解更多详细内容。

4350

2025.09.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4718

2023.08.10

常见的编码方式
常见的编码方式

常见的编码方式有ASCII编码、Unicode编码、UTF-8编码、UTF-16编码、GBK编码等。想了解更多编码方式相关内容,可以阅读本专题下面的文章。

1528

2023.10.24

a和A对应的ASCII码数值
a和A对应的ASCII码数值

a的ascii码是65,a的ascii码是97;ascii码表中,一个字母的大小写数值相差32,一般知道大写字母的ascii码数值,其对应的小写字母的ascii码数值就算出来了,是大写字母的ascii码数值“+32”。想了解更多相关的内容,可阅读本专题下面的相关文章。

5627

2024.10.24

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

583

2023.07.25

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

3331

2023.08.08

tcp和udp有什么区别
tcp和udp有什么区别

tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。想了解更多tcp相关的内容,可阅读本专题下面的相关文章。

3969

2024.11.14

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn