文章目录
- 其他文章
- 说明
- 论文
- 系统特点和创新点
- 鲁棒的初始化
- 紧耦合优化的视觉惯性里程计(VIO)
- 回环检测与重定位
- 4自由度姿态图优化
- 视觉和IMU测量的预处理步骤
- 视觉测量预处理
- 特征跟踪
- 特征点处理
- 关键帧选择
- IMU测量预处理
- IMU噪声和偏差
- 预积分
- 偏差校正
- 单目紧密耦合VIO初始化方法
- 在滑动窗口中视觉单独的SfM
- 视觉-惯性对齐
- 陀螺仪偏差校准
- 速度、重力向量和度量尺度初始化
- 重力向量精炼
- 初始化完成
- 总结
- 紧耦合单目VIO
- IMU测量残差
- 视觉测量残差
- 边缘化
- 运动优化
- IMU前向传播
- 再定位(Relocalization)
- 背景
- 再定位流程
- 回环检测(Loop Detection)
- 特征检索(Feature Retrieval)
- 紧耦合再定位(Tightly Coupled Relocalization)
- 全局优化
- 全局位姿图优化和地图重用(Global Pose Graph Optimization and Map Reuse)
- 四个累积漂移方向
- 关键帧加入位姿图
- 背景
- 边类型
- 总结
- 4自由度位姿图优化
- 背景
- 总结
- 位姿图合并
- 合并的目的
- 合并的条件
- 合并的过程
- 合并的效果
- 总结
- 位姿图保存
- 位姿图加载
- 并行化
- 并行化VINS-Mono的可能性
- 并行化的部分
- 并行化的效果
- 并行化的实现
- 并行化论文
- CUDA库
- 参考文献
其他文章
- VINS_MONO视觉导航算法【一】基础知识介绍
- VINS_MONO视觉导航算法【二】论文讲解+GPU实现调研
- VINS_MONO视觉导航算法【三】ROS基础知识介绍
- VINS_MONO视觉导航算法【四】VINS_Mono代码解释
说明
这是第二篇,这一部分介绍VINS_Mono论文,主要是对论文的每一部分进行了详细的解释。另外,调研了现在市面上和学术界对于VINS_Mono的并行GPU加速实现。
论文
系统特点和创新点
鲁棒的初始化
通过稳健的初始化过程从未知初始状态启动系统。
使用IMU预积分和视觉特征观察的结合,解决惯性测量和视觉数据的非线性耦合问题。
紧耦合优化的视觉惯性里程计(VIO)
采用基于非线性优化的方法,将IMU数据和视觉特征紧密结合,提高位姿估计的精度。
提供相机-IMU外参标定和IMU偏置校准。
回环检测与重定位
集成回环检测模块,通过最低的计算代价实现重定位,从而消除漂移。
基于回环的特征关联进一步提升全局一致性。
4自由度姿态图优化
针对漂移问题,固定滚转角和俯仰角,仅优化位置和航向角,实现全局地图的统一和一致性。
支持高效的地图保存和重用,允许多个局部地图的合并。
视觉和IMU测量的预处理步骤
视觉测量预处理
跟踪连续帧之间的特征并检测最新帧中的新特征。
特征跟踪
方法:
KLT稀疏光流算法:对于每一张新图像,现有的特征点通过KLT(Kanade-Lucas-Tomasi)稀疏光流算法进行跟踪。KLT算法是一种基于光流原理的特征点跟踪算法,能够有效地在连续图像帧中跟踪运动目标。
新特征点检测:为了维持每张图像中特征点的数量(通常在100到300之间),系统会检测新的角点特征。检测器通过设置相邻特征点之间的最小像素间距来强制特征点的均匀分布。
步骤:
特征点跟踪:使用KLT算法跟踪现有特征点。
新特征点检测:检测新的角点特征,确保每张图像中有足够的特征点。
特征点分布:通过设置相邻特征点之间的最小像素间距,确保特征点在图像中的均匀分布。
特征点处理
方法:
去畸变:首先对二维特征点进行去畸变处理,消除镜头畸变的影响。
投影到单位球面:去畸变后的特征点被投影到单位球面上,以便后续处理。
异常值剔除:使用RANSAC算法和基本矩阵模型进行异常值剔除,确保特征点的质量。
步骤:
去畸变:使用去畸变算法(如OpenCV中的undistort函数)对特征点进行去畸变处理。
投影到单位球面:将去畸变后的特征点投影到单位球面上。
异常值剔除:使用RANSAC算法和基本矩阵模型剔除异常值。
关键帧选择
方法:
视差阈值:选择关键帧的一个标准是当前帧与最新关键帧之间的平均视差。如果平均视差超过某个阈值,则将当前帧视为新的关键帧。视差不仅由平移引起,也可能由旋转引起。为了处理纯旋转运动导致的视差问题,系统使用短期陀螺仪测量值进行旋转补偿。此旋转补偿仅用于关键帧选择,并不参与 VINS 公式中的旋转计算。
跟踪质量:另一个选择关键帧的标准是跟踪质量。如果跟踪的特征点数量低于某个阈值,则将当前帧视为新的关键帧,以避免完全失去特征点的跟踪。
步骤:
视差计算:计算当前帧与最新关键帧之间的平均视差。
旋转补偿:使用短期陀螺仪测量值进行旋转补偿,确保视差计算的准确性。
视差阈值判断:如果平均视差超过阈值,则选择当前帧为新的关键帧。
跟踪质量检查:检查跟踪的特征点数量,如果数量低于阈值,则选择当前帧为新的关键帧。
IMU测量预处理
在两个连续帧之间对它们进行预积分。
IMU噪声和偏差
IMU(惯性测量单元)的测量值受到多种因素的影响,主要包括:
加速度计测量值:包括真实的线加速度、加速度计偏差、重力影响和高斯白噪声。
陀螺仪测量值:包括真实的角速度、陀螺仪偏差和高斯白噪声。
加速度计和陀螺仪的偏差被建模为随机游走,即它们的变化率也是高斯白噪声。
预积分
预积分是在两个连续时间帧 bk和bk+1之间的惯性测量值的积分。具体步骤如下:
位置增量:计算在这段时间内,由于加速度引起的位移变化。
速度增量:计算在这段时间内,由于加速度引起的速度变化。
姿态增量:计算在这段时间内,由于角速度引起的方向变化。
这些增量值可以在局部坐标系 bk中计算,并且只需要IMU测量值和已知的偏差估计值。
偏差校正
偏差估计值的变化会影响预积分的结果。为了应对这种情况,有两种方法:
小变化校正:如果偏差估计值变化较小,可以通过一阶近似来调整预积分结果,避免重新计算。
大变化校正:如果偏差估计值变化较大,则需要重新进行预积分计算,以确保结果的准确性。
这种方法可以显著减少优化算法中的计算资源消耗,因为不需要频繁重新计算IMU测量值。
单目紧密耦合VIO初始化方法
在滑动窗口中视觉单独的SfM
初始化过程从仅使用视觉的结构从运动(SfM, Structure from Motion)开始,以估算相机姿态图和特征点位置,这些位置是相对于尺度的。
滑动窗口内的帧维护:为了控制计算复杂度,我们维持一个滑动窗口,其中包含若干帧图像。
特征匹配:首先检查最新帧与所有先前帧之间的特征对应关系。如果在最新帧和滑动窗口中的任何其他帧之间找到了稳定的特征跟踪(超过30个跟踪特征)以及足够的视差(超过20像素),则继续下一步。
恢复相对位姿:利用五点算法恢复这两帧之间的相对旋转和平移(平移是相对于尺度的)。
设置尺度并三角化特征:任意设定尺度,并对这两帧中观察到的所有特征进行三角化。
估算其他帧的姿态:基于这些三角化的特征,使用透视n点(PnP, Perspective-n-Point)方法来估算滑动窗口中所有其他帧的姿态。
全局束调整:最后,应用全局全束调整(BA, Bundle Adjustment)来最小化所有特征观测的总重投影误差。此时,我们还没有关于世界坐标系的知识,因此将第一帧相机作为SfM的参考帧。所有帧的姿态和特征位置都相对于这第一帧表示。
视觉-惯性对齐
陀螺仪偏差校准
目标:校准陀螺仪偏差,确保IMU数据的准确性。
方法:通过匹配视觉SfM得到的旋转和IMU预积分的相对约束,线性化IMU预积分项并最小化一个成本函数来校准陀螺仪偏差。然后,使用新的陀螺仪偏差重新计算所有IMU预积分项。
目的:提高IMU数据的可靠性,减少传感器误差对系统的影响。
速度、重力向量和度量尺度初始化
目标:初始化导航所需的状态,包括速度、重力向量和度量尺度。
方法:定义一个状态向量,包括各个帧的机体速度、重力向量和尺度因子。利用视觉SfM和IMU预积分结果,建立线性测量模型,并通过求解线性最小二乘问题来估计这些状态。
目的:为后续的导航和定位提供准确的初始条件,确保系统的鲁棒性和精度。
重力向量精炼
目标:进一步精炼重力向量,使其更加准确。
方法:由于重力的大小已知,重力向量只有两个自由度(方向)。在重力向量的切空间上引入两个变量进行微扰,通过迭代方法不断调整重力向量的方向,直到收敛。
目的:提高重力向量的准确性,从而提升整个系统的性能和可靠性。
初始化完成
目标:将所有状态转换到世界坐标系,完成初始化。
方法:通过将重力向量旋转到Z轴,得到世界坐标系与相机参考帧之间的旋转。将所有变量从参考帧转换到世界坐标系,将机体速度也转换到世界坐标系,并将视觉SfM中的平移分量按尺度因子转换为度量单位。
目的:确保所有状态都在同一个坐标系下,为后续的导航和定位提供一致的初始条件。
总结
视觉-惯性对齐的方法通过校准陀螺仪偏差、初始化速度和重力向量、精炼重力向量以及将所有状态转换到世界坐标系,确保了单目视觉-惯性里程计(VIO)系统的初始状态准确。这种方法提高了系统的鲁棒性和精度,为后续的导航和定位提供了可靠的初始条件。
紧耦合单目VIO
初始化后:系统进入滑动窗口紧耦合单目VIO阶段,用于高精度和鲁棒的状态估计。
滑动窗口:如图5所示,滑动窗口包含多个关键帧和特征点,用于优化状态估计。
状态向量:定义了滑动窗口内的完整状态向量,包括IMU状态、相机外参和特征点深度。
优化目标:通过最小化先验信息和所有测量残差的马氏距离,获得最大后验估计。
IMU测量残差
IMU残差:考虑滑动窗口内两个连续帧之间的IMU测量,定义了预积分IMU测量的残差。
残差组成:包括位置、速度、姿态、加速度偏差和陀螺仪偏差的残差,用于在线校正传感器偏差。
通过定义这些残差项,VINS-Mono能够量化IMU测量值与状态向量预测值之间的差异。这些残差项不仅包括位置、速度和姿态的变化,还包括加速度偏置和陀螺仪偏置的变化,从而使得系统能够在线校正这些偏置,提高状态估计的准确性和鲁棒性。
视觉测量残差
视觉残差:不同于传统的针孔相机模型,定义了特征点在单位球面上的测量残差。
残差计算:考虑特征点在不同帧中的观测,通过反投影函数将像素位置转换为单位向量,并投影到单位球面的切平面上。
边缘化
边缘化策略:为了控制计算复杂度,选择性地边缘化IMU状态和特征点。
边缘化操作:当第二新帧是关键帧时,保留该帧并边缘化最老帧及其测量;当第二新帧不是关键帧时,仅移除该帧及其视觉测量,保留IMU测量。
边缘化方法:使用Schur补法构造新的先验信息,保持系统的稀疏性。
通过边缘化策略,VINS-Mono能够有效地管理滑动窗口中的状态和测量数据,控制计算复杂度,同时保持系统的稀疏性和鲁棒性。这种策略不仅提高了计算效率,还确保了高精度的状态估计,特别适用于对实时性要求较高的应用场景,如无人机和增强现实(AR)。
运动优化
运动优化:对于计算能力较低的设备,如手机,采用轻量级的运动优化以实现相机频率(30 Hz)的状态估计。
优化对象:仅优化最新几个IMU状态的位姿和速度,其他状态视为常数。
优化效果:相比单帧PnP方法,运动优化提供了更平滑的状态估计,适用于无人机和AR应用。
IMU前向传播
IMU前向传播:IMU测量频率远高于视觉测量,通过前向传播最新的VIO估计值,结合最近的IMU测量,实现IMU频率的状态估计。
应用场景:高频状态估计可用作闭环控制的状态反馈,特别适用于自主飞行实验。
再定位(Relocalization)
背景
滑动窗口和边缘化方案虽然控制了计算复杂度,但也引入了系统的累积漂移。
为了消除这些漂移,提出了一种紧耦合的再定位模块,无缝集成到单目VIO中。
再定位流程
回环检测(Loop Detection)
使用DBoW2,一种先进的词袋识别方法,进行回环检测。
除了用于单目VIO的角点特征外,额外检测500个角点并用BRIEF描述符描述,以提高环检测的召回率。
描述符作为视觉词汇查询视觉数据库,DBoW2返回经过时间和几何一致性检查的环闭合候选者。
保留所有BRIEF描述符用于特征检索,但丢弃原始图像以减少内存消耗。
特征检索(Feature Retrieval)
- 目的
当检测到回环时,需要建立局部滑动窗口与回环闭合候选之间的连接。这通过检索特征对应关系来实现。
- 特征对应检索
描述符匹配:使用BRIEF描述符进行特征匹配,找到潜在的特征对应关系。
匹配结果:描述符匹配可能会产生一些错误的匹配对,因此需要进一步的几何异常值剔除。
- 几何异常值剔除
为了减少错误匹配对的影响,VINS-Mono采用了两步几何异常值剔除方法,如图10所示。
- 2-D–2-D 异常值剔除
方法:使用RANSAC算法进行基础矩阵测试。
步骤:
数据准备:使用当前图像和回环闭合候选图像中的2-D特征观测值。
基础矩阵测试:通过RANSAC算法估计基础矩阵,并剔除不符合基础矩阵模型的特征对。
结果:如图10(b)所示,第一步异常值剔除的结果。
- 3-D–2-D 异常值剔除
方法:使用RANSAC算法进行PnP测试。
步骤:
数据准备:使用局部滑动窗口中已知的3-D特征位置和回环闭合候选图像中的2-D特征观测值。
PnP测试:通过RANSAC算法估计相机位姿,并剔除不符合PnP模型的特征对。
结果:如图10©所示,第二步异常值剔除的结果。
- 结果处理
正确回环检测:经过两步几何异常值剔除后,如果候选回环被认为是正确的,将执行重定位(relocalization)。
重定位:通过引入回环闭合约束,重新优化局部滑动窗口中的状态估计,以纠正累积误差。
图解说明
图10展示了特征检索和异常值剔除的过程:
图10(a):BRIEF描述符匹配结果,显示了初步的特征对应关系。
图10(b):2-D–2-D异常值剔除结果,通过基础矩阵测试剔除了一些错误的匹配对。
图10©:3-D–2-D异常值剔除结果,通过PnP测试进一步剔除了一些错误的匹配对。
紧耦合再定位(Tightly Coupled Relocalization)
- 目的
重定位过程的主要目的是将当前滑动窗口与过去的姿态对齐。在这个过程中,所有回环闭合帧的姿态被视为常量。
- 方法
重定位时,我们联合优化滑动窗口,使用所有IMU测量数据、局部视觉测量数据以及检索到的特征对应关系。具体来说,我们可以将回环闭合帧中观察到的特征的视觉测量模型写成与VIO(Visual-Inertial Odometry,视觉惯性里程计)中的视觉测量模型相同的形式,如下所示:
视觉测量模型=VIO中的视觉测量模型
唯一的区别是回环闭合帧的位姿被视为常数,这些姿态可以从姿态图中获取(见第VIII节),或者在第一次重定位时直接从过去的里程计输出中获取。
- 非线性代价函数
为了实现这一点,我们需要稍微修改原来的非线性代价函数(14),添加额外的回环闭合项,新的代价函数如下:
- 多视图约束
当多个回环闭合与当前滑动窗口建立时,我们同时使用所有回环闭合帧的特征对应关系进行优化。这提供了多视图约束,从而提高了重定位的准确性和平滑度。
- 全局优化
重定位后的全局优化以保持一致性将在第VIII节中讨论。
总结
通过将回环闭合帧的姿态视为常量,并将其纳入优化过程中,紧耦合重定位方法能够有效地利用多视图约束,提高重定位的准确性和鲁棒性。这种方法不仅考虑了当前滑动窗口内的IMU和视觉测量数据,还结合了回环闭合信息,从而更好地纠正累积误差。
全局优化
背景:
再定位后,为了保持一致性,需要进行全局优化。
方法:
全局优化将在第八节中讨论,通过优化所有相对位姿约束来保持一致性。
全局位姿图优化和地图重用(Global Pose Graph Optimization and Map Reuse)
背景:
再定位后,需要进行全局位姿图优化,以确保过去的所有位姿注册到一个全局一致的配置中。
四个累积漂移方向
- 背景
在单目视觉惯性系统(VINS-Mono)中,由于重力测量的存在,滚转角(roll)和俯仰角(pitch)是可以完全观测的。然而,位置(x, y, z)和偏航角(yaw)是相对于参考系的相对估计值,容易受到累积漂移的影响。
- 重力矢量的作用
重力矢量:IMU(惯性测量单元)提供的重力测量可以帮助确定水平面。
绝对滚转和俯仰:通过重力矢量,系统可以始终观测到绝对的滚转角和俯仰角。这意味着在世界坐标系中,滚转和俯仰是绝对状态。
- 相对位置和偏航
相对位置和偏航:位置(x, y, z)和偏航角(yaw)是相对于参考系的相对估计值。
累积漂移:由于传感器噪声和累积误差,这些相对估计值容易发生漂移。
- 漂移方向
根据上述分析,累积漂移主要发生在以下四个方向:
x轴位置:沿x轴的位置估计。
y轴位置:沿y轴的位置估计。
z轴位置:沿z轴的位置估计。
偏航角:绕z轴的旋转角度。
- 优化策略
为了充分利用有效信息并高效地校正漂移,VINS-Mono采取了以下策略:
固定无漂移的滚转和俯仰:由于滚转和俯仰是绝对状态,因此在优化过程中将其固定。
4自由度(4-DOF)姿态图优化:只在4个自由度(x, y, z, yaw)上进行姿态图优化,以校正累积漂移。
具体步骤
数据准备:
获取IMU的重力测量数据,确定水平面。
获取视觉和惯性测量数据,估计位置和姿态。
状态估计:
使用重力矢量确定绝对的滚转和俯仰角。
估计相对的位置(x, y, z)和偏航角(yaw)。
漂移校正:
构建姿态图,其中每个关键帧作为一个顶点,边表示相邻关键帧之间的相对平移和偏航。
在姿态图优化中,固定滚转和俯仰,只优化4个自由度(x, y, z, yaw)。
因此,滚转角和俯仰角是世界坐标系中的绝对状态,而x、y、z和偏航角是相对于参考系的相对估计值。
累积漂移仅发生在x、y、z和偏航角上。
总结
通过固定无漂移的滚转和俯仰,VINS-Mono能够在4个自由度上进行姿态图优化,从而有效校正累积漂移,提高系统的鲁棒性和精度。这种方法充分利用了IMU提供的重力信息,确保了位置和偏航角的估计更加准确。
关键帧加入位姿图
背景
关键帧在VIO过程后加入位姿图,每个关键帧作为位姿图中的一个顶点,通过两种类型的边与其他顶点连接。
边类型
顺序边(Sequential Edge):
一个关键帧与其之前的若干关键帧建立多个顺序边。
顺序边表示两个关键帧之间的相对变换,直接从VIO中获取。
顺序边仅包含。
环闭合边(Loop-Closure Edge):
如果关键帧有环连接,则在位姿图中通过环闭合边连接环闭合帧。
环闭合边也仅包含4-DOF相对位姿变换,定义方式与顺序边相同。
环闭合边的值通过再定位结果获得。
总结
通过将关键帧添加到姿态图中,并使用顺序边和回环闭合边连接这些关键帧,VINS-Mono能够构建一个全局优化问题。这种方法不仅考虑了相邻关键帧之间的相对变换,还利用了回环闭合信息,从而有效校正累积漂移,提高系统的鲁棒性和精度。
4自由度位姿图优化
背景
定义帧i和j之间边的残差最小化形式。
整个位姿图通过最小化以下代价函数进行优化:
总结
通过定义边的残差并最小化代价函数,4-DOF姿态图优化方法能够有效地校正累积漂移,提高系统的鲁棒性和精度。异步优化和重定位机制确保了系统的实时性和灵活性。这种方法充分利用了VIO提供的可靠信息,并通过鲁棒范数减少了错误回环闭合的影响。
位姿图合并
背景:
位姿图不仅可以优化当前地图,还可以将当前地图与先前构建的地图合并。
如果加载了先前构建的地图并检测到两个地图之间的环连接,可以将它们合并在一起。
由于所有边都是相对约束,位姿图优化通过环连接自动合并两个地图。
如图13所示,当前地图通过环边被拉入先前的地图中。
合并的目的
姿态图不仅可以优化当前的地图,还可以将当前地图与之前构建的地图合并。这样做的目的是为了扩展和更新地图,提高系统的鲁棒性和精度。
合并的条件
要合并两张地图,需要满足以下条件:
加载先前构建的地图:首先需要加载一个已经构建好的地图。
检测回环闭合:在当前地图和先前构建的地图之间检测到回环闭合连接。
合并的过程
一旦检测到回环闭合连接,姿态图优化会自动将两张地图合并在一起。这个过程可以通过以下步骤实现:
3.1 回环闭合边的作用
回环闭合边:回环闭合边表示当前关键帧与先前关键帧之间的相对变换。这些边通过重定位(relocalization)过程获得,用于检测和校正累积漂移。
相对约束:所有边都是相对约束,这意味着它们表示的是两个关键帧之间的相对变换,而不是绝对位置和姿态。
3.2 合并的具体步骤
检测回环闭合:
当前地图中的关键帧通过重定位算法检测到与先前构建地图中的某个关键帧存在相似性。
这种相似性通常通过特征匹配和几何验证来确认。
添加回环闭合边:
一旦检测到回环闭合,就在当前地图的关键帧和先前地图的关键帧之间添加一条回环闭合边。
这条边包含相对位置和偏航角,表示两个关键帧之间的相对变换。
优化姿态图:
通过最小化代价函数,优化整个姿态图。代价函数包括顺序边和回环闭合边的残差:
固定第一个顶点:
由于所有顶点和边都是相对变量,因此只需要固定姿态图中的第一个顶点。
固定第一个顶点可以防止整体地图的平移和旋转,确保优化后的地图保持一致。
合并的效果
地图对齐:通过回环闭合边,当前地图被“拉”入先前构建的地图中,使得两张地图对齐。
累积漂移校正:回环闭合边有助于校正累积漂移,提高地图的精度和一致性。
总结
通过检测回环闭合并在姿态图中添加回环闭合边,VINS-Mono能够自动合并当前地图和先前构建的地图。这种方法不仅扩展了地图,还通过优化相对约束关系,提高了地图的精度和鲁棒性。固定第一个顶点确保了地图的整体一致性,使得优化后的地图更加可靠。
位姿图保存
背景:
位姿图的结构非常简单,只需保存顶点和边,以及每个关键帧的描述符。
丢弃原始图像以减少内存消耗。
位姿图加载
总结
通过使用相同的保存格式,姿态图加载过程确保了数据的一致性和兼容性。具体步骤包括:
读取顶点信息:加载每个关键帧的初始位置和姿态。
建立回环闭合边:根据保存的回环信息,直接建立回环闭合边。
建立顺序边:每个关键帧与其邻近的关键帧之间建立顺序边。
全局优化:加载完成后,立即进行一次全局4-DOF姿态图优化,以确保地图的准确性和一致性。
并行化
并行化VINS-Mono的可能性
根据搜索结果,确实有可能通过GPU对VINS-Mono代码进行并行化处理。特别是在嵌入式设备中,利用GPU的并行计算能力可以有效提升算法的性能。这表明,通过GPU并行化VINS-Mono算法是可行的,并且已经有研究者在这方面取得了进展。
并行化的部分
非线性优化过程:这是VINS-Mono后端优化的核心,涉及到状态估计的更新。在VINS-Mono的非线性优化过程中,增量方程的构造和求解可以并行化。这一步骤涉及到大量的矩阵运算和数据更新,非常适合利用GPU的并行处理能力。这涉及到计算统一的设备架构,使用cuSOLVER和cuBLAS提供的并行化方法进行算法的边缘化。
光流跟踪:光流跟踪是VINS-Mono前端的一部分,负责在连续帧之间跟踪特征点。光流跟踪过程中的图像特征点检测与匹配程序可以重写以实现并行化。这包括特征点的提取、跟踪和匹配,这些步骤在GPU上并行执行可以显著提高处理速度。
边缘化(Marginalization):边缘化是后端优化的一部分,用于维护SLAM系统的稀疏性。在状态估计中,边缘化的计算也可以通过GPU并行化来加速。边缘化是SLAM系统中用于处理状态变量的一种技术,涉及到大量的线性代数运算。
并行化的效果
光流跟踪和边缘化速度提升:根据研究,所提出的并行化方案在NVIDIA的Jetson TX2模块上进行了测试,并与原始的VINS-Mono算法进行了比较。结果表明,光流跟踪的速度提高了约1.5-1.7倍,边缘化的速度提高了约1.9倍。
充分发挥GPU的并行计算能力:并行化后的VINS-Mono算法在CPU和GPU组成的异构计算模型上运行良好,可以充分发挥GPU的并行计算能力。
并行化的实现
并行化的实现涉及到对VINS-Mono算法中的关键部分进行修改,以适应GPU的并行处理架构。这可能包括使用特定的GPU编程语言(如CUDA)来重写部分代码,以及优化数据传输和处理流程以减少延迟和提高效率。
cuSOLVER和cuBLAS:在并行化过程中,使用了NVIDIA的cuSOLVER和cuBLAS库来加速线性代数运算。这些库提供了在GPU上进行矩阵分解和线性系统求解的高效算法。
综上所述,通过GPU并行化VINS-Mono代码是完全可能的,并且可以在非线性优化和光流跟踪等关键部分实现并行化,从而显著提高算法的处理速度和效率。这为VINS-Mono算法在高性能计算平台的应用提供了新的可能性。
并行化论文
Parallel VINS-Mono algorithm based on GPUs in embedded devices
嵌入式设备中基于 GPU 的并行 VINS-Mono 算法
International Journal of Advanced Robotic Systems ( IF 2.1 ) Pub Date : 2022-01-31 , DOI: 10.1177/17298814221074534
Quan Lu, Jianli Xu, Likun Hu, Minghui Shi
Affiliation
传统的视觉-惯性同步定位与建图算法通常是基于CPU设计的,如果直接移植到带有GPU模块的嵌入式板卡上,就无法有效利用GPU的并行计算功能。然而,嵌入式设备的计算能力是有限的。视觉惯性同步定位与建图算法在GPU空闲时占用大部分CPU计算资源是不合理的。本文提出了一种基于GPU并行计算技术的VINS-Mono算法并行化方案。基于计算统一的设备架构,增量方程的构造和求解在算法的非线性优化过程中并行化,并使用cuSOLVER和cuBLAS提供的并行化方法进行算法的边缘化。此外,算法中重写了光流跟踪过程中图像特征点检测与匹配的程序,实现了光流跟踪的并行化。经过并行化后,发现该算法在CPU和GPU组成的异构计算模型上运行良好,可以充分发挥GPU的并行计算能力。该方法在 NVIDIA 的 Jetson TX2 模块上进行了测试,并与 VINS-Mono 算法进行了比较;发现增量方程的构造和求解速度相同,但所提出方案的光流跟踪和边缘化速度分别提高了约 1.5-1.7 倍和 1.9 倍。
CUDA库
- cublas
- cuSOLVER
- Thrust
- Thrust: The C++ Parallel Algorithms Library
参考文献
- VINS-Fusion-gpu
- Visual Inertial System (VINS) with Stereo Vision and GPU Acceleration
- VINS系列|VINS-Fusion论文精读
- VINS Fusion 笔记
- Jetson Orin NX 开发指南(6): VINS-Fusion-gpu 的编译和运行
- VINS-Fusion-gpu-XavierNX-D435i
- VINS-Fusion-GPU-BA
- VINS/VIO的并行化与工程化(GPU篇)
- Parallel VINS-Mono algorithm based on GPUs in embedded devices
- Parallel implementation for real-time visual SLAM systems based on heterogeneous computing
- Improving the performance of bundle adjustment for on-device SLAM using GPU resources