资讯动态

Webots 仿真 SICK LD-MRS 多线激光雷达:SickLdMrs PROTO 参数全解析与点云实战

发布时间:2026/10/14 2:58:13 来源:尧图企业网站定制
科研自动驾驶物理引擎【免费下载链接】webotsWebots Robot Simulator项目地址https://gitcode.com/gh_mirrors/web/webots点击查看免费下载导读本文围绕 Webots 开源机器人仿真器中的 SickLdMrs PROTO 展开全面讲解如何用 Webots 内置的 Lidar 节点 建模 SICK LD-MRS 多线激光雷达包括 PROTO 的全部字段含义与取值、主 Lidar 与长距离 Lidar 的双传感器架构、朝向与坐标系约定以及与真实设备的仿真差异。文中还结合仓库自带的sick_point_cloud示例世界与控制器演示如何在 C 和 Python 中通过点云 API 读取该雷达数据并完成目标计数读完后你将能独立在 Webots 世界中部署并编程使用这一工业级 3D 激光雷达模型。SickLdMrs PROTO 概述SICK LD-MRS 是 SICK 公司专为恶劣室外环境设计的多层multi-layer激光雷达。在 Webots 中它由projects/devices/sick/protos/SickLdMrs.proto定义PROTO 内部包含一个 Lidar 节点覆盖了绝大多数常规使用场景。该传感器在 Webots API 中的引用名称reference name直接对应SickLdMrs.name字段因此你可以通过wb_robot_get_device(自定义name)C或getDevice(自定义name)Python直接获取设备句柄。仿真模型的主要特性如下层数默认 4 层当type为800001S01时为 8 层水平扫描范围85°并相对设备正前方水平偏移 7.5°最大量程300 米垂直层间距相邻两层之间垂直间隔 0.8°。这些数值在 SickLdMrs.proto 的主 Lidar 节点中被直接体现fieldOfView为 85° 对应的弧度值verticalFieldOfView为0.8 * (measurementLayers 1)度maxRange为 300minRange为 0.5 米。PROTO 基本用法与字段速览在 Webots 世界中通过 EXTERNPROTO 引用该模型即可使用例如仓库自带的示例世界 sick_point_cloud.wbt 中的声明EXTERNPROTO webots://projects/devices/sick/protos/SickLdMrs.proto随后在Robot节点下实例化SickLdMrs { translation 0.25 0 1.2 name sick type 800001S01 }SickLdMrs 完整的字段定义来自 SickLdMrs.proto 及配套文档 sickldmrs.md字段类型默认值取值范围/说明translationSFVec3f0 0 0传感器在父节点坐标系中的位置rotationSFRotation0 0 1 0传感器姿态绕 z 轴旋转默认无旋转nameSFStringSick LD-MRSWebots API 中的设备引用名typeSFString400001设备型号见下表angularResolutionSFString0.5 [deg]垂直角分辨率三档可选noiseSFFloat0.001高斯噪声标准差单位米enablePhysicsSFBoolTRUE是否启用物理属性质量 1 kg完整实例化示例SickLdMrs { translation 0 0 0 rotation 0 0 1 0 name Sick LD-MRS type 400001 angularResolution 0.5 [deg] noise 0.001 enablePhysics TRUE }核心字段详解type设备型号type字段对应 SICK LD-MRS 的不同硬件型号SickLdMrs.proto 通过枚举约束了合法取值只能是以下五者之一400001400102400001S01400102S01800001S01其中400102与400102S01属于 HD高分辨率型号800001S01属于 8 层型号。从源码看SickLdMrs.protoconst isHD type 400102 || type 400102S01; const is8L type 800001S01; let measurementLayers is8L ? 8 : 4;即默认含 HD 型号均为 4 层仅800001S01为 8 层。型号同时影响外观纹理的选用HD 型号使用textures/sick_ld_mrs_hd.png8 层型号使用textures/sick_ld_mrs_8l.png其余型号使用textures/sick_ld_mrs.pngSickLdMrs.proto。angularResolution垂直角分辨率angularResolution字段指定两次测量之间的垂直角度间隔。根据 SICK LD-MRS 规格取值只能是0.5 [deg]、0.25 [deg]或0.125 [deg]三档。在 PROTO 模板脚本中它被换算为弧度后直接驱动主 Lidar 的horizontalResolutionSickLdMrs.protolet angularResolution wbutility.degreesToRadians(0.5); if (fields.angularResolution.value 0.25 [deg]) angularResolution angularResolution * 0.5; else if (fields.angularResolution.value 0.125 [deg]) angularResolution angularResolution * 0.25;随后主 Lidar 的水平分辨率计算为SickLdMrs.protohorizontalResolution round(horizontalFieldOfView / angularResolution)以默认值0.5 [deg]为例主 Lidar 的水平分辨率为round(85° / 0.5°) 170个点/层若选用0.25 [deg]则为 340 点0.125 [deg]则为 680 点。分辨率越高单帧计算量越大需要结合仿真实时性权衡。noise高斯噪声noise字段指定叠加到每次测距深度值上的高斯噪声标准差单位是米。PROTO 默认值为0.001即 1 毫米。按照 Lidar 参考文档 的约定noise大于 0 时每个深度值都会叠加高斯噪声值为 1.0 时对应标准差为maxRange此处即 300 米的高斯噪声。仿真中若不需要模拟测量噪声可将其设为 0 以节省计算开销。enablePhysics物理属性enablePhysics字段决定传感器是否受物理引擎影响。启用时PROTO 会附加一个包围盒boundingObject与 Physics 节点质量为 1 kgSickLdMrs.proto包围盒为尺寸0.1365 × 0.088 × 0.094米的长方体并带有 -2.0944 弧度的旋转与 -0.047 米的平移以贴合设备外形。在需要将雷达安装在移动机器人上并参与碰撞/惯性计算的场景中保持TRUE即可。双 Lidar 架构主传感器与长距离重叠层SICK LD-MRS 的物理特性之一是除了常规的多层扫描它还包含用于重叠远距离测量的长距离层long-range layers。为了还原这一特性SickLdMrs PROTO 在主 Lidar 节点之外还创建了第二个Lidar 节点专门建模这部分重叠的长距离层SickLdMrs.proto。该长距离 Lidar 的引用名称是SickLdMrs.name字段拼接上字符串 (long range)即若name为Sick LD-MRS则第二个设备名为Sick LD-MRS (long range)编程时需要分别获取两个设备句柄。它的特性为水平扫描范围110°相对正前方水平偏移 5°主 Lidar 为 85° / 7.5°层数等于SickLdMrs.measurementLayers的一半即默认 4 层型号 → 2 层8 层型号 → 4 层其余特性最大量程 300 m、最小量程 0.5 m、噪声与主 Lidar 一致。主、辅两个 Lidar 的朝向在 PROTO 模板中通过组合旋转实现SickLdMrs.protointernalRotation combine({x:0, y:0, z:1, a: -7.5°}, {x:1, y:0, z:0, a: π})其中第一个分量是水平偏移主 Lidar -7.5°、长距离 Lidar -5°第二个分量{1,0,0,π}是绕 x 轴翻转 180°用于把 Lidar 的默认扫描方向调整到设备正前方。传感器朝向约定无论是主 Lidar 还是长距离 Lidar其内部朝向遵循统一的约定见 sickldmrs.mdLayer 0 对应最底层numberOfLayers编号自下而上最底层为 0最顶层为numberOfLayers - 1第一个响应值对应设备右侧每层扫描数据中索引 0 的点对应雷达右侧方向数据沿扫描方向依次排列。这一点在编程读取数据时非常关键——例如示例控制器读取中间层时使用layers / 2作为层索引见下节正是基于层编号自下而上的约定。与真实设备的仿真差异相对真实硬件该仿真模型存在两点明确限制文档原文sickldmrs.md扫描范围分辨率恒定整个扫描扇区内角度分辨率保持一致而真实设备在不同角度区间可能存在分辨率差异垂直方位角恒定每个测量点的垂直方位角在整个扫描过程中保持不变真实设备在长距离层等场景中会有方位角变化。在需要精确还原传感器物理细节的应用如传感器标定算法验证中这两点差异需要额外考量对于大多数机器人感知与避障仿真该模型已足够真实。实战sick_point_cloud 示例世界与点云计数仓库在 projects/samples/devices/worlds/sick_point_cloud.wbt 提供了一个完整示例一个静态机器人搭载 SickLdMrs型号800001S018 层面前是一条传送带罐装饮料Can沿传送带排列。控制器使用 Lidar 的点云 API 统计传感器前方障碍物的数量并在 Webots 控制台输出 I see N cans。该世界文件中雷达的关键配置sick_point_cloud.wbtRobot { children [ SickLdMrs { translation 0.25 0 1.2 name sick type 800001S01 } ... ] controller sick_point_cloud }配套控制器提供 C 与 Python 两个版本路径分别为 sick_point_cloud.c 与 sick_point_cloud.py。C 版本核心流程sick_point_cloud.cWbDeviceTag sick wb_robot_get_device(sick); wb_lidar_enable(sick, time_step); wb_lidar_enable_point_cloud(sick); const int resolution wb_lidar_get_horizontal_resolution(sick); const int layers wb_lidar_get_number_of_layers(sick); ... // 读取中间层的全部点 const WbLidarPoint *layer wb_lidar_get_layer_point_cloud(sick, layers / 2); for (p 0; p resolution; p) { const bool obstacle layer[p].x THRESHOLD; // THRESHOLD 3.0 米 if (obstacle !previous_obstacle) object_counter; previous_obstacle obstacle; }Python 版本逻辑完全对应sick_point_cloud.pyself.sick self.getDevice(sick) self.sick.enable(self.timeStep) self.sick.enablePointCloud() ... layer self.sick.getLayerPointCloud(int(layers / 2)) for p in range(resolution): point layer[p] obstacle point.x 3.0 if obstacle and not previous_obstacle: object_counter 1 previous_obstacle obstacle实现要点点云结构wb_lidar_get_layer_point_cloud/getLayerPointCloud返回某一层的一维点数组每个点包含x、y、z、layer_id、time五个成员结构与语义见 lidar.md。其中 xyz 坐标相对 Lidar 节点原点layer_id取值范围 0 到numberOfLayers - 1。连通域计数技巧控制器对中间层逐点扫描用一个布尔量previous_obstacle记住前一点是否为目标每当从无障碍跳变为有障碍时计数加一从而把连续的点云簇识别为单个物体——这正是一个简单的前沿检测edge detection思路。读取中间层layers / 2利用Layer 0 是最底层的编号约定取到垂直方向正中的扫描层以避开罐体顶部与底部边缘。与 Lidar 节点底层约束的衔接SickLdMrs 的配置直接映射到底层 Lidar 节点的关键字段horizontalResolution、fieldOfView、verticalFieldOfView、numberOfLayers、minRange、maxRange、noise。使用该模型时需留意 Lidar 的固有仿真约束lidar.mdnumberOfLayers verticalFieldOfView * horizontalResolution / fieldOfView该约束用于保证各层扫描线在垂直视场内分布合理。SickLdMrs 的默认参数如 4 层、垂直视场0.8 * 5 4°、水平分辨率 170、水平视场 85°满足该约束若自行调整angularResolution或型号仍应以此式校验。此外minRange0.5 m以内与maxRange300 m以外的目标测距值返回无穷大lidar.md编程时需对point.x等坐标做有限值判断。小结SickLdMrs PROTO 是 Webots 设备库中针对工业级多线激光雷达的高保真建模通过主 Lidar 长距离 Lidar 双传感器结构还原了 LD-MRS 的重叠长距离扫描特性用type、angularResolution、noise、enablePhysics四个核心字段覆盖了从型号选型到噪声注入、物理仿真的完整配置需求并配有可直接运行的sick_point_cloud点云示例。无论是进行室外环境感知仿真、移动机器人导航验证还是研究多线雷达数据处理算法都可以直接基于该模型快速搭建场景并调用 Webots 的点云 API 开展开发。赞分享科研自动驾驶物理引擎【免费下载链接】webotsWebots Robot Simulator项目地址https://gitcode.com/gh_mirrors/web/webots点击查看免费下载相关推荐Webots 中 Robotis LDS-01 激光雷达LidarPROTO 节点详解从参数配置到避障实战Webots 中 Robotis LDS 01 激光雷达LidarPROTO 节点详解从参数配置到避障实战 导读 RobotisLds01 是 Webot科研自动驾驶物理引擎Webots 中 Hokuyo URG-04LX 激光雷达 PROTO 完全指南配置参数、底层实现与控制器编程Webots 中 Hokuyo URG 04LX 激光雷达 PROTO 完全指南配置参数、底层实现与控制器编程 Hokuyo URG 04LX 是一款专为轻量科研自动驾驶物理引擎Webots 中的 Hokuyo UTM-30LX 激光雷达 PROTO 节点规格、配置与控制器编程指南Webots 中的 Hokuyo UTM 30LX 激光雷达 PROTO 节点规格、配置与控制器编程指南 Hokuyo UTM 30LX 是一款为户外高速移动科研自动驾驶物理引擎上一篇MemcardRex终极指南5步掌握PS1记忆卡编辑与管理下一篇GetQzonehistory三步完成QQ空间历史说说完整备份的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