发布时间:2026/7/13 23:54:20
【4】lightning_lm项目-LIO 前端 - 深入学习 ESKF 滤波器 文章目录阶段二LIO 前端 - 深入学习 ESKF 滤波器一、ESKF 整体结构二、核心函数 1Predict() - IMU 预测三、核心函数 2Update() - 激光观测更新四、ESKF 的几个关键技巧总结五、ESKF 与普通卡尔曼滤波的区别重点总结下一步阶段二LIO 前端 - 深入学习 ESKF 滤波器深入学习 ESKF误差状态卡尔曼滤波器的具体实现。这是整个 LIO 系统的核心算法一、ESKF 整体结构看 eskf.hpp先看类的成员变量NavState x_;// 状态量名义状态CovType P_CovType::Identity();// 协方差矩阵CustomObsFunction lidar_obs_func_;// 激光观测函数booluse_aa_false;// 是否用 Anderson 加速关键点 x_ 是名义状态nominal state估计的是「误差状态」然后加到名义状态上这种方法叫做「误差状态卡尔曼滤波」Error-State Kalman Filter二、核心函数 1Predict() - IMU 预测看 eskf.ccvoidESKF::Predict(constdoubledt,constProcessNoiseTypeQ,constVec3dgyro,constVec3dacce);这一步做什么 用 IMU 数据预测下一时刻的状态和协方差。步骤详解计算运动方程Eigen::Matrixdouble,NavState::full_dim,1f_x_.get_f(gyro,acce);Eigen::Matrixdouble,NavState::full_dim,state_dim_f_x_x_.df_dx(acce);Eigen::Matrixdouble,NavState::full_dim,process_noise_dim_f_w_x_.df_dw();get_f() 运动方程的导数df_dx() 运动方程对状态的雅可比df_dw() 运动方程对噪声的雅可比名义状态更新NavState x_beforex_;x_.oplus(f_,dt);// 用中值积分更新名义状态计算状态转移矩阵这里代码有点复杂因为要处理 SO(3) 旋转的特殊情况协方差预测P_(F_x1_)*P_*(F_x1_).transpose()(dt*f_w_final)*Q*(dt*f_w_final).transpose();P_*options_.predict_cov_inflation_;// 稍微膨胀一下协方差更鲁棒SymmetrizeAndFloorCovariance(P_,options_.min_cov_diag_);// 保持对称并防止协方差太小三、核心函数 2Update() - 激光观测更新看 eskf.cc这是最复杂、最关键的函数这是一个 迭代优化 的过程注意 循环从 i -1 开始为什么第 -1 次迭代计算初始残差不更新状态后面迭代真正更新状态迭代优化步骤计算观测模型if(obsObsType::LIDAR){lidar_obs_func_(x_,custom_obs_model_);// 调用 ObsModel()}这里会调用之前看到的 LaserMapping::ObsModel() 函数检查收敛if(use_aa_i-1...residual变大了){x_last_x;// 如果残差变大回退到上一步break;}计算误差状态StateVecType dxx_.boxminus(start_x);// 当前状态与起始状态的差处理 SO(3) 的误差因为旋转是在流形上需要特殊处理for(autoit:x_.SO3_states_){intidxit.idx_;Vec3d seg_SO3dx.block3,1(idx,0);Mat3d res_temp_SO3math::A_matrix(seg_SO3).transpose();dx_current.block3,1(idx,0)res_temp_SO3*dx.block3,1(idx,0);// 同样更新 P 矩阵...}处理退化情况这是一个非常高级的技巧Eigen::SelfAdjointEigenSolverMat6deigen_solver(HTH_sym);constVec6d eigen_valueseigen_solver.eigenvalues();constdoublemax_eigen_valuestd::max(1e-12,eigen_values.maxCoeff());constdoubledegeneracy_thresholdmax_eigen_value*options_.degeneracy_threshold_ratio_;// 找出可观测的方向Vec6d observable_maskVec6d::Zero();for(intk0;kobservable_mask.size();k){if(eigen_values(k)degeneracy_threshold){observable_mask(k)1.0;}}// 只在可观测的方向上更新constMat6d observable_projectoreigen_vectors*observable_mask.asDiagonal()*eigen_vectors.transpose();constMat6d HTH_effobservable_projector*HTH_sym*observable_projector;constVec6d HTr_effobservable_projector*HTr;为什么要这样 有时候某些方向上观测很差退化如果强行更新会把状态改坏所以只在观测好的方向上更新计算卡尔曼增益并更新CovType P_temp(P_/R).inverse();P_temp.blockpose_obs_dim_,pose_obs_dim_(0,0)HTH_eff;CovType Q_invP_temp.inverse();// 计算增益K_rQ_inv.templateblockstate_dim_,pose_obs_dim_(0,0)*HTr_eff;K_H.setZero();K_H.templateblockstate_dim_,pose_obs_dim_(0,0)Q_inv.templateblockstate_dim_,pose_obs_dim_(0,0)*HTH_eff;// 更新状态dx_currentK_r(K_H-Eigen::Matrixdouble,state_dim_,state_dim_::Identity())*dx_current;限制更新步长constdoubledx_translationdx_current.head3().norm();constdoubledx_rotation_degdx_current.segment3(3).norm()*180.0/M_PI;if(dx_translationoptions_.max_update_translation_step_||dx_rotation_degoptions_.max_update_rotation_step_deg_){x_start_x;// 如果步长太大拒绝更新return;}这很重要 防止一次更新把状态改飞了Anderson 加速if(!use_aa_){x_x_.boxplus(dx_current);// 普通更新}else{x_x_.boxplus(dx_current);if(i-1){aa_.init(dx_current);}else{autodx_allx_.boxminus(start_x);autonew_dx_allaa_.compute(dx_all);// Anderson 加速x_start_x.boxplus(new_dx_all);}}Anderson Acceleration 是什么 一种数值加速方法让迭代更快收敛利用过去几次的迭代结果预测一个更好的更新方向通常能让迭代次数减少一半检查收敛custom_obs_model_.converge_true;for(intj0;jstate_dim_;j){if(std::fabs(dx_current[j])limit_[j]){custom_obs_model_.converge_false;break;}}更新协方差L_P_;// ... 处理 SO(3) ...P_L_-K_H.blockstate_dim_,pose_obs_dim_(0,0)*P_.templateblockpose_obs_dim_,state_dim_(0,0);四、ESKF 的几个关键技巧总结五、ESKF 与普通卡尔曼滤波的区别重点总结Predict 过程 IMU 积分预测状态和协方差Update 过程 迭代优化用激光观测修正状态关键技巧 误差状态表示退化处理更新步长限制Anderson 加速协方差处理 对称化、限幅、退化时膨胀下一步下次可以学习IMU 处理模块 imu_processing.hpp 点云预处理模块 pointcloud_preprocess.h/cc IVox 局部地图 ivox3d.h

