前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MSCKF-Based Visual-Wheel Odometry 轮速视觉融合里程计

MSCKF-Based Visual-Wheel Odometry 轮速视觉融合里程计

作者头像
3D视觉工坊
发布于 2020-12-11 03:43:41
发布于 2020-12-11 03:43:41
2.4K01
代码可运行
举报
运行总次数:1
代码可运行

Sliding Windows Filter(SWF)在VIO、SLAM这个领域应用非常广,比如MSCKF、OKVIS、VINS-Mono等等,几乎可以说是VIO的标配。

SWF可以分成基于滤波器的和基于优化的两种。最典型的基于滤波器的方法就是MSCKF算法了。它是基于EKF的算法,在marginalize state的时候处理比较简单,只需要把对应的covariance的对应行列直接丢弃就可以了。而基于优化的方法在边缘化时需要对Hessian矩阵做舒尔补,操作会复杂一些。

为了尝试一下SWF,我们先从简单的基于滤波的方法入手.本文实现了一个基于MSCKF的Visual+Wheel融合的Odometry.

下面是分别是仿真和用KAIST数据测试的结果

更多可参考

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://zhuanlan.zhihu.com/p/270670373

注意:这里为了凸显加了视觉校正效果,把wheel的noise设的比较大,轨迹不太平滑。如果想要平滑一些,可以适当调低wheel的noise。

代码请见

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/ydsf16/TinyGrapeKit

传感器配置

Visual部分,用一个单目相机。Wheel部分可以是左右轮速度或位移

坐标系统

轮速坐标系/Odometry坐标系{0}: 车辆后轴中心、贴地. x轴向前, y轴向左,z轴向上.

全局坐标系{G}:与初始时刻的轮速坐标系重合的坐标系。

相机坐标系{C}: x轴向右,y轴向下,z轴向前

内外参数

内参数:1)相机内参;

2)左右轮轴距b,左右轮速系数、 将编码器count转成距离米,或者速度转成m/s。

外参数:轮速坐标系到相机坐标系的旋转与平移.

我们假设这些内外参数都假设预先标定好的。实际上,也可以把这些内外参数放到状态向量里面估计,这也是很多论文里面常见的做法,比如OpenVINS。但是,具体这些内外参数能不能估计出来,是不是可观的,可以参考一下黄国权老师的论文

状态向量

滑窗里面的状态分成两类,一类是Odometry的位姿。

另一个类是一串相机位姿:

总的状态是当前Odometry位姿+N帧的相机位姿:

跟MSCKF一样,我们把协方差分块表示:

这里我们使用最简单的滑窗维护方式,当新的一帧进到滑窗后,就直接把老的一帧给边缘化掉。因为是EKF,就是直接把最后一帧相机pose从x中去掉,然后把对应的协方差的行和列删除掉.

Wheel Propagation

EKF算法分成两步:Propagation+Update。在这里,我们用wheel的信息进行状态的propagation,用视觉信息做update。下面先推导Propagation部分。这里的推导,参考了Mingyang Li的paper[2]。

按照IMU处理的方法,首先把ODE方程列出来

下面就可以对ODE方程进行积分了。简单起见,直接用欧拉积分了。如果考虑精度,可以使用中值或者龙格库塔:

用这个式子,就可以进行均值的Propagation。对于协方差的Propgation,我们先求雅克比。这里定义旋转的Error为:

状态增广

当新来一帧图像,可以通过odometry位姿,计算出相机位姿。

然后把它放到状态向量里面。相应的要把协方差矩阵进行扩展:

Update

7.1视觉Update

MSCKF的很大的优势就是没有把特征点放到状态向量里面,降低了计算量。

当特征点丢失的时候,才拿来进行更新。特征点丢失有两种情况:

  • 当特征点丢失的时候,才拿来进行更新。特征点丢失有两种情况:
  • 另一种是边缘化的时候,也就是把最后一帧滑出窗口的时候,把在这一帧里面新建的特征点都丢弃,也就是都拿来做更新。

这里说的特征点/feature,同时表示3D点,也表示在图像上的2D位置。

A. 一个特征点的处理

因为与是正交的.所以

做了上面的操作之后,就可以得到一个不含特征点的线性方程:

B. 多个特征点的处理

上面一个特征点可以得到一个(18)式。多个特征点就可以得到很多的(18)式,把他们堆叠起来,有得到一个很大的线性方程:

这个方程的行数一般很大,直接用来做EKF更新效率很低。MSCKF又用QR分解,进行了一次压缩。具体的对H*做QR分解

带入到(19)式中,可以得到,

左右两边,同时乘以有

最后,我们得到一个压缩后的线性方程

这方程的行数最大和状态的维度相同。最终用来做EKF更新的也就是(20)式。

C. 边缘化

边缘化,或者说如何删除滑窗里的状态。前面也已经提到了,我们使用了最简单的策略。就直接把最老的一帧去掉。去掉的这帧里的所有特征点都被拿来做更新。

