点击下方卡片,关注「3D视觉工坊」公众号
选择星标,干货第一时间送达
来源:3D视觉工坊 | 文末进3D视觉交流群
3D视觉硬件汇总,包括结构光3D相机(支持室内外,焊接,机械臂抓取等场景),相位偏折术、散斑、机械臂抓取和焊接软件,手持扫描仪(支持定位、重定位、稠密建图)、四足狗和小车定位和导航,底盘。点击->查看详情:
一、从“转起来”到“定得准”:旋转LiDAR的尴尬处境
想象一下这个场景:你手上拿着一台带有旋转机构的LiDAR设备,马达带动激光雷达不停旋转,原本只能扫一个方向的传感器瞬间拥有了近乎全景的视野——在狭窄的楼道里它能看清墙壁,在开阔的森林里它能扫到树冠,在复杂的建筑中它能覆盖每一个角落。
听起来很完美,对吧?
但问题也随之而来。马达转轴和LiDAR的镜面转轴大概率不是同一条线——机械加工有误差,装配有偏差,用久了还会有形变。这意味着你读到的每一个激光点的坐标,都是错的。错得越多,建出来的地图就越歪。更麻烦的是,不同的安装方式(水平旋转、俯仰摆动、斜着转)需要完全不同的标定参数,现有方法每种装法都要重新写一套公式,通用性极差。
这就是旋转驱动LiDAR(spinning actuated LiDAR)系统面临的双重困境:
困境一:标定难。 现有方法要么依赖特定的标定靶标,要么只适用于特定的安装构型。一个方法只能标“水平旋转”的,换个“俯仰摆动”的就不work了。而且某些安装角度下,部分参数根本不可观测——你永远不知道那个偏差是多少。
困境二:定位难。 马达一转,LiDAR的视野就在扫来扫去。当它扫到白墙、走廊、楼梯井这些没有特征的区域时,传统LiDAR里程计(LIO)就抓瞎了——没有特征点就没法匹配,定位就开始漂。有人提出让马达根据环境动态调整转速,没特征的地方转慢点、多扫几圈,有特征的地方转快点——但问题是,马达的转速不能瞬间跳变,上一帧10 rad/s、下一帧突然变20 rad/s,物理上根本做不到,就算做到了也会把整个系统的动平衡搞崩。
LM-Calibr & EVA-LIO正是为了解决这两个问题而生的。
这套工作由广东工业大学自动化学院低空感知探测与智能物联网技术教育部工程研究中心与新加坡南洋理工大学合作完成,发表于IEEE Robotics and Automation Letters (RA-L) 2026,代码和硬件设计已全面开源。它用一个统一的数学模型解决了所有安装构型的标定问题,再用一套自适应的定位算法让旋转LiDAR在无特征区域也能稳健运行。
二、LM-Calibr:一个数学模型,通吃所有安装方式
2.1 问题的本质:为什么现有方法“各说各话”?
旋转驱动LiDAR系统的本质是一个1自由度机械臂:马达是“基座”,LiDAR是“末端执行器”。两者之间的变换关系可以用一组参数来描述。
但现有方法的问题在于:它们针对不同的安装方式,定义了一组完全不同的参数。
比如水平旋转(LiDAR绕垂直轴转),有的方法只标yaw和pitch;俯仰摆动(LiDAR绕水平轴转),有的方法只标roll和pitch。换一种装法,就得换一套公式。更麻烦的是,在某些特定角度下,部分参数会变得不可观测——比如水平旋转时如果LiDAR的y轴恰好和转轴平行,pitch就标不出来了。
这就好比你要给不同型号的汽车换轮胎,结果每个型号都得用一套完全不同的工具——换一辆车就得重新买一套扳手,显然不现实。
2.2 DH Convention:机器人学里的“万能扳手”
LM-Calibr的核心创新,是把机器人学里的Denavit-Hartenberg(DH)约定搬过来用。
DH约定是机器人运动学里描述连杆之间变换关系的标准方法。在LM-Calibr里:
马达坐标系 {M} 相当于机器人的基座 LiDAR坐标系 {L} 相当于机器人的末端执行器 两者之间的变换由 8个DH参数 描述:
其中 由马达编码器直接测量, 来自机械图纸,剩下的6个参数里只有4个需要标定。激光点在马达坐标系中的位置由下式给出:
其中:
这个公式看起来复杂,但本质就是:不管你是什么安装方式,用这套参数都能描述。

对于旋转式全向LiDAR(镜面绕z轴转),需要标定的是 ;对于旋转式非全向LiDAR(镜面绕x轴转),需要标定的是 。唯一会出问题的安装角度(比如全向LiDAR的镜面转轴和马达转轴平行),在物理上对增大视野毫无意义,实际中根本不会这么装。
通过可观性分析可以确认:DH约定能够表示LiDAR-马达系统的任意安装构型,具有极强的通用性和可移植性。
2.3 标定原理:点云越“薄”,参数越准
标定的原理其实很直观:如果DH参数不对,转换后的点云会有明显的畸变——原本应该落在一个平面上的点,会散成一团。
LM-Calibr利用的就是这个现象。它让系统静止一段时间,采集一帧点云,用当前的DH参数将其从LiDAR坐标系转换到马达坐标系。然后对转换后的点云做自适应体素化(adaptive voxelization),提取出所有的平面特征。最后用Levenberg-Marquardt算法优化DH参数,让每个平面特征上的点尽可能“薄”——也就是让协方差矩阵的最小特征值尽可能小。
优化问题的代价函数定义为:
其中:
这里 是第 个平面特征,包含 个激光点, 和 分别是该平面特征的质心和协方差矩阵, 表示矩阵 的最小特征值。
粗到细的策略让标定更加鲁棒:前两次迭代体素大小1米,第三四次0.5米,之后0.25米。这样即使初始参数偏差很大(旋转偏差15°、平移偏差0.15米),也能稳定收敛。
2.4 标定精度验证
蒙特卡洛仿真:50次独立标定,DH参数从均匀分布中采样。图2总结了仿真中的误差分布。

结果显示平移误差<1.5mm,角度误差<0.04°——不管场景怎么变、安装角度怎么变、初始值怎么偏,LM-Calibr都能稳收敛。
不同噪声水平对比:把LiMo-Calibr拉出来遛一遛。图3展示了在不同传感器类型、场景和初始猜测误差下的角度和平移误差。

当初始误差从0逐渐增大到0.2 rad/0.2 m时,LM-Calibr的误差始终稳定在0.04°/1mm以下;而LiMo-Calibr的误差随噪声线性增长,高误差条件下直接崩盘。
真实场景验证:在结构化、半结构化和森林三种真实场景中(图4a-c),分别采集4组序列,每组跑5次。然后在第四个结构化场景中用三块正交平面评估点面距离(图4d-e)。

图5展示了点面距离的分布——LM-Calibr的距离<1cm,和LiDAR自身的测量噪声相当;LiMo-Calibr则因Mid360的x轴与转轴对齐而出现严重退化。

图6对比了两种方法的平均耗时和平均激光点数。

三、EVA-LIO:让旋转LiDAR在无特征区域“不迷路”
标定解决了“点云在哪儿”的问题,但定位解决的是“我在哪儿”的问题。
3.1 核心矛盾:扫得快 vs. 定得准
旋转LiDAR的优势是视野广,但代价是:它不可避免地会扫到没有特征的区域——比如一堵白墙、一条长长的走廊、一个空旷的楼梯间。
传统LIO在这种情况下会“失明”——没有特征点就没法匹配,定位就开始漂。有人提出让马达根据环境动态调整转速,但问题是:马达转速不能瞬间跳变,否则动平衡会崩,能耗也会飙升。在长走廊里,如果要让LiDAR持续覆盖有特征的区域,需要的转速可能高达31.4 rad/s——远超实际马达的物理极限。
3.2 EVA-LIO的三个杀手锏
EVA-LIO用三个设计解决了这个矛盾:
第一,用基座IMU而不是LiDAR自带的IMU。 LiDAR自带的IMU在马达高速旋转时容易饱和——自运动加上马达旋转可能超出IMU的量程。基座IMU装在马达下面,不受旋转影响,能提供更稳定的初始估计。
第二,为每个激光点建模不确定性。 LiDAR的采样率超过10kHz,但编码器的采样率只有约1kHz——这意味着每个激光点对应的马达转角只能靠插值估算,存在误差。EVA-LIO为每个点显式建模这个不确定性,在定位时降低不可靠点的影响。
激光点噪声 的协方差为:
其中 是激光点的方向向量, 是测距值。编码器角度误差同样建模为高斯噪声 ,最终传递到世界坐标系中每个激光点的协方差 。
第三,环境自适应模块。 这是EVA-LIO最核心的创新。它维护三个不同分辨率的体素地图(0.25m、0.5m、1.0m),并配有三个对应的下采样率(0.15m、0.2m、0.25m)。每来一帧点云,环境分析模块先构建一个全景地图,然后计算空间尺度 :
这个 值反映了环境的“开阔程度”——值小说明环境狭窄(如楼梯间),值大说明环境开阔(如室外广场)。根据 的大小,EVA-LIO自动选择对应的地图分辨率和下采样率。
狭窄环境用细粒度(0.25m地图+0.15m下采样),保证定位精度;开阔环境用粗粒度(1.0m地图+0.25m下采样),保证计算效率。马达全程以最高速旋转(7.85 rad/s或14 rad/s),不用为了“看特征”而频繁变速。
最终的状态估计通过最大后验(MAP)估计求解:
其中 , 是点到面的残差, 是IMU预积分约束。
四、实验验证:碾压式的全面领先
4.1 EVA-LIO:挑战场景全部通吃
EVA-LIO与Voxel-SLAM、Point-LIO、Fast-LIO2、Ada-LIO、CTE-MLO、Traj-LO等SOTA方法进行全面对比。表II汇总了所有序列的绝对轨迹误差(ATE)、端到端误差(E2E)、耗时和内存占用。

