DEMO-lidar介绍
DEMO-lidar介绍
论文:《Real-time Depth Enhanced Monocular Odometry》
Real-time Depth Enhanced Monocular Odometry概述
DEMO-lidar源码解析
demo-rgbd解读
http://wiki.ros.org/demo_lidar
DEMO-lidar:Depth Enhanced Monocular Odometry (Demo),是一个组合深度信息的单目视觉里程计。主要由三个主线程:
- “feature tracking” 特征跟踪:提取并跟踪匹配角点(Harris corners)特征,使用Kanade Lucas Tomasi (KLT) 完成特征提取。
- “visual odometry” 视觉里程计,基于帧与帧之间的特征点匹配关系,计算帧与帧之间的相机运动。其中附加上深度信息的特征点(通过深度图或通过估计相机运动的三角估计方法得到深度信息)解决6自由度运动估计,没有深度信息的特征点有助于解决方向估计。
- “bundle adjustment” 光束法平差,BA优化,就是通过特征点投影在图像上的像素,来优化运动估计。
如果有IMU数据,转向测量值可由角速率和加速度积分得到,可用于优化滚转以及俯仰角,VO来优化偏航角和平移。
硬件:单目+(imu)+ lidar/rgbd
以下为算法框架图:
论文标识指代:
k指第k个关键帧。
C为系统坐标系,采用右手坐标系,x朝左,y朝上,z朝前。其实,使用z朝前,可以正好对应相机模型的深度信息。
大写I为一帧的特征点集合,i指代其中的特征点,。
设第k帧图像中,坐标系为,特征点i具有深度信息,则设其坐标为.
如果特征点没有深度信息,则使用归一化坐标来表示特征点i坐标,即。
运动估计公式推导:
设两帧k-1与k帧之间的一对匹配点
与。则有
1)假设深度信息已知,但由于第k帧的运动估计尚未进行,因此,没有得到的深度信息。因此,将按归一化坐标表示,
即,。
令为深度信息。
则:
因为未知,使用初等行变换消去。
将等式两侧,第一行 减去 第三行乘以,得到论文公式(3):
将等式两侧,第二行 减去 第三行乘以,得到论文公式(4):
其中的下表h表示矩阵的第h行。
2)假设深度信息未知,也使用归一化坐标表示,
即,。
得到匹配特征点之间的归一化坐标关系如下:
仍利用初等行变换,消去。
第一行 减去 第三行乘以,
第二行 减去 第三行乘以,
第一行乘以 减去 第二行乘以,最后整理可得三个约束方程,论文公式(6):
利用LM算法得到最优值。
运动估计算法流程
输入:(当前帧无深度信息),(上一帧有深度信息的点云)或(上一帧有深度信息的点云)
输出:(旋转及平移变换估计)
根据上帧是否有深度信息,选择对应的约束方程,并迭代优化得到变换值。
深度特征点关联
深度点云降采样,以角度间隔均匀分布特征点(离相机越近,则点越密)。且以球坐标表示,即弦长、方位角(左右)、极角(上下),变换到下。
以2D KD-tree存储特征点。设,在的kdtree中找到与i相近的3个点,记为:
则的深度值通过解以下方程得到。
该方程与loam的点到面类似,只是没有分母项,意思是约束点i落到三个j点构成的平面上。
BA(Bundle Adjustment)后端优化
相对于前端的运动估计,BA优化采用批量优化,估计频率是前端odom的1/5。感觉优化思路类似,都是优化投影误差方程来得到运动估计,只是BA为批量优化,处理点云的点云为累积点云,而非单帧的点云。
约束方程:就是通过优化相同特征点在不同帧的图像中获得的特征点的投影坐标(可理解为像素,归一化坐标),来估计得到更加准确的定位估计。
约束方程如下:
其中:表示特征点i在j frame坐标系下的观测值。
BA使用开源的iSAM库实现,作者说iSAM可以支持相机参数自定义,并且能够很好的处理有无深度的特征点。