最后,总结一下,当一帧图像来了之后的处理步骤

  • 增广状态
  • 做特征点跟踪。
  • 收集跟踪丢失的的所有特征点{}
  • 收集将要被边缘化的帧中的所有特征点:{}
  • 利用特征点{}和{}构造线性方程(20),并执行EKF更新。
  • 边缘化操作:将x中边缘化掉的pose去掉,将协方差矩阵中对应的行和列删除。

平面约束Update

一般车辆都是运动在平面上的,在更新的时候,我们引入一个平面约束。这部分参考了Stergios I. Roumeliotis 的PaperVINS On wheels[3]

实现

全部工程代码请见:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/ydsf16/TinyGrapeKit

实验

仿真测试,很明显,VWO-MSCKF比纯Wheel里程计精度更好.

数据集测试

我们这里使用了KAIST数据集,链接是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://irap.kaist.ac.kr/dataset/

同样的,相比纯Wheel odom,精度会有所提高.

注意:这里的测试,Wheel内参数精度都是比较低的,所以raw odom的精度不是很高.如果wheel内参数精度很高的话,VWO-MSCKF精度不一定更高.

本文仅做学术分享,如有侵权,请联系删文。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 3D视觉工坊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MSCKF理论推导与代码解析
在SLAM后端中,主要有两种主流方法用于优化:基于滤波的方法和基于非线性的方法。基于滤波的方法主要有MSCKF、S-MSCKF、ROVIO等,基于非线性的方法主要有OKVIS、VINS-MONO、VINS-Fusion等。在这一节,主要分析S-MSCKF的理论推导和代码解读。
计算机视觉
2020/11/11
2K0
MSCKF理论推导与代码解析
计算机视觉方向简介 | 视觉惯性里程计(VIO)
Visual-Inertial Odometry(VIO)即视觉惯性里程计,有时也叫视觉惯性系统(VINS,visual-inertial system),是融合相机和IMU数据实现SLAM的算法,根据融合框架的不同又分为松耦合和紧耦合。
3D视觉工坊
2021/04/09
4.9K0
计算机视觉方向简介 | 视觉惯性里程计(VIO)
【SLAM】视觉SLAM:一直在入门,从未到精通
上周的组会上,我给研一的萌新们讲解什么是SLAM,为了能让他们在没有任何基础的情况下大致听懂,PPT只能多图少字没公式,这里我就把上周的组会汇报总结一下。
小白学视觉
2022/05/22
2K1
【SLAM】视觉SLAM:一直在入门,从未到精通
GCLO:具备地面约束的适用于停车场AVP任务的lidar里程计(ICRA 2022)
在具体的工程实践中,lidar在地下停车场容易沿垂直方向向上漂移,导致建图结果不佳。具体原因是当入射角较大时,激光雷达测量的深度可能会出现偏差。因此,当车辆在地面上移动时,从道路上观察到的点会稍微弯曲,LO 估计的轨迹会沿垂直方向漂移。因此为了消除 LiDAR 测量偏差并压缩可预测的位姿漂移,通常做法是需要针对不同的传感器调整比例因子,并且需要根据环境温度产生差异,所以为了提升鲁棒性,加入地面平面的考量减少无关项的影响是一个实用的选择。
3D视觉工坊
2023/04/29
4560
GCLO:具备地面约束的适用于停车场AVP任务的lidar里程计(ICRA 2022)
一文看尽4种SLAM中零空间的维护方法
来源丨https://zhuanlan.zhihu.com/p/341322063
3D视觉工坊
2021/01/13
1.2K0
一文看尽4种SLAM中零空间的维护方法
近十年的VI-SLAM算法综述与发展(附链接)
本文转载自INDEMIND,作者半不闲居士@CSDN。文章仅用于学术分享。本文约7000字,建议阅读14分钟本文为作者在从事Slam相关工作中对这几年遇到以及改进过相关VIO算法内容总结。 1、背景介绍 一个完整的 SLAM(simultaneous localization and mapping) 框架包括传感器数据、 前端、 后端、 回环检测与建图,如图1所示,其中,前端将传感器的数据抽象成适用于估计的模型,回环检测判断机器人是否经过已知的位置。而后端接受不同时刻前端测量的位姿和回环检测的信息并对它们
数据派THU
2022/04/21
2.6K0
近十年的VI-SLAM算法综述与发展(附链接)
基于关键帧的RGB-D视觉惯性里程计
论文信息:Chu C , Yang S . Keyframe-Based RGB-D Visual-Inertial Odometry and Camera Extrinsic Calibration Using Extended Kalman Filter[J]. IEEE Sensors Journal, 2020, PP(99):1-1.
3D视觉工坊
2020/12/11
8420
LIR-LIVO:一种轻量级、鲁棒的激光雷达/视觉/惯性里程计,具备对光照变化具有适应性的深度特征
文章:LIR-LIVO: A Lightweight,Robust LiDAR/Vision/Inertial Odometry with Illumination-Resilient Deep Features
点云PCL博主
2025/03/07
1890
LIR-LIVO:一种轻量级、鲁棒的激光雷达/视觉/惯性里程计,具备对光照变化具有适应性的深度特征
GPS辅助视觉轮速里程计
作者:Junlin Song, Pedro J. Sanchez-Cuevas, Antoine Richard and Miguel Olivares-Mendez
点云PCL博主
2024/01/24
2860
GPS辅助视觉轮速里程计
CodeVIO:基于可学习优化密集深度的视觉惯性里程计(ICRA2021)
(Xingxing Zuo, Nate Merrill, Wei Li, Yong Liu, Marc Pollefeys, and GuoquanHuang.CodeVIO: Visual-Inertial Odometry with Learned Optimizable DenseDepth.IEEE International Conference on Robotics and Automation (ICRA) 2021.)
3D视觉工坊
2021/07/28
1.1K0
CodeVIO:基于可学习优化密集深度的视觉惯性里程计(ICRA2021)
Ctrl-VIO:基于连续时间的卷帘相机视觉惯性里程计方案
文章:Ctrl-VIO: Continuous-Time Visual-Inertial Odometry for Rolling Shutter Cameras
点云PCL博主
2022/12/27
8730
Ctrl-VIO:基于连续时间的卷帘相机视觉惯性里程计方案
ICRA 2021| 具有在线校准功能的高效多传感器辅助惯性导航系统
作者:Woosik Lee, Yulin Yang, and Guoquan Huang
计算机视觉
2021/07/05
1.2K0
Ground-VIO:在线标定相机-地面参数的单目视觉惯性里程计
文章:Ground-VIO: Monocular Visual-Inertial Odometry with Online Calibration of Camera-Ground Geometric Parameters
点云PCL博主
2023/08/21
1.1K0
Ground-VIO:在线标定相机-地面参数的单目视觉惯性里程计
SLAM实习生面试基础知识点总结
白白最近的时间投了一些SLAM相关的实习,通过各种公司的面试了解了流程以及侧重点,有答的不好被拒绝的,也有拿到offer的,也有简历石沉大海的。发现很多基础的问题自己都明白但是在面试紧张的情况下描述的逻辑不是很清晰,所以导致面试效果不是很好,通过自己这一段时间的学习和面试遇到的一些SLAM相关的基础问题做一个总结。
小白学视觉
2019/06/02
2.4K0
一文详解固态激光雷达的里程计(loam_livox)
介绍: 大疆出品,必属精品。 固态激光雷达里程计的工作现阶段还是比较少的,大疆自己出了固态激光雷达后在LOAM的基础上改进了一个适用于固态激光雷达的里程计,该系统可以用在小视场角和非重复性扫描的雷达上。
3D视觉工坊
2020/11/11
1.2K0
一文详解固态激光雷达的里程计(loam_livox)
VINS后端非线性优化目标函数
 vins在后端优化中,使用了滑动窗口,其状态向量包含窗口内的n+1个相机的状态(位置,旋转,速度,加速度计bias及陀螺仪bias)、相机到imu的外参、m+1个路标点的逆深度:
