从测绘‘平差’到VINS的BA:聊聊SLAM中这个经典优化问题的前世今生
从测绘平差到视觉SLAM光束法优化的跨世纪技术迁移当19世纪的高斯和勒让德首次提出最小二乘法时他们或许不会想到这套用于处理天文观测误差的数学工具会在两个世纪后成为机器人感知世界的核心技术。在当代视觉SLAM系统中光束法平差Bundle Adjustment扮演着核心角色而它的思想根源可以追溯到传统测绘中的平差概念。这种跨越时空的技术迁移展现了基础数学工具的惊人生命力。1. 测绘平差多余观测的艺术1834年德国大地测量学家卡尔·弗里德里希·高斯在汉诺威王国的大地测量工作中面对一个经典问题当测量数据多于确定未知量所需的最小观测数时如何从这些相互矛盾的观测中提取最可靠的结果这个看似简单的需求催生出了一套完整的数学体系——测量平差。平差的核心在于处理三类关键矛盾观测冗余性为提升精度实际测量总会获取比必要更多的数据误差不可避免性仪器精度、人为因素和环境干扰导致观测值必然存在偏差结果一致性需求最终解必须能合理解释所有观测数据传统平差的数学模型可以表示为\min_{\mathbf{x}} \sum_{i1}^n \rho_i(r_i(\mathbf{x}))其中x为待估参数如控制点坐标r_i为第i个观测的残差ρ_i为鲁棒核函数传统平差常取平方提示早期平差计算完全依赖人工一个中等规模的大地网平差可能需要数月时间计算员需要特殊训练以确保数万次运算不出差错。2. 计算机视觉的重新诠释从控制点到像素当平差思想进入计算机视觉领域时其数学本质被保留但各要素获得了全新含义测绘要素视觉SLAM对应物关键差异控制点三维路标点从人工布设到自然特征提取测角仪相机从直接角度测量到透视投影钢尺基线特征匹配从物理测量到图像相关性水准仪深度估计从几何水准到立体视觉在视觉SLAM中平差问题被重新表述为重投影误差最小化E \sum_{i,j} \| \pi(T_i,X_j) - x_{ij} \|^2其中T_i第i个相机位姿旋转平移X_j第j个三维点坐标π相机投影模型x_ij实际观测到的像素坐标这个看似简单的公式背后是测绘与计算机视觉的深度融合几何一致性继承了传统平差对几何关系的严格建模概率解释赋予了现代统计学习中的最大似然估计含义计算范式从人工计算跃迁到自动化数值优化3. 算法进化从高斯消元到稀疏优化传统平差与当代BA最显著的差异体现在计算效率上。早期测绘平差受限于计算工具不得不采用分块约化的策略按观测类型分组角度、距离等逐组消元构建法方程最后求解约化后的核心方程组现代BA则充分利用了问题的稀疏性这源于两个关键观察单个三维点通常只被少量相机观测到单个相机通常只看到场景的部分区域这种稀疏性使得雅可比矩阵具有特殊的分块结构# 典型BA问题的雅可比矩阵结构示例 J [ [A11 0 B11] [A21 0 0] [ 0 A32 B32] ]其中A块相机参数相关的导数B块三维点相关的导数利用这种结构现代求解器如Ceres、g2o等可以实现内存效率只存储非零块节省90%以上内存计算加速利用舒尔补等技巧降低求解复杂度并行处理不同点的计算天然可并行化4. 工程实践Ceres Solver中的BA实现在实际SLAM系统中BA的实现需要考虑诸多工程细节。以Ceres Solver为例一个完整的BA模块需要处理核心组件残差模型定义重投影误差计算方式参数化正确处理旋转矩阵的特殊性李群鲁棒核应对误匹配带来的外点干扰典型的重投影误差计算实现如下struct ReprojectionError { ReprojectionError(double observed_x, double observed_y) : observed_x(observed_x), observed_y(observed_y) {} template typename T bool operator()(const T* const camera, const T* const point, T* residuals) const { // 旋转处理 T p[3]; ceres::AngleAxisRotatePoint(camera, point, p); // 平移处理 p[0] camera[3]; p[1] camera[4]; p[2] camera[5]; // 归一化平面投影 T xp p[0] / p[2]; T yp p[1] / p[2]; // 畸变模型 T r2 xp*xp yp*yp; T distortion 1.0 r2 * (l1 l2 * r2); // 最终投影 T predicted_x focal * distortion * xp; T predicted_y focal * distortion * yp; // 残差计算 residuals[0] predicted_x - observed_x; residuals[1] predicted_y - observed_y; return true; } // 观测值 double observed_x, observed_y; };关键调优参数参数影响典型值线性求解器类型收敛速度/内存消耗SPARSE_SCHUR最大迭代次数计算时间/精度权衡50-200函数容差早停阈值1e-6参数容差参数变化敏感度1e-8在VINS-Mono等实际系统中BA通常与其他模块协同工作前端提供特征匹配和初始位姿IMU预积分提供高频率的运动先验回环检测消除累积误差这种多传感器融合的架构使得现代SLAM系统能在保持测绘级精度的同时实现实时运算。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443431.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!