Cave(洞穴):狭窄通道+重复结构。图7(a)展示了Avia在avia_CA序列中连续五帧的扫描模式。当Avia靠近岩壁时,其他LIO因特征不足全部退化;EVA-LIO稳如老狗。

Corridor(长走廊):重复对称结构,图7(b)显示Avia的扫描会短暂扫到无特征区域。UA-MPC策略在此场景需要31.4 rad/s的转速——远超马达可行性。Point-LIO、Fast-LIO2、Ada-LIO、CTE-MLO、Traj-LO全部漂移发散(图7d-h);EVA-LIO和Voxel-SLAM凭借逐点不确定性估计幸存下来(图7c)。
Botanic Garden(植物园):重复纹理+非结构化环境。Ada-LIO、CTE-MLO、Traj-LO漂移发散,Point-LIO和Fast-LIO2产生严重错位(图7i-j);EVA-LIO依然精准(图7k)。
真实世界avia_real:图8展示了真实世界序列的建图结果。序列包含长走廊和楼梯间等挑战场景(图8a)。在楼梯间,LiDAR的扫描会暂时覆盖特征稀疏的区域。Ada-LIO、CTE-MLO和Traj-LO在长走廊中发散。Voxel-SLAM在根体素0.5m时在楼梯间漂移(图8c),在根体素0.25m时在走廊漂移(图8d)。Point-LIO出现鬼影(图8e),Fast-LIO2在走廊严重扭曲(图8f)。EVA-LIO的环境分析模块在楼梯间选择窄地图 ,在走廊选择正常地图 ,确保建图准确(图8b)。

真实世界七层楼mid_real:图9展示了mid_real的建图结果。操作员手持设备穿越七层建筑、森林后返回原点,总轨迹长度1104米(图9a)。Point-LIO和CTE-MLO在长走廊退化,Traj-LO在楼梯间发散。Voxel-SLAM(图9b)、Fast-LIO2(图9c)和Ada-LIO(图9d)都没能回到起点(红色点);EVA-LIO全程稳健闭环。

效率与内存:表II显示EVA-LIO在嵌入式平台(i3-N305 CPU)上实时运行,部分序列内存占用甚至低于Voxel-SLAM。
4.2 消融实验
表III验证了不确定性估计和旋转驱动对EVA-LIO的贡献。在CR序列上,移除不确定性估计(w/o uncert.)后mid_CR的ATE从0.13m恶化到0.17m,avia_CR直接失败;移除旋转驱动(w/o spin.)后mid_CR恶化到0.32m,avia_CR同样失败。