猫叔Rex
2021/05/11
1.3K0
SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别
本文为我在浙江省北大信研院-智能计算中心-情感智能机器人实验室-科技委员会所做的一个分享汇报,现在我把它搬运到博客中。
全栈程序员站长
2022/09/25
6.7K0
SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别
论文解读|激光视觉融合的V-LOAM
论文题目:《Visual-lidar Odometry and Mapping: Low-drift, Robust, and Fast》 发表在2015年的ICRA上,是一篇经典的视觉激光融合的SLAM系统框架,但是作者未开源代码。在公众号「计算机视觉工坊」后台,回复「LOAM」,即可获得原文。
计算机视觉
2020/12/11
1K0
论文解读|激光视觉融合的V-LOAM
激光里程计
里程计,作为激光雷达导航、定位与地图构建的核心基石,通过连续追踪与匹配激光点云数据,精准估算车辆的运动轨迹。这一过程不仅深刻体现了机器人学领域的智慧结晶,更与测绘学中的点云拼接技术遥相呼应,尽管两者目标各异——前者旨在通过跨时空的点云对齐,揭示车辆姿态的微妙变迁;后者则聚焦于构建统一坐标系下的点云图景。
用户11339509
2024/11/11
1160
用于机器人导航辅助的6自由度姿态估计的平面辅助视觉惯性里程计
Plane-Aided Visual-Inertial Odometry for 6-DOF Pose Estimation of a Robotic Navigation Aid
计算机视觉
2020/11/11
8790
用于机器人导航辅助的6自由度姿态估计的平面辅助视觉惯性里程计
推荐阅读
相关推荐
MSCKF理论推导与代码解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验