相关新闻

2026/7/13 23:54:20

Traxxas Rally+ROS实战:从遥控车到真实AGV的端到端开发指南

1. 项目概述:为什么一辆遥控越野车会成为ROS学习的“黄金入口”你手头这台Traxxas Rally R/C car,绝不是玩具店里随便拆开就能玩的普通遥控车。它是一台被工业级改装潜力深度激活的移动机器人平台——底盘刚性、悬挂行程、四轮独立驱动、可扩展的顶部安装…

2026/7/13 23:49:19

Sqribble文档自动化系统:模板即程序的PDF生成原理

1. 项目概述:当模板不再是“套壳”,而是一套可执行的文档操作系统你有没有过这种体验:手头有一篇写得不错的行业分析文章,想快速变成一份体面的PDF报告发给客户,结果打开Word或InDesign,光是调封面字体、对…

2026/7/14 3:50:15

TurtleBot3:ROS初学者首选的开源机器人教学平台

1. TurtleBot3到底是什么,为什么它成了ROS初学者绕不开的“第一台机器人”TurtleBot3不是某款具体型号的消费级扫地机器人,也不是实验室里堆满传感器的庞然大物——它是一套为ROS(Robot Operating System)学习者量身定制的、模块化…

2026/7/14 3:50:15

生成式AI如何重塑公共卫生:从信息过载到智能决策的实践指南

那天下午,我正为一个公共卫生项目的文献综述发愁。面对海量的学术论文和政策报告,传统的检索和阅读方式效率低下,感觉像是在大海捞针。就在那时,我注意到了约翰斯霍普金斯大学推出的《公共卫生中的生成式AI导论》课程。起初&#…

2026/7/14 3:50:15

MV-Forcing:基于4D几何桥接的多视图视频生成技术解析

在计算机视觉领域,多视图视频生成一直是个技术难题,特别是生成任意时长、任意视角的长视频序列时,传统方法往往面临几何漂移和巨大算力消耗的瓶颈。最近提出的MV-Forcing框架通过创新的4D几何桥接技术,将时间自回归与视图自回归融…

2026/7/14 3:50:15

ADP5350与PIC32MX675F512L构建智能电源管理系统

1. 项目背景与核心需求在嵌入式系统设计中,电源管理始终是决定产品可靠性和用户体验的关键因素。ADP5350作为ADI公司推出的高性能电源管理IC(PMIC),与Microchip的PIC32MX675F512L微控制器组合,能够构建一套完整的智能电源解决方案。这套方案特…

2026/7/14 3:50:15

生成式AI在公共卫生领域的应用实践与本地学习环境搭建指南

生成式 AI 正在重塑公共卫生领域的知识获取、数据分析和工作流程。约翰斯霍普金斯大学推出的《公共卫生中的生成式AI导论》课程,为公共卫生从业者、研究者和学生系统性地梳理了这一变革性技术的应用框架。本文将带你深入理解这门课程的核心价值,并提供一…

2026/7/14 3:45:15

Claude模型分层策略:Advisor与Workflow实现成本优化

Claude Fable 5作为Anthropic最新发布的高性能模型,确实在能力上表现出色,但高昂的Token成本让很多开发者和企业用户望而却步。今天我们来探讨一个实用的解决方案:通过Claude Code模型的分层使用策略,结合Advisor、Workflow和Open…

2026/7/13 6:38:38

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/13 14:26:14

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/13 18:07:53

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/14 0:04:21

5分钟掌握足球PBR材质制作:Photoshop与Unity高效工作流

1. 项目概述:为什么是足球PBR材质?在游戏开发,尤其是体育竞技类游戏的制作中,一个看起来“对味”的足球,往往比我们想象中更重要。它不仅是赛场上的核心道具,更是玩家视觉焦点和沉浸感的重要来源。一个塑料…

2026/7/14 0:04:21

ChatGPT联网搜索失败,92%开发者误判为网络问题——真实根因竟是LLM推理会话上下文污染导致Search Agent进程静默退出(含strace复现脚本)

更多请点击: https://intelliparadigm.com 第一章:ChatGPT 联网搜索失败 当 ChatGPT 的联网搜索功能无法正常工作时,用户常遇到“搜索不可用”“未连接到互联网”或空白响应等现象。该问题并非模型本身缺陷,而是由权限配置、网络…

2026/7/13 11:33:05

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…