0. 启动雷达
如果跑 FAST-LIO2 这类紧耦合算法,CustomMsg 是首选,它能提供算法所需的全部原始信息;
如果跑 Cartographer 这类通用SLAM,PointCloud2 格式以保证兼容性。
我是后者,选择PointCloud2。启动Livox雷达驱动并确认话题正常发布:
bash
roslaunch livox_ros_driver2 rviz_MID360_launch.py
新开一个终端,确认雷达话题已发布:
bash
source ~/livox_ws/devel/setup.bash
rostopic list | grep livox
- 录制多个指定话题
bash
# 指定输出文件名
ros2 bag record -o office /livox/lidar /livox/imu
3. 查看bag信息
bash
ros2 bag info office/office_0.db3
4. 播放bag包
bash
# 正常播放
ros2 bag play your_file.bag
# 循环播放
ros2 bag play -l your_file.bag
# 加速播放(2倍速)
ros2 bag play -r 2 your_file.bag
# 从第10秒开始播放
ros2 bag play -s 10 your_file.bag
# 只播放特定话题
ros2 bag play your_file.bag --topic /livox/lidar
注意事项
1. 录制前规划
-
磁盘空间:Mid-360点云+IMU数据,每分钟约200-500MB,请确保有足够空间
-
文件命名 :使用有意义的名称,如
hospital_1st_floor_20250320.bag -
创建专用目录 :建议建立
bags/文件夹统一管理
2. 录制过程中的操作
-
启动录制后,再控制机器人移动
-
停止录制:在录制终端按
Ctrl+C -
可以录制完整的建图路径,方便后续复现
放在最后
如何给mid360供电?
电动车上的12V蓄电池,可以用来给mid360供电吗?
**可以,但需要确保电源稳定可靠,并且额定功率留出足够余量。**Mid-360的供电要求非常明确,对电压的容忍度很高:
| 参数 | Mid-360 规格 | 12V 蓄电池 |
|---|---|---|
| 供电电压范围 | 9V - 27V DC | 满电约12.6V-13V,放电末期约10.5V |
| 典型功耗 | 6.5 W (约0.54A @ 12V) | 可轻松提供数安培电流 |
| 低温峰值功率 | 自加热模式下可达 14W (约1.2A @ 12V) | 需确保电源线及保险能承载此电流 |
直接夹上电线虽然能转,但要做到长期稳定运行,必须处理好以下两点:
1. 电源线的"压降陷阱"
这是最容易被忽视的问题。Mid-360的原装线缆或推荐的兼容线缆,通常使用 0.75mm² 或更细的线材。如果从电池到雷达的线缆过长,细导线会产生明显的电压下降。
-
风险:启动瞬间电流较大,如果线缆过长过细,到达雷达端的电压可能已低于其工作范围,导致雷达反复重启或工作异常。
-
解决方案 :尽量缩短线缆 长度。如果必须用长线,使用更粗的线缆(如0.75mm²或1.0mm²以上),或适当提高电源电压(例如用16V电源)来补偿线损,但绝不能超过27V。
2. 考虑低温环境下的"功率余量"
如果你的电动车在冬天室外使用,这一点非常重要。Mid-360在低于0℃时会启动自加热模式 ,此时功耗会从平时的6.5W飙升到14W。
-
风险:如果供电系统(电池、线缆、保险丝)刚好按6.5W的规格配置,低温下可能因功率不足导致雷达无法启动或突然掉电。
-
解决方案:为电源系统留有充足的余量,确保在低温峰值功率下仍能稳定供电。
是否需要屏蔽角度?
手持Mid360录制bag, 需要像2d雷达那样设置屏蔽角度吗?
完全不需要设置 。2D单线激光雷达(如思岚A1/A2、北阳等)的扫描平面是固定的一个水平面:
-
视场角有限 :通常只有270°或360°水平扫描,但垂直方向只有一条线
-
安装位置敏感:安装在机器人上时,扫描平面会穿过车体本身
-
产生虚假障碍物:如果不屏蔽穿过车体的角度,雷达会"看到"自己的机器人,在地图上形成永久性的虚假障碍物
因此,2D雷达必须通过配置文件设置angle_min和angle_max,屏蔽掉被车体遮挡的角度范围。
1. Mid-360是3D雷达,拥有水平360°、垂直59°的全向视场角:
-
垂直59°意味着它既能"看天"也能"看地"
-
手持使用时,扫描范围覆盖前方、地面、天花板、左右两侧全方位
2. 近盲区仅10cm: Mid-360的最小探测距离低至10厘米。手持操作时,雷达与人体之间的距离通常大于10cm,身体本身不会成为持续的遮挡物。
3. 非重复扫描特性: Mid-360采用非重复扫描模式,点云会随时间累积填充视场内的空间,不像机械式雷达那样有固定的扫描线。这意味着:
-
不会有固定的"扫描线穿过身体"的问题
-
手持移动时,身体遮挡的区域会随着姿态变化被其他角度的扫描补全
根据Livox官方展示的手持扫描仪案例,Mid-360在手持设备上的典型安装方式是对地倾斜20°:
bash
安装建议:对地倾斜 20° 安装
覆盖范围:地面 + 前方 + 天花板
操作方式:无需刻意调整角度,即可实现全方位数据采集
这种安装方式充分利用了59°垂直视场角,手持走动时雷达可以完整覆盖行进方向的所有区域,完全不存在需要屏蔽的"死角"。
虽然不需要设置角度屏蔽,但有一个细节值得留意:点云中的"零点"处理。
当探测距离超出量程(如>100m)或前方无物体时,Mid-360输出的点云坐标为(0,0,0)。这些零值点位于雷达坐标系原点附近,属于无效数据。如果你的SLAM算法对近处点敏感,可以在预处理阶段滤除这些接近原点的点------不过这与2D雷达的"屏蔽角度"是两回事,通常通过在代码中判断sqrt(x^2+y^2+z^2) < threshold就能解决。
关于MID360的数据格式
MID360提供的官方SDK支持三种输出格式:
| xfer_format | 格式名称 | ROS1 | ROS2 | 说明 |
|---|---|---|---|---|
| 0 | PointXYZRTLT | ✅ | ✅ | 标准PointCloud2 + 时间戳扩展 |
| 1 | CustomMsg | ✅ | ✅ | Livox专用格式,保留完整信息 |
| 2 | PointXYZI | ✅ | ❌ | PCL标准格式(仅ROS1支持) |
| 维度 | PointCloud2 (PointXYZRTLT) | CustomMsg |
|---|---|---|
| 数据完整性 | 丢失tag和独立line信息 | 保留全部原始信息 |
| 时间精度 | 毫秒级(依赖header) | 纳秒级(每个点独立) |
| 多回波信息 | 不支持 | 支持(tag字段) |
| 噪点识别 | 不支持 | 支持(tag编码) |
| 线束分割 | 需额外解析 | 直接提供line字段 |
| 通用性 | ✅ 所有ROS工具链支持 | ⚠️ 需专用节点处理 |
| 兼容性 | 与PCL、RViz、Cartographer无缝集成 | 需转换或专用适配(如FAST-LIO原生支持) |
PointCloud2是ROS的标准点云格式 (sensor_msgs/PointCloud2),Livox驱动在此基础上扩展了时间戳字段,形成了 PointXYZRTLT 变体。核心结构:
bash
sensor_msgs/PointCloud2
├── header (时间戳、坐标系)
├── height/width (点云维度)
├── fields[] (字段定义:x, y, z, intensity, timestamp等)
├── point_step (每个点的字节数)
├── row_step (每行的字节数)
├── data[] (连续存储的点数据)
└── is_dense (是否有无效点)
存储方式 :所有点的数据是扁平化存储 的,通过 fields 定义每个字段的偏移量和类型。
在 PointXYZRTLT 格式中,通过 fields 定义以下字段:
| 字段 | 含义 | 说明 |
|---|---|---|
| x, y, z | 三维坐标 | 标准字段 |
| intensity | 反射强度 | float32类型 |
| timestamp | 时间戳 | Livox扩展字段,每个点独立时间 |
| ring/line | 线号 | 可选,MID360支持 |
CustomMsg是Livox雷达的专用格式 (livox_ros_driver2/msg/CustomMsg),专为保留Livox原始数据设计。核心结构:
bash
livox_ros_driver2/CustomMsg
├── header
├── timebase (基准时间,纳秒)
├── point_num (点云数量)
├── lidar_id (雷达设备ID)
└── points[] (CustomPoint数组)
每个 CustomPoint 包含:
| 字段 | 类型 | 说明 |
|---|---|---|
offset_time |
uint32 | 相对于基准时间的偏移(纳秒级) |
x, y, z |
float32 | 三维坐标(米) |
reflectivity |
uint8 | 反射率(0-255) |
tag |
uint8 | 多回波和噪点信息(8位编码) |
line |
uint8 | 激光线号 |
tag字段(8位编码)
bash
bit7 bit6 | bit5 bit4 | bit3 bit2 | bit1 bit0
保留 回波序号 强度噪点 空间噪点
-
回波序号(bit5-4):区分多回波(00=第0回波,01=第1回波...),对穿透玻璃等场景有用
-
强度噪点置信度(bit3-2):标识是否为灰尘、雨雾等产生的弱回波噪点
-
空间噪点置信度(bit1-0):标识是否为拉丝状噪点
line字段
标识该点来自雷达的哪条激光线。对于MID360,提供有效的线号信息,可用于按线分割点云或进行线束级处理。
offset_time+timebase
组合成纳秒级精确时间戳,比PointCloud2的时间精度更高,对运动补偿至关重要。