ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

激光雷达与IMU联合标定实战:从原理到LIO-SAM避坑指南

激光雷达与IMU联合标定实战:从原理到LIO-SAM避坑指南 1. 为什么激光雷达和IMU的联合标定值得你花时间如果你正在做激光雷达SLAM尤其是用LIO-SAM这类紧耦合方案那激光雷达和IMU的联合标定这件事早晚都得面对。我见过太多人在这上面栽跟头——建图飘得亲妈都不认识回环检测死活不触发重力方向歪到离谱最后排查一圈发现是外参没标定好。这不是危言耸听LIO-SAM对激光雷达和IMU之间的外参非常敏感尤其是旋转外参差个一两度建图效果就能从“能用”掉到“没法看”。LIO-SAM的核心思路是把激光雷达的scan matching和IMU的预积分紧耦合在一起IMU提供高频的运动先验激光雷达提供低频但精确的几何约束。这个融合框架要正常工作前提是它得知道IMU和激光雷达之间的相对位姿关系——也就是外参。外参包括平移和旋转两部分平移影响相对小一些旋转一旦有偏差IMU积分出来的姿态和激光雷达匹配出来的姿态就对不上优化过程直接跑偏。这篇文章面向的是已经跑通LIO-SAM基本流程、但建图效果不理想的同学也适合刚接触激光雷达惯性融合、想搞清楚标定到底在标什么的人。我会从标定的基本原理讲起然后手把手走一遍完整流程最后把我在实际项目中踩过的坑和排查方法都倒出来。你不需要有很深的数学背景但得对ROS的基本操作和LIO-SAM的启动流程有概念。2. 联合标定到底在标什么核心概念拆解2.1 外参和内参的区别别搞混了很多人一上来就说“我要标定IMU”但其实标定分两种内参标定和外参标定。内参是传感器自身的特性参数比如IMU的零偏、尺度因子、轴间非正交误差激光雷达的测距精度、角度分辨率这些。外参是两个传感器之间的相对位姿通常表示为一个旋转矩阵加一个平移向量从IMU坐标系到激光雷达坐标系的变换。LIO-SAM需要的主要是外参具体来说是IMU到激光雷达的旋转和平移。内参方面消费级IMU的零偏和噪声密度一般用出厂值或者Allan方差标定结果就行LIO-SAM的配置文件里也有对应的噪声参数可以调。但外参如果不准后面怎么调参都是白搭。2.2 旋转外参为什么比平移外参更致命平移外参的误差主要影响的是杠杆臂效应——当载体做旋转运动时IMU和激光雷达因为安装位置不同感受到的线速度不一样。但LIO-SAM的优化框架对平移误差有一定的容忍度因为激光雷达的scan matching会不断修正位置估计。旋转外参就不一样了。IMU测量的是角速度和加速度角速度积分得到姿态变化加速度在去除重力后积分得到速度。如果旋转外参有偏差IMU积分出来的姿态变化方向就和激光雷达实际观测到的运动方向不一致。LIO-SAM在优化时会把这种不一致当成误差来最小化结果就是要么优化不收敛要么收敛到一个错误的结果——建图飘、重力方向歪、Z轴漂移都是这么来的。我实测过旋转外参偏差超过2度LIO-SAM在长廊环境里建图就会明显分层偏差超过5度基本就没法用了。2.3 LIO-SAM对标定精度的实际需求LIO-SAM的配置文件params.yaml里有一个extrinsicRot和extrinsicTrans参数分别对应旋转外参和平移外参。旋转外参以3x3矩阵形式给出平移外参是3x1向量。官方示例里给的是Identity矩阵和零向量意思是假设IMU和激光雷达坐标系完全对齐、位置重合——这在实际中当然不可能。那标定到什么精度够用根据我的经验旋转外参的误差控制在1度以内平移外参误差控制在2厘米以内LIO-SAM就能稳定工作。当然这取决于你的应用场景如果是室内小场景要求可以放宽如果是室外大场景或者高速运动要求就更严。3. 标定前的准备工作硬件、软件和数据3.1 硬件连接与时间同步检查标定之前先确认你的硬件连接没问题。激光雷达和IMU通常通过不同的接口连接到主机激光雷达走网口或USBIMU走USB或串口。如果你用的是集成式的激光雷达惯性模组那硬件连接就简单很多但时间同步仍然要检查。时间同步是标定的前提。如果激光雷达和IMU的时间戳对不齐标定出来的外参肯定不准。检查方法很简单录一段包用rosbag info看两个话题的时间戳分布或者用rqt_plot把两个话题的时间戳画出来对比。如果偏差在毫秒级以内问题不大如果偏差到几十毫秒就得先解决时间同步。注意有些IMU的驱动会自己打时间戳而不是用ROS的ros::Time::now()这种情况下要确认驱动的时间戳来源是否和激光雷达一致。3.2 需要的软件工具和ROS包标定外参常用的工具是lidar_align和imu_utils但lidar_align主要用于激光雷达和里程计的标定对IMU外参的标定支持有限。更常用的方案是手动标定加优化或者用kalibr做相机-IMU标定再迁移思路。对于LIO-SAM的外参标定我推荐两种方案一是用lidar_imu_calib这类专门的开源工具二是手动测量加迭代优化。前者适合有标定板的情况后者适合没有标定板、只能靠环境特征的情况。软件方面你需要ROSMelodic或Noetic都行、LIO-SAM的编译环境、rosbag工具以及一个能可视化点云和轨迹的工具比如rviz或cloudcompare。3.3 数据采集怎么录包才有用数据采集是标定中最容易被忽视的环节。很多人随便录一段包就开始标定结果标出来的参数根本不能用。正确的做法是选择特征丰富的环境比如有墙壁、柱子、地面纹理的室内空间避免空旷场地或纯走廊。运动要充分激励所有轴分别绕X、Y、Z轴旋转做8字运动前后左右移动都要有。运动速度不要太快避免运动模糊和IMU饱和。录包时间控制在1-2分钟太短激励不充分太长数据处理慢。录包时同时录激光雷达点云、IMU数据、以及TF变换如果有的话。命令大概是rosbag record /lidar_points /imu/data /tf /tf_static录完之后用rosbag info确认数据完整没有丢帧。4. 手把手标定流程从零到可用的外参4.1 第一步确认IMU内参和噪声参数在标定外参之前先确认IMU的内参和噪声参数。LIO-SAM的配置文件里有四个噪声参数imuAccNoise、imuGyrNoise、imuAccBiasN、imuGyrBiasN。这些参数可以从IMU的数据手册查到也可以用Allan方差标定工具如imu_utils标定。如果你用的是消费级IMU比如MPU6050或ICM20602数据手册里的噪声密度值一般够用。如果用的是工业级IMU建议做一次Allan方差标定精度会更高。实操心得Allan方差标定需要静止录制至少2小时的数据很多人嫌麻烦就跳过了。但实测下来用数据手册值和用Allan方差标定值LIO-SAM的建图效果差别不大除非你的IMU特别差。所以时间紧的话可以先跳过这一步。4.2 第二步粗测外参——手动测量加坐标变换外参的粗测可以用手动测量的方式。具体来说就是测量IMU和激光雷达在载体上的相对位置和朝向。平移外参直接用尺子量旋转外参根据安装方式估算。比如如果IMU和激光雷达都是水平安装IMU的X轴朝前激光雷达的X轴也朝前那旋转外参就是单位矩阵。如果IMU旋转了90度安装那旋转外参就是绕Z轴旋转90度的矩阵。手动测量的精度有限但可以作为迭代优化的初值。把粗测的外参填入LIO-SAM的配置文件跑一遍建图观察效果。如果建图明显飘说明外参偏差较大需要进一步优化。4.3 第三步用LIO-SAM自带的优化流程迭代外参LIO-SAM本身没有自动标定外参的功能但你可以通过迭代的方式手动优化。具体做法是用粗测外参跑一遍LIO-SAM保存轨迹和点云地图。在rviz里观察点云地图的质量重点看墙壁是否重影、地面是否平整、回环是否闭合。如果发现某个方向的偏差调整对应的旋转外参分量重新跑一遍。重复上述过程直到建图质量满意为止。这个过程听起来很笨但实际用起来效果不错。我一般会先调旋转外参的Roll和Pitch再调Yaw最后调平移。每次调整幅度控制在0.5度以内避免跳过头。4.4 第四步用外部工具做精细标定如果手动迭代效果不理想可以用外部工具做精细标定。lidar_imu_calib是一个不错的选择它通过最小化激光雷达点云和IMU积分轨迹之间的误差来优化外参。使用流程大概是安装lidar_imu_calib包。配置激光雷达和IMU的话题名称。播放录好的包启动标定节点。等待优化收敛保存标定结果。标定结果会输出一个旋转矩阵和平移向量直接填入LIO-SAM的配置文件即可。注意lidar_imu_calib对标定数据的要求比较高运动不充分或环境特征少都会导致标定失败。如果标定结果和手动测量值差很多先检查数据质量不要盲目相信工具输出。4.5 第五步验证标定结果——建图质量检查清单标定完成后怎么判断结果好不好我整理了一个检查清单检查项合格标准不合格表现墙壁重影墙壁边缘清晰无分层墙壁出现明显重影或分层地面平整度地面点云在一个平面上地面点云起伏明显回环闭合回到起点时轨迹闭合轨迹有明显偏移重力方向Z轴与地面垂直Z轴倾斜或漂移长廊直线度长廊两侧墙壁平行墙壁弯曲或交叉如果以上检查项都合格说明外参标定得不错。如果有不合格项回到第四步继续优化。5. 避坑指南我踩过的那些坑和解决方法5.1 坑一时间戳不同步导致标定完全失效这是我遇到最多的坑。激光雷达和IMU的时间戳如果不同步标定出来的外参完全没有意义。表现是标定结果每次都不一样或者标定结果和手动测量值差很多。解决方法先检查时间同步。如果激光雷达支持PPS或PTP同步尽量用硬件同步。如果不支持用软件同步比如用message_filters做时间对齐。实在不行就在录包时用同一个主机的时间戳避免用传感器自己的时间戳。5.2 坑二运动激励不充分导致外参不可观标定外参需要充分激励所有轴。如果只做平面运动Roll和Pitch方向的外参就不可观标定结果会在这两个方向上随机漂。表现是标定结果中Roll和Pitch值每次都不一样或者和手动测量值差很多。解决方法录包时一定要做充分的旋转运动尤其是绕X轴和Y轴的旋转。8字运动、S形运动、原地旋转都要有。如果条件允许把传感器拿在手里做各种姿态的运动激励效果最好。5.3 坑三IMU内参不准导致外参标定偏差IMU内参不准会影响外参标定。比如IMU的零偏如果没标定积分出来的姿态会漂移标定算法会把这种漂移误认为是外参误差。表现是标定结果中旋转外参与手动测量值有系统性偏差。解决方法先标定IMU内参至少把零偏标出来。如果IMU支持在线零偏估计确保这个功能开启。LIO-SAM本身也有IMU零偏估计但那是优化过程中的在线估计不能替代标定。5.4 坑四环境特征少导致标定失败标定需要环境特征。如果环境太空旷激光雷达点云匹配会失败标定算法没有足够的约束来优化外参。表现是标定过程中优化不收敛或者标定结果明显不对。解决方法选择特征丰富的环境录包比如有墙壁、柱子、家具的室内空间。避免在空旷场地或纯走廊录包。如果只能在空旷环境录可以在环境中临时放置一些箱子或板子增加特征。5.5 坑五LIO-SAM配置文件参数写错这个坑很低级但确实经常发生。LIO-SAM的配置文件里extrinsicRot是3x3矩阵extrinsicTrans是3x1向量。很多人把旋转矩阵写成了欧拉角或者把平移向量的单位搞错了米和厘米混用。表现是LIO-SAM启动后建图完全乱套或者直接崩溃。解决方法仔细检查配置文件格式。旋转矩阵按行展开平移向量单位是米。如果不确定先用单位矩阵和零向量跑一遍确认LIO-SAM能正常工作再填入标定值。6. 标定后的调参与优化让LIO-SAM跑得更稳6.1 关键参数调整噪声参数和优化参数外参标定好之后LIO-SAM的建图效果还取决于噪声参数和优化参数。imuAccNoise和imuGyrNoise影响IMU预积分的权重值越小表示越信任IMU。如果建图飘可以适当调大这两个值降低IMU的权重。imuAccBiasN和imuGyrBiasN影响零偏估计的收敛速度值越大收敛越快但可能不稳定。优化参数方面lidarSmoothness影响激光雷达scan matching的平滑度odometrySurfLeafSize影响特征提取的密度。这些参数需要根据实际场景调整没有万能值。6.2 建图效果不佳时的排查顺序如果标定后建图效果仍然不理想按以下顺序排查检查时间同步确认激光雷达和IMU时间戳对齐。检查外参确认旋转矩阵和平移向量正确。检查IMU内参确认噪声参数和零偏参数合理。检查环境特征确认场景不是太空旷。检查运动速度确认没有运动模糊或IMU饱和。调整噪声参数和优化参数观察效果变化。这个顺序是从硬件到软件、从数据到算法逐步排查避免盲目调参。6.3 长期使用中的外参漂移问题外参标定不是一劳永逸的。长期使用中传感器可能因为振动、温度变化等原因发生微小位移导致外参漂移。表现是之前建图效果很好用了一段时间后效果变差。解决方法定期检查外参尤其是在剧烈振动或温度变化大的场景使用后。如果发现外参漂移重新标定。有些系统支持在线外参估计可以自动补偿漂移但LIO-SAM本身不支持需要外部工具辅助。7. 常见问题速查表问题可能原因解决方法建图飘墙壁重影旋转外参不准重新标定旋转外参重力方向歪Roll或Pitch外参不准调整Roll和Pitch外参回环不闭合平移外参不准或时间不同步检查平移外参和时间同步标定结果每次不一样运动激励不充分增加旋转运动充分激励所有轴标定优化不收敛环境特征少或数据质量差换特征丰富的环境重新录包LIO-SAM启动崩溃配置文件格式错误检查旋转矩阵和平移向量格式长廊建图弯曲Yaw外参不准调整Yaw外参Z轴漂移重力方向估计不准检查IMU内参和Roll/Pitch外参8. 个人实操体会与建议我在多个项目中用LIO-SAM做过建图外参标定这件事说难不难说简单也不简单。最关键的是要有耐心不要指望一次标定就能完美。我的习惯是先手动粗测跑一遍建图看效果然后迭代优化最后用工具精细标定。整个过程快的话半天慢的话一两天。另外标定数据比标定算法重要。我见过很多人纠结用哪个标定工具却忽略了数据采集的质量。实际上只要数据采集到位——时间同步、运动充分、环境特征丰富——用最简单的迭代方法也能标出可用的外参。反过来数据质量差再好的工具也标不准。最后分享一个小技巧标定完成后把外参和标定数据保存下来建个标定档案。下次再用同一套硬件时直接复用外参省去重新标定的时间。如果硬件有变动再重新标定。这个习惯能帮你省下不少时间。
返回列表