资讯详情

资讯详情

Livox Mid-360与ROS2相机联合标定实战指南

1. 为什么选择 Mid-360 搭配 ROS2 做联合标定如果你手上正好有一台 Livox Mid-360又打算在 ROS2 环境下把它和相机拉到同一个坐标系里用那这套流程大概率是你绕不开的。Mid-360 这台激光雷达在近距补盲和低成本建图场景里出镜率很高视场角大、点云密度在近距离表现不错配合 ROS2 的分布式通信机制做多传感器融合的门槛比几年前低了不少。但真正上手你会发现驱动配置和联合标定这两步官方文档给的信息往往不够细尤其是标定环节参数怎么调、外参怎么验踩坑的人一抓一大把。这篇内容面向的是已经装好 Ubuntu 22.04、对 ROS2 有基本概念知道话题、节点、TF 是什么的开发者。如果你连 ROS2 都还没装建议先把 Humble 版本跑起来再回来看这篇。整篇会从驱动编译、点云话题验证一路讲到和相机的联合标定中间穿插我自己实测踩过的坑尽量让你少走弯路。先说清楚一件事Mid-360 和相机的联合标定本质是求两个传感器之间的外参也就是旋转矩阵和平移向量。这个外参决定了激光点云投影到图像上时能不能和像素对齐。标定不准后面的融合感知、着色、测距全是白搭。所以这一步值得花时间做扎实。2. Livox SDK2 与 ROS2 驱动的编译部署2.1 驱动选型为什么用 livox_ros_driver2 而不是老版本Livox 官方针对 ROS2 推出的驱动是livox_ros_driver2它依赖 Livox SDK2。这里有个容易混淆的点网上很多教程还在讲livox_ros_driverROS1 版本如果你照着 ROS1 的步骤在 ROS2 环境里操作编译阶段就会报一堆找不到roscpp的错误。所以第一步就要认准仓库名带2的那个。选它的理由很直接它原生支持 ROS2 的话题机制和 QoS 配置点云发布格式是sensor_msgs/PointCloud2能直接被rviz2、pcl_ros这些工具消费。而且 SDK2 对 Mid-360 的支持是官方明确维护的不像某些第三方驱动固件一升级就出问题。2.2 编译前的依赖检查在动手编译之前先把依赖补齐。我习惯先确认几个关键包是否到位sudo apt install -y build-essential cmake libapr1-dev libpcap-devlibpcap-dev这个包特别容易被忽略它是 SDK 做网络通信时需要的。缺了它编译到一半会提示找不到pcap.h。另外确认你的 ROS2 环境变量已经 source 过source /opt/ros/humble/setup.bash提示如果你用的是 zsh 而不是 bash记得把 setup.bash 换成对应的 setup.zsh否则环境变量加载不全后面 colcon 编译会找不到 ROS2 的 CMake 配置。2.3 工作空间搭建与编译实操我一般会单独建一个工作空间避免和别的项目混在一起mkdir -p ~/livox_ws/src cd ~/livox_ws/src git clone https://github.com/Livox-SDK/livox_ros_driver2.git克隆下来之后注意仓库里有个build.sh脚本官方推荐用它来编译因为它会自动处理 SDK 的编译和 ROS2 包的构建顺序。直接colcon build有时候会因为 SDK 没先编译好而失败。cd ~/livox_ws/src/livox_ros_driver2 ./build.sh humble这里的humble是你的 ROS2 发行版名称换成foxy或iron也行但要注意不同版本对 C 标准的要求略有差异。编译完成后cd ~/livox_ws source install/setup.bash编译过程中如果报Could NOT find PCL说明你系统里没装 PCL 库补一个sudo apt install libpcl-dev即可。这个错误在纯净系统上很常见。2.4 网络配置Mid-360 的 IP 那些事Mid-360 通过网口和主机通信默认出厂 IP 是192.168.1.1xx这个网段。你需要把主机的对应网卡配到同一网段。我习惯用nmcli或者图形界面的网络设置把有线网卡设成静态 IP比如192.168.1.50子网掩码255.255.255.0。配置完之后用ping 192.168.1.1xx测试连通性。如果 ping 不通先检查网线是不是插在了正确的网口上再确认防火墙没拦。我遇到过有人把雷达插在了一个 DHCP 的交换机上结果主机拿到的 IP 和雷达不在一个网段折腾半天。驱动的配置文件在livox_ros_driver2/config/目录下有个MID360_config.json。里面要填雷达的 IP 和主机 IP。这个文件改错了节点启动了也收不到数据。{ lidar_configs: [ { ip: 192.168.1.1xx, pcl_data_type: 1, pattern_mode: 0 } ], host_net_info: { cmd_data_ip: 192.168.1.50, push_data_ip: 192.168.1.50 } }pcl_data_type设为 1 表示发布的是 XYZI 格式的点云包含强度信息。如果你只需要坐标可以设成 0数据量会小一些。3. 点云话题验证与 RViz2 可视化排查3.1 启动节点后该看什么配置好之后启动驱动ros2 launch livox_ros_driver2 rviz_MID360_launch.py这个 launch 文件会同时拉起驱动节点和 rviz2。如果你只想启动驱动用msg_MID360_launch.py。启动后先别急着看 rviz打开另一个终端ros2 topic list你应该能看到/livox/lidar和/livox/imu两个话题。前者是点云后者是内置 IMU 的数据。如果话题列表里没有这两个说明驱动节点没起来或者配置有问题。再用ros2 topic hz /livox/lidar看一下发布频率。Mid-360 正常应该在 10Hz 左右。如果频率是 0 或者报错八成是网络没通或者配置文件 IP 填错了。3.2 RViz2 里点云不显示的几种可能rviz2 里点云不显示是最常见的问题我按排查优先级列一下Fixed Frame 没设对默认可能是map但驱动发布的数据 frame_id 是livox_frame。在 rviz2 左侧把 Fixed Frame 改成livox_frame点云立刻就出来了。QoS 不匹配ROS2 里话题的 QoS 策略如果不一致订阅端收不到数据。驱动默认用的是best_effort如果你在 rviz2 里手动加了 PointCloud2 显示但看不到检查一下 Reliability 是不是设成了Reliable改成Best Effort试试。点云尺寸太小Mid-360 的点很密rviz2 默认的点尺寸可能只有 1 像素远看就是一片黑。把 Size 调到 2 或 3颜色按 Intensity 或 Z 轴渲染效果会好很多。注意如果你在 rviz2 里看到点云是扇形的一片但中间有个空洞那大概率是雷达正下方或者正上方的盲区这是 Mid-360 的光学结构决定的不是故障。3.3 IMU 数据的初步检查Mid-360 内置的 IMU 数据通过/livox/imu发布。用ros2 topic echo /livox/imu看一眼正常应该有角速度和线加速度。这个 IMU 在后面做 LiDAR-IMU 标定或者紧耦合建图时会用到。如果你发现 IMU 数据一直是零检查一下固件版本早期固件对 IMU 的支持可能不完整。4. 相机联合标定的完整链路4.1 标定到底在求什么联合标定的目标是求相机坐标系和激光雷达坐标系之间的变换矩阵。数学上就是一个 4x4 的矩阵包含 3x3 的旋转和 3x1 的平移。有了它你就能把激光点云里的每个点投影到图像平面上判断这个点在图像里对应哪个像素。常用的方法有两类一类是基于标定板的比如用棋盘格或者 ArUco 码分别在图像和点云里检测标定板然后求解外参另一类是无靶标的靠特征匹配或者运动估计。对于 Mid-360 这种非重复扫描的雷达基于标定板的方法更稳因为它的点云在单帧内分布不均匀靠自然特征匹配容易翻车。4.2 标定板的选择与摆放技巧我推荐用 ArUco 码标定板原因是它在点云里更容易被稳定检测到。棋盘格在点云里只有边缘信息而 ArUco 码的四个角点在点云里可以通过强度或者几何特征提取出来。标定板的尺寸建议在 A3 左右太大不好摆太小点云里点不够。摆放位置要满足两个条件一是相机和雷达都能同时看到二是标定板要出现在点云的有效距离范围内。Mid-360 在 1 到 5 米范围内点云质量最好所以标定板放在离传感器 2 到 3 米的位置比较合适。采集数据的时候标定板要在不同姿态下出现至少 10 到 15 个不同的位姿。姿态要覆盖旋转和平移的各个方向不要只在一个平面上平移。我见过有人只在一个位置采了 20 帧结果标定出来的外参在别的区域偏差很大。4.3 基于 Autoware 标定工具的实际操作Autoware 提供了一套calibration_tools里面有专门做相机-激光联合标定的包。虽然它原本是为 Autoware 生态设计的但单独拿出来用也没问题。流程大致是这样先启动相机和雷达的驱动确保两个话题都在正常发布。然后启动标定工具在界面里分别标注标定板在图像和点云中的位置。工具会根据多组对应点求解外参。这里有个细节点云里选点的时候要选标定板平面的中心点而不是随便选一个角点。因为激光打在标定板上的点是一个面选中心点能减少单点噪声的影响。图像里选点则要选 ArUco 码的四个角点精度更高。4.4 标定结果的验证方法标定完之后千万别直接拿去用一定要验证。最直观的方法是把点云投影到图像上看边缘是否对齐。具体做法是写一个简单的 ROS2 节点订阅点云和图像用标定得到的外参把点云投影到图像平面然后发布一张叠加图。如果投影后的点云在物体边缘处和图像轮廓吻合说明标定基本靠谱。如果偏差很大或者在某些区域对齐、某些区域偏移那可能是标定板位姿覆盖不够需要重新采集数据。我自己的经验是重投影误差控制在 2 到 3 个像素以内就算合格。如果超过 5 个像素建议重标。5. 标定过程中那些没人告诉你的坑5.1 时间同步没做好标定全白费这是最隐蔽的坑。相机和雷达的数据如果时间戳对不齐你在标定的时候选的点根本就不是同一时刻的求出来的外参必然有偏差。ROS2 里可以用message_filters做时间同步或者用硬件触发让两个传感器同时曝光。Mid-360 支持 PTP 时间同步如果你的相机也支持尽量用硬件同步。软件同步的话确保两个驱动都用了系统时钟并且use_sim_time没有误开。5.2 点云去畸变不能省Mid-360 虽然是固态雷达但在运动过程中采集的点云仍然会有畸变。如果你在标定时用的是运动状态下采集的数据点云里的标定板可能已经变形了。解决办法是尽量在静止状态下采集标定数据或者用 IMU 数据做去畸变。5.3 外参的初始值很关键很多标定算法需要你给一个初始的外参估计。如果初始值离真实值太远优化容易陷入局部最优。我的做法是先用卷尺量一下相机和雷达之间的粗略距离旋转角度根据安装方式估一个大概值填进去作为初始值。这样收敛更快结果也更稳。5.4 标定板检测失败怎么办点云里检测标定板失败通常是因为标定板材质反光太强或者太弱。Mid-360 的激光在黑色哑光表面上反射很弱点云里可能只有零星几个点。建议用白色或浅灰色的标定板表面做哑光处理。如果实在检测不到可以在标定板后面垫一块硬纸板增加点云密度。6. 从标定到实际使用的衔接标定出来的外参最终要写进你的融合节点里。通常是一个 YAML 文件包含旋转矩阵和平移向量。在 ROS2 里你也可以把它发布成 TF 变换这样其他节点通过 TF 树就能直接查询到相机和雷达的相对关系。发布 TF 的时候注意坐标系命名要统一。我一般用camera_link和livox_frame作为两个传感器的 frame_id然后在 TF 树里建立它们之间的变换。这样在 rviz2 里可以同时显示点云和图像并且能直观看到对齐效果。如果你后续要做点云着色或者融合感知这个外参就是基础。标定一次不够建议每隔一段时间或者传感器重新安装后重新标定。我自己的习惯是每次拆装设备后都跑一遍标定流程虽然麻烦但能避免很多莫名其妙的问题。最后分享一个小技巧标定数据采集的时候用ros2 bag record把点云和图像都录下来这样即使标定工具当场出问题你也能事后离线重标不用重新摆标定板。这个习惯帮我省过好几次事。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →