浙大lidar_imu标定过程解析

最近在跑lio_sam紧耦合的slam框架,中间需要进行lida_imu的标定。当前搜索的结果来看常用的开源标定包有两个:lidar_align、li_cailb。最近看了一下后一种的原文,总结下按钮功能与相关注意事项。

标定过程分4部分:initialization of extrinsic rotation、surfels map and data association 、continuous-time batch optimization、refinement。

1、initialization of extrinsic rotation:用来初始化lidar_imu间的旋转参数。此处采用手眼标定的算法实现。初始化阶段没有考虑平移参数,这部分涉及读取加速度的值,由于加速度融合的重力,所以结果不切实际,但作者认为平移的初始化在本文的方法中对后续的标定结果产生的影响比较小。

2、surfels map and data association:点云去畸变、提取平面。在去畸变部分用到步骤1的旋转初始化结果,采用内插的方式去除一个scan中点云的旋转畸变。提取平面是从点云中识别平面点,做法是将点云划分到三维格网中,通过特征值间的关系判断格网中是否存在平面点。

3、continuous-time batch optimization:采用MAP计算标定参数。在目标函数中结合imu测量残差与点到平面距离残差。

4、refinement:迭代优化使得参数收敛。

以上是算法实现的大致流程,后续结合实践有结果的话,再跟大家分享~

### LIDAR-IMU 融合原理及应用 #### 1. **LIDARIMU 的基本功能** 激光雷达(Light Detection And Ranging, LIDAR)是一种主动光学遥感技术,用于生成环境的三维几何模型。它通过发射脉冲光束并接收反射回来的信息来计算目标的距离和形状[^4]。而惯性测量单元(Inertial Measurement Unit, IMU)则是由加速度计和陀螺仪组成的传感器组合,用来实时监测载体的姿态与运动状态变化情况[^2]。 两者各自具备独特的优势但也存在着局限之处: - LIDAR 提供精准的空间结构描述但刷新率较低且易受天气条件影响; - IMU 可以提供高频次更新却容易随着时间累积误差导致定位不准的现象发生。 因此将这两种不同特性的传感方式结合起来形成互补关系就显得尤为重要了。 --- #### 2. **融合方法概述** ##### (1)**紧耦合 vs 松耦合** 根据集成紧密程度的不同可分为两种主要形式即松散连接(Loosely Coupled)以及紧密结合(Tightly Coupled)。 - *松耦合法*主要是先分别单独处理各自的原始数据然后再把结果相互关联起来考虑整体性能指标最优解法。这种方式简单易于实施但是无法充分利用全部可用资源达到最高效率水平。 - 对应之下,*紧致联结法则会深入挖掘两套体系之间潜在联系*,在整个运算过程中持续交换共享中间环节产生的各类辅助信息直至得出最后结论为止。虽然复杂度有所增加可是可以获得更佳的整体表现效果[^3]. ##### (2)**基于卡尔曼滤波器(Kalman Filter)** 一种常用的有效手段便是运用扩展卡尔曼过滤算法(Extended Kalman Filter,EKF),该机制能够很好地适应非线性动态系统的预测需求同时也兼顾到了不确定性因素所带来的干扰作用。具体操作过程如下所示: ```python def kalman_filter(z_measurements, u_inputs=None): """ A simplified example demonstrating the use of EKF for sensor fusion. Parameters: z_measurements (list): Measurements from sensors such as GPS or LIDAR. u_inputs (list): Control inputs affecting system dynamics. Returns: x_estimated : Estimated state vector after filtering process. """ # Initialize variables... P = np.eye(len(x)) # Covariance matrix initialization while True: # Prediction Step ... F = ... # State transition model Jacobian Matrix Q = ... # Process Noise Covariance x_pred = f(x,u) # Nonlinear function describing next step prediction based on current estimate & control input P_pred = F @ P @ F.T + Q # Update Step ... H = h_jacobian(x_pred)# Observation Model Jacobian evaluated at predicted value R = measurement_noise_covariance()# Measurement noise covariance associated with particular observation type y_residual = z_measurement - h(x_pred) # Residual between actual measurements and what would be expected given predictions S_innovationCovMatrx=H@P_pred@H.T+R # Innovation Covariance Matrix calculation K_gain=P_pred@H.T@np.linalg.inv(S_innovationCovMatrx) # Optimal Gain Computation via minimizing mean square error criterion x_estimated=x_pred+K_gain@(y_residual) P=(I-K_gain@H)@P_pred # Updated Estimate Error Covariance Calculation return x_estimated ``` 上述伪代码展示了一个简化版EKF框架下的核心逻辑思路其中涉及到了几个关键组成部分包括但不限于状态转移方程、观测函数及其雅可比矩阵等等[^1]。 --- #### 3. **应用场景举例** ##### (1)**自动驾驶领域中的车辆定位** 在无人车行驶期间,借助于LIDAR描绘周围障碍物轮廓特征的同时结合IMU反映出来的瞬时动作趋势综合判断当前所处确切地理位置坐标位置。这种做法不仅提高了抗外界干扰的能力而且有助于构建更加详尽的地图数据库便于后续路径规划决策制定工作开展顺利进行下去[^3]。 ##### (2)**机器人自主导航任务执行** 对于室内服务类小型移动机械臂来说同样适用此策略帮助克服因地面材质差异造成轮子打滑等情况引发的位置偏移现象保持稳定运行轨迹完成既定使命要求达成预期目的。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值