五、快速上手指南
5.1 下载测试数据集
为方便测试,团队提供了模拟和真实世界场景的数据集:
百度网盘:https://pan.baidu.com/s/1hZgSJ6Y6L0QfLroh_AOyRg?pwd=yncu
请将下载的数据集放入 lm_calibr/data 目录
5.2 Docker部署(推荐)
git clone https://github.com/zijiechenrobotics/lm_calibr.git
cd lm_calibr
docker compose build
docker compose up -d
sudo chmod 777 ./enter_docker.sh
./enter_docker.sh
catkin_make
5.3 源码编译
Ubuntu:18.04 或 20.04 ROS:需要ROS环境 编译器:gcc & g++ >= 9
git clone https://github.com/zijiechenrobotics/lm_calibr.git
cd lm_calibr
catkin_make
5.4 模拟环境标定
单场景标定:
source devel/setup.bash
roslaunch lm_calibr sim_calib.launch
配置文件:lm_calibr/src/lm_calibr/config/sim_calib.yaml
标定结果:lm_calibr/src/lm_calibr/result/calib_results
多场景联合标定:多场景联合标定可以有效防止LM-Calibr过拟合单一场景,显著提高整体标定精度。
source devel/setup.bash
roslaunch lm_calibr sim_joint_calib.launch
配置文件:lm_calibr/src/lm_calibr/config/sim_joint_calib.yaml
标定结果:lm_calibr/src/lm_calibr/result/calib_results
5.5 真实世界标定
检查初始参数(重要!)
LM-Calibr保证在初始角度误差小于0.2 rad、平移误差小于0.2 m时达到精度和收敛。因此在运行标定之前,必须检查初始值的误差是否过大。使用以下脚本验证:
source devel/setup.bash
# 生成未标定点云
roslaunch lm_calibr check_dh.launch
# 可视化未标定点云
pcl_viewer src/lm_calibr/result/encoder_cloud.pcd
正确DH参数:如果提供的DH参数大致正确,未标定的点云会产生畸变但整体结构可辨认。此时LM-Calibr利用粗到细策略保证精度和收敛。

错误DH参数:如果提供的DH参数完全错误,点云会坍缩成一团杂乱无章的团簇。此时LM-Calibr无法从如此混乱的点云中提取有效的平面特征。

单场景标定:
source devel/setup.bash
roslaunch lm_calibr calib.launch
配置文件:lm_calibr/src/lm_calibr/config/calib.yaml
标定结果:lm_calibr/src/lm_calibr/result/calib_results
多场景联合标定:
source devel/setup.bash
roslaunch lm_calibr joint_calib.launch
配置文件:lm_calibr/src/lm_calibr/config/joint_calib.yaml
标定结果:lm_calibr/src/lm_calibr/result/calib_results
5.6 点云从LiDAR坐标系变换到基座坐标系
标定完成后,将标定结果从 calib_results/newest_calib_result.yaml 复制到 config/transform_cloud.yaml 中。然后可以使用 transform_cloud_node 将激光点从LiDAR坐标系变换到基座坐标系。
该节点订阅 lidar_topic 和 encoder_topic,通过 /calibrated_livox 话题发布变换后的激光点云(基座坐标系)。该话题可直接用作任何LIO系统(如Fast-LIO2)的LiDAR输入。
source devel/setup.bash
roslaunch lm_calibr transform_cloud.launch
六、局限与展望
LM-Calibr的局限:标定依赖平面特征提取,在极端情况下(比如只有地面点)依然能保证可辨识性。但如果环境中完全没有平面(比如全是曲面或随机散点),标定精度会受到影响。论文的辨识性分析(图13,场景1-6)表明,即使在单平面场景下,只要平面法向量不平行于马达转轴,所有参数仍然可辨识。



EVA-LIO的局限:在极高动态场景下(加速度 ≥ 6g)性能会退化。这是因为加速度太大时,单帧扫描周期(0.1s)内的位移可达0.1m以上,点面匹配的假设不再成立。加速度上限由下式给出:
其中 , 时,上限约为 (约2g),3σ准则下6g以上会导致退化。
未来方向:团队计划将工作扩展到无人机退化场景(弱几何、快速高度变化、激进机动),并探索基于强化学习的主动扫描控制和基于Transformer的故障感知重定位。
七、总结
LM-Calibr和EVA-LIO这套工作,用一个统一的数学模型(DH约定)解决了旋转LiDAR所有安装构型的标定问题,又用一套自适应的定位算法(环境感知+多分辨率地图)让旋转LiDAR在无特征区域也能稳健运行。
它的核心贡献可以概括为:
标定层面:把机器人学里的DH约定引入LiDAR-马达标定,用一个公式通吃旋转、俯仰、斜转等所有安装方式。精度达到1.5mm/0.04°,比现有方法高一个数量级。
定位层面:提出环境自适应模块,根据空间尺度自动切换地图分辨率和下采样率,让马达始终以最高速旋转而不用担心定位漂移。
工程层面:代码、硬件设计全面开源,Docker一键部署,提供了完整的数据集和详细的标定指南,真正做到了“学术界的前沿成果、工业界的即插即用”。
对于任何使用旋转驱动LiDAR的机器人开发者来说,LM-Calibr意味着“不用再为每种安装方式写一套标定代码”,EVA-LIO意味着“不用再纠结马达转速和定位精度的取舍”。这才是真正的“标得准、定得稳、跑得快”。
本文仅做学术分享,如有侵权,请联系删文。
。




添加微信:cv3d001,备注:姓名+方向+单位,邀请入群。