当前位置:网站首页>【SLAM】LVI-SAM解析——综述
【SLAM】LVI-SAM解析——综述
2022-07-28 05:09:00 【iwander。】
LVI-SAM可以认为是LIO-SAM和VINS-MONO的合体,在此基础上的修改不大。
github: https://github.com/TixiaoShan/LVI-SAM
paper: LVI-SAM: Tightly-coupled Lidar-Visual-Inertial Odometry via Smoothing and Mapping
有一个注释版的代码:https://github.com/electech6/LVI-SAM_detailed_comments
这个注释版代码中一些关于坐标系的注释我认为是有错误的,大家擦亮眼睛。LIO-SAM和VINS-MONO我也分别写过比较详细的代码解析,详情见链接。
1. 综述

这个是论文里的流程图,很贴心的介绍了LVI-SAM改了哪些地方:
1.VINS-MONO的初始化由LIO-SAM的imuPreintefration提供;
2.VINS-MONO的feature_tracker同时和来自LIO-SAM的imageProjection的lidar进行了深度关联,就不用自己进行三角化;
3.LIO-SAM的imageProjection订阅的里程计来自VINS-MONO的estimator的imucallback提供的高频里程计;
4.VINS只进行回环检测,不做重定位,回环检测的结果提供给LIO-SAM的mapOptimization进行icp匹配+全局图优化。
代码流程图如下:

在代码里,论文中指出的来自vio的between factor并没有加上:

2.注意事项
代码里坐标系系统比较混乱,官方数据集的坐标系是这样的:

红色是相机坐标系,蓝色是lidar坐标系,绿色是LVI-SAM的坐标系,橙色是VINS的坐标系。官方配置文件中params_camera.yaml里的lidar_to_cam_XX外参指蓝色和绿色之间的外参,并不是蓝色和红色之间的外参。
此外,Feature_tracker_node的get_depth()中给特征点赋予lidar深度时,忽略了cam和lidar之间的平移,即image特征的单位球和点云的单位球球心不统一,分别是cam和IMU,rotation是统一的,都是为lidar的R。
3. LVI-SAM主要改了哪些地方
3.1. image feature的数据关联

在一个位于相机中心的单位球体上投影视觉特征和激光雷达深度点,借助球面2D kdtree找到球体上最近的三个深度点。特征深度是由视觉特征和照相机中心Oc形成的线的长度,它与笛卡尔空间中由三个深度点形成的平面相交。
考虑到每帧image都会对应积攒了一段时间的lidar点云,持续被追踪的特征点可能会投影上不同的深度值。所以他们会检查一个特征点附近的深度值差判断是否采用该深度值。
lidar点云的积攒:visual_odometry/visual_feature/feature_tracker_node.cpp:lidar_callback()
深度关联:visual_odometry/visual_feature/feature_tracker.h:get_depth()
3.2 VINS的初始化
整个系统最开始初始化的地方是LIO-SAM的mapOptimization的updateInitialGuess()这里,第一帧会使用9轴IMU的pitch,roll信息确定R,首帧lidarpose确定之后提供给IMUPreintegration联合imu预积分量进行图优化,然后再发布高频的imuPose被vins-estimator-node订阅,用它计算得到的PQV+bias对VINS系统进行初始化。
获取LIO-SAM的数据: visual_odometry/visual_estimator/initial/initial_alignment.h:Class odometryRegister
VINS初始化:visual_odometry/visual_estimator/estimator.cpp: initialStructure()
3.3 其它
还有就是VINS给LIO-SAM提供pose初值,还有回环检测,这些内容都比较简单,就不贴地址了。
边栏推荐
- Redux basic syntax
- Keil Chinese garbled code solution
- Look at the experience of n-year software testing summarized by people who came over the test
- Do you know several assertion methods commonly used by JMeter?
- How to quickly turn function test to automatic test
- SMD component size metric English system corresponding description
- What tools do software testers need to know?
- 【内功心法】——函数栈帧的创建和销毁(C实现)
- 【CPU占用高】software_reporter_tool.exe
- The default isolation level of MySQL is RR. Why does Alibaba and other large manufacturers change to RC?
猜你喜欢

你必需要了解的saas架构设计?

The go zero singleton service uses generics to simplify the registration of handler routes

What is the reason why the easycvr national standard protocol access equipment is online but the channel is not online?

C language classic 100 question exercise (1~21)

RT_ Use of thread mailbox

Melt cloud x chat, create a "stress free social" habitat with sound

Comprehensively analyze the differences between steam and maker Education

go-zero单体服务使用泛型简化注册Handler路由

FreeRTOS个人笔记-任务通知

Leetcode 454. Adding four numbers II
随机推荐
flink思维导图
Win10 machine learning environment construction pycharm, anaconda, pytorch
[internal mental skill] - creation and destruction of function stack frame (C implementation)
Clickhouse填坑记2:Join条件不支持大于、小于等非等式判断
【CVPR2022 oral】Balanced Multimodal Learning via On-the-fly Gradient Modulation
CPU and memory usage are too high. How to modify RTSP round robin detection parameters to reduce server consumption?
Why is MD5 irreversible, but it may also be decrypted by MD5 free decryption website
如何在 FastReport VCL 中通过 Outlook 发送和接收报告?
Making RPM packages with nfpm
Driving the powerful functions of EVM and xcm, how subwallet enables Boca and moonbeam
When initializing with pyqt5, super() and_ init _ () problems faced by the coordinated use of functions, as well as the corresponding learning and solutions
UI automation test farewell from now on, manual download browser driver, recommended collection
FreeRTOS personal notes - task notification
What is the reason why the easycvr national standard protocol access equipment is online but the channel is not online?
Testcafe provides automatic waiting mechanism and live operation mode
Redux basic syntax
MySQL(5)
塑料可以执行GB/T 2408 -燃烧性能的测定吗
Improving the readability of UI layer test with puppeter
为什么md5不可逆,却还可能被md5免费解密网站解密