【深蓝课程vins fusion】学习笔记

第一章

ros查看节点的链接状态rqt——graph

命令:运行vins fusion后运行如下命令:

rosrun rqt_graph rqt_graph

在这里插入图片描述

相机配置文件

主要包括相机的ros定义话题、相机的参数配置文件等,设置是否估计相机外参,相机到世界坐标系下的变换矩阵,特征跟踪相关(特征跟踪点数目、特征点之间最小距离等)

评估工具

evo
rpg_trajectory_evaluation

vins算法流程

在这里插入图片描述

源码组织架构

在这里插入图片描述

第二章

rosNodeTest.cpp

imu主要的数据是:

void imu_callback(const sensor_msgs::ImuConstPtr &imu_msg)//IMU
{
    double t = imu_msg->header.stamp.toSec();//时间戳
    double dx = imu_msg->linear_acceleration.x;//线加速度
    double dy = imu_msg->linear_acceleration.y;
    double dz = imu_msg->linear_acceleration.z;
    double rx = imu_msg->angular_velocity.x;//角加速度
    double ry = imu_msg->angular_velocity.y;
    double rz = imu_msg->angular_velocity.z;
    Vector3d acc(dx, dy, dz);//加速计的数据
    Vector3d gyr(rx, ry, rz);//陀螺仪的数据
    estimator.inputIMU(t, acc, gyr);//把三个数据传入到估计器中
    return;
}

查看订阅者和发布者成员命令(没有可不用赋值)

rosmsg show sensor_msgs+需要看的东西
rosmsg show nav_msgs+需要看的东西 

ros发布的代码-visualization.cpp

可视化的小相机、线段等绘制

在这里插入图片描述

读取配置文件后赋值

在这里插入图片描述

第三章

针孔相机模型

《视觉slam14讲》p99页
相机内参和外参:内参就是相机的焦距以及相机平面坐标系到像素坐标系的缩放及平移系数;外参就是世界坐标系下的p到相机坐标系下的变换矩阵

trackImage函数流程图(比较重要)

在这里插入图片描述

  • 光流跟踪函数的参数:
  • 在这里插入图片描述

函数的最终流程图:

在这里插入图片描述

特征提取与跟踪算法

在这里插入图片描述

  • LK光流法:《视觉slam14讲》p207页
    在这里插入图片描述

特征点

在这里插入图片描述

外点的剔除

在这里插入图片描述

  • 这里为了加快外点的剔除速度,当status为0时,不管它,为1时,则向前提,这样不仅提高了速度,而且节省空间,在光流法中status为1表示特征点跟踪失败
  • 一般进行正向和反向光流跟踪,如果像素点大于0.5,则删除

一个特征点包含的信息

在这里插入图片描述

  • 归一化平面不太严谨
  • 这里的成像平面的速度指的是像素的变换除以时间

均匀分布特征点

在这里插入图片描述

第四章

对极几何(求解R T)

《视觉slam14讲》p165
在这里插入图片描述

三角测量(恢复深度)

《视觉slam14讲》p177
在这里插入图片描述

PnP

假设空间点是不动的,通过调整相机位姿使其观测到的2维点更加对应3d点
在这里插入图片描述

BA

在这里插入图片描述

惯性测量单元

在这里插入图片描述

加速度计实现原理

胡克定律+牛顿第二定律

IMU建模(简化后)

在这里插入图片描述
在这里插入图片描述

  • 注意:在自己设备进行IMU数据标定时需要注意离散时间和联系时间,必要时要对自己的设备进行转换

IMU标定工具

通过观测艾伦方差曲线得到IMU内参

一般相机与IMU标定外参的过程

由于之前的建模过程中很多误差项都是架设为理想状态而省略,因此在实际标定过程中的外参结果并不准确,因此通常采用以下步骤标定IMU的外参
在这里插入图片描述

第五章

VIO中的优化

在这里插入图片描述

Ceres优化

在这里插入图片描述

视觉惯性里程计部分estimator.cpp

重点:待优化变量的管理、初始化、残差项构建、optimization()、slidWindow()

基于紧耦合优化的滑动窗口优化

在这里插入图片描述

  • 知道深度后(由于相机的外参是已知的,因此不需要讲世界坐标系下的3d点用xyz表示出来,直接用深度表示后可以方便计算),就能知道3d点的坐标
  • 带估计量:x0-xn是相机的位置(因为imu和相机的外参已知,所以这里表示的既可以是相片估计的位置也可以是IMU估计的位置),xbc是相机的外参、λ是特征点的逆深度、td是时间偏移,xk是IMU的数据和两个零偏
  • 边缘化后的先验:相机的优化误差是重投影误差,IMU?
  • IMU残差项:IMU预积分
  • 视觉残差项:重投影误差

滑窗策略

在这里插入图片描述
防止相机在静止过程中导致整个滑窗全是该静止时候的相片

三角化和pnp实现初始值

深度初始值通过三角化得到,相机初始值通过pnp得到

视差

其实就是这一帧像素左边-上一帧像素坐标

一些特征点管理的函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Estimator主要代码流程梳理

在这里插入图片描述

  • 这里可以修改,假如相机有60hz,可以把2改成6来降低计算
    在这里插入图片描述

非线性优化

前提必须掌握的知识

《视觉slam14讲》高斯牛顿法

链接: 高斯牛顿法代码

ceres求解的步骤
  • 定义每个参数块
  • 定义残差块的计算方式
  • 残差块需要定义雅可比矩阵的计算方式(自动或手写),自动求导需要指定误差项和优化变量的维度
  • 把所有的参数块和残差块加入Ceres定义的Problem对象中
视觉salm的ceres求解

链接: ceres

必要的知识

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

视觉残差项的构建

在这里插入图片描述

注:以单目+IMU为例,在vins fusion中,重投影误差指的是特征3d点的第一帧在其他帧上的投影之间的差
视觉残差计算的推导(同一目不同帧)
  • 残差:二维
  • 待估计量:两帧的PQ(位置和姿态)、该目与IMU的外参、该特征点的逆深度、时间偏移
  • 观测量:特征点在两帧上的像素坐标、特征点在成像平面上的速度、两帧时刻算出的时间偏移
  • 时间偏移计算?
    在这里插入图片描述
  • 式中的经典过程是将第i帧的像素坐标乘深度后通过变换矩阵到IMU坐标系下,在乘变换矩阵到世界坐标系下,通过成变换矩阵的逆得到该点在第J帧的IMU坐标系,在乘变换矩阵的逆得到该点在第J帧的像素坐标,观测的像素坐标与转换的像素坐标作差,即可得到视觉残差
  • 这个步骤主要在factor文件夹下的projectionOneFrameTwoCamFactor.cpp文件
视觉残差对应雅可比的推导(同目不同帧)
  • 残差对待估计量求偏导组成雅可比矩阵
    在这里插入图片描述
    在这里插入图片描述
  • 注意:此处的推导可以参考《视觉slam14讲》中的p186
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

imu残差

有点难,暂时没推导
在这里插入图片描述
在这里插入图片描述

初始化

vins初始化流程

在这里插入图片描述

  • 如果是双目则不需要以上模块了
    在这里插入图片描述

IMU初始化第一帧的姿态

在这里插入图片描述

  • 通过这段时间加速度求解重力方向,得到z轴与重力方向的夹角,进而转换为世界坐标系的坐标,但是通常假设这个过程稿是做了一个匀速运动,因此得到的结果并不准确

回环检测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值