当前位置:网站首页>【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初值,还有回环检测,这些内容都比较简单,就不贴地址了。
边栏推荐
- 使用nfpm制作rpm包
- Check box error
- Analysis of the reason why easycvr service can't be started and tips for dealing with easy disk space filling
- What SaaS architecture design do you need to know?
- MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC?
- Angr (XI) - official document (Part2)
- How to send and receive reports through outlook in FastReport VCL?
- flink思维导图
- 微服务故障模式与构建弹性系统
- Implementation of simple upload function in PHP development
猜你喜欢

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

猿辅导技术进化论:助力教与学 构想未来学校

Easycvr Video Square snapshot adding device channel offline reason display

【ARXIV2204】Vision Transformers for Single Image Dehazing

Do you know several assertion methods commonly used by JMeter?

Design and development of C language ATM system project

【ARXIV2205】EdgeViTs: Competing Light-weight CNNs on Mobile Devices with Vision Transformers

UI automation test farewell from now on, manual download browser driver, recommended collection

Special topic of APP performance design and Optimization - poor implementation affecting performance

How does Alibaba use DDD to split microservices?
随机推荐
How to quickly turn function test to automatic test
Analysis of the reason why easycvr service can't be started and tips for dealing with easy disk space filling
Interpreting the source code of cfrunloopref
Observable time series data downsampling practice in Prometheus
使用nfpm制作rpm包
Activation functions sigmoid, tanh, relu in convolutional neural networks
Inspire domestic students to learn robot programming education for children
Making RPM packages with nfpm
Can plastics comply with gb/t 2408 - Determination of flammability
The go zero singleton service uses generics to simplify the registration of handler routes
Mysql基本查询
【ARXIV2203】CMX: Cross-Modal Fusion for RGB-X Semantic Segmentation with Transformers
HDU 2586 How far away ? (LCA multiplication method)
FPGA:使用PWM波控制LED亮度
Paper reading notes -- crop yield prediction using deep neural networks
Improving the readability of UI layer test with puppeter
What tools do software testers need to know?
list indices must be integers or slices, not tuple
为什么md5不可逆,却还可能被md5免费解密网站解密
Angr (XI) - official document (Part2)