激光雷达在 ROS2 里发的就是 LaserScan 这一包数据,一共就这些内容
激光雷达最终发出来的数据(完整版)
plaintext
msg.header
msg.angle_min # 扫描起始角度(弧度)
msg.angle_max # 扫描结束角度(弧度)
msg.angle_increment # 每个点之间的角度间隔
msg.time_increment # 两个测量点之间的时间
msg.scan_time # 扫完一整圈的时间
msg.range_min # 最小测距(比如 0.1m)
msg.range_max # 最大测距(比如 12m)
msg.ranges # 距离数组(核心!)
msg.intensities # 反射强度数组(大部分雷达用不上)
真正有用、你代码会用到的只有 4 个
- msg.ranges
-
一堆距离值,单位:米
-
比如: [0.5, 0.6, 0.58, inf, inf, 1.2, ...]
-
有多少个值,取决于雷达分辨率(一般 180/360/720 个点)
- msg.angle_min
雷达开始扫描的角度(弧度)
常见: -π 或 -π/2
- msg.angle_max
雷达结束扫描的角度
常见: π 或 π/2
- msg.angle_increment
每两个点之间差多少角度
比如 1° 雷达 ≈ 0.0174 rad
用最直白的话讲
雷达转一圈 → 测一堆距离 → 打包成 LaserScan 发给你
你拿到手就是:
一串角度 + 一串距离
你代码里真正用到的只有这几句
python
dist = msg.ranges[i] # 第 i 个方向的距离
angle = angle_min + i * inc # 第 i 个点对应的角度