SLAM--只基于IMU存在的问题?

本文详细介绍了IMU(惯性测量单元)的基本原理及其在SLAM(同步定位与地图构建)中的应用。IMU能够提供高频率的6DoF测量信息,但在零偏校准和温度漂移方面存在挑战。文章探讨了IMU与视觉传感器的两种主要融合方式:松耦合和紧耦合,分别介绍了基于滤波和基于优化的方法,以及代表性的算法如MSCKF、ROVIO和OKVIS。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.IMU

     IMU指的是惯性测量单元。IMU大多用在需要进行运动控制的设备,如汽车和机器人上。也被用在需要用姿态进行精密位移推算的场合,如潜艇、飞机、导弹和航天器的惯性导航设备等。

     惯性测量单元是测量物体三轴姿态角(或角速率)以及加速度的装置。一般的,一个IMU包含了三个单轴的加速度计和三个单轴的陀螺,加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。

1.1 IMU的优点

    IMU 有输出频率高、能输出6DoF测量信息等优点 。视觉 SLAM 存在输出频率低、旋转运动时、或运动速率加快时定位易失败等问题,

1.2 IMU的不足

imu的数据必须经过标定,至少要将零偏等数据计算出来;

imu的零偏包括固定零偏(受到应力和其他因素的影响)和启动零偏(每次启动不一样,启动之后就固定不变);

标定一般标定的是固定零偏和部分启动零偏,算法估计的是启动零偏的残差值和温飘。

 

1.3 如何使用?【原文:https://blog.youkuaiyun.com/wheelfjl/article/details/78425109 】

a. 坐标系
惯性导航中常用的坐标系有地心惯性坐标系、导航坐标系以及载体坐标系。坐标轴一般指向载体正前、正右及正下方。

b. 状态模型
惯导系统的状态量包括 IMU 的位置、姿态、速度以及加速度计和陀螺仪的两个零偏,其中姿态采用四元数表示,状态量可表示为 16 维的列向量。具体可参考以下链接: 

https://fzheng.me/2016/11/20/imu_model_eq/

 


2. 如何实现基于IMU的slam方案?

slam实时建图,所以必须要知道环境的信息,而IMU只能获取自己的位置。所以IMU是slam辅助设备。

那么IMU如何与摄像头配合的呢?(暂时不提雷达)

二. 融合方式概述[ 原文:https://blog.youkuaiyun.com/wheelfjl/article/details/78425109 ]
同SLAM发展过程类似,视觉融合IMU问题也可以分成基于滤波和基于优化两大类。 
同时按照是否把图像特征信息加入状态向量来进行分类,可以分为松耦合和紧耦合两大类。

1. 基于滤波的融合方法
1.1 松耦合

松耦合将视觉传感器和 IMU 作为两个单独的模块,两个模块均可以计算得到位姿信息,然后一般通过 EKF 进行融合。 


可参考的算法有ethz的Stephen Weiss的ssf和msf

1.2 紧耦合
紧耦合则是指将视觉和 IMU 得到的中间数据通过一个优化滤波器进行处理,紧耦合需要把图像特征加入到特征向量中,最终得到位姿信息的过程。由于这个原因,系统状态向量最终的维度也会非常高,同时计算量也很大。

可参考的算法有MSCKF,ROVIO

2. 基于优化的融合算法
2.1 松耦合
基于松耦合优化的工作不多,这里只给出一篇文章作为参考: 
Inertial Aided Dense & Semi-Dense Methods for Robust Direct Visual Odometry

2.2 紧耦合
提到基于优化的紧耦合,就不得不提okvis了,主体思想是建立一个统一的损失函数同时优化视觉与IMU的位姿,用到了sliding window的思想。(这方面博主也需要再深入研究一下) 
可参考okvis的github主页: 
okvis 
以及港科大今年上半年刚刚开源的VINS: 
VINS

3. 总结
总体来看,松耦合算法相对简单,且扩展性很强,可以加入多种传感器信息进行融合,但融合得到的位姿估计精度相对较差;紧耦合算法实现起来相对复杂,可扩展性差,但融合得到的位姿估计精度较高。


 

 

### ORB-SLAM3 双目相机与 IMU 融合的使用教程 ORB-SLAM3 是一种先进的 SLAM 系统,支持多种传感器组合,包括单目、双目、RGB-D 相机以及惯性测量单元 (IMU)[^1]。以下是关于如何设置和运行 ORB-SLAM3 的双目视觉与 IMU 融合功能的具体说明。 #### 配置环境 为了成功运行 ORB-SLAM3,需要先搭建合适的开发环境。通常建议基于 Ubuntu 和 ROS 进行配置[^3]。以下是一些关键步骤: 1. **安装依赖项** 安装必要的库和支持工具,例如 Eigen 库和其他第三方依赖项。 ```bash sudo apt-get update sudo apt-get install libeigen3-dev libsuitesparse-dev libcgal-dev libboost-all-dev ``` 2. **编译 ORB-SLAM3** 下载并解压 ORB-SLAM3 源码包后,进入源目录进行构建操作。 ```bash cd ORB_SLAM3 mkdir build && cd build cmake .. make -j$(nproc) ``` #### 创建自定义配置文件 对于特定硬件设备的支持,可能需要创建新的 YAML 文件来描述摄像头参数和 IMU 数据特性[^2]。例如: ```yaml Camera.type: "pinhole" Camera.fx: 707.0912 Camera.fy: 707.0912 Camera.cx: 601.8873 Camera.cy: 183.1104 Imu.Frequency: 200 ``` 此部分需依据实际使用的双目摄像装置调整焦距 (`fx`, `fy`) 和中心偏移量 (`cx`, `cy`), 同时设定 IMU 更新频率等属性。 #### 编写节点程序 针对 ZED2 或其他类型的双目加 IMU 组合, 开发者可以参照官方文档或者社区贡献实例编写对应的 C++ 节点代码[^2]: ```cpp #include "System.h" int main(int argc, char **argv){ ros::init(argc, argv, "StereoInertial"); if(argc != 5){ cerr << endl << "Usage: rosrun orbslam3 stereo_inertial path_to_vocabulary path_to_settings" << " sequence_name dataset_dir" << endl; return -1; } // Initialize the SLAM system. ORB_SLAM3::System SLAM(argv[1],argv[2],"Stereo-Inertial",false); string file = string(argv[4]) + "/" + string(argv[3]); ifstream fTimes; fTimes.open(file.c_str()); } ``` 以上片段展示了初始化过程中的核心逻辑结构,其中包含了路径解析及系统启动命令序列设计等内容。 #### 测试验证 完成上述准备工作之后即可加载测试数据集来进行效果评估。确保所有输入流同步良好,并观察定位精度变化趋势图谱表现情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值