作者想解决在更具体场景下(自动驾驶、多机器人协调、AR),动态SLAM系统对环境中的动态物体的追踪问题。相当于结合了SLAM和多目标跟踪,是比较新的问题
文章涉及到SLAM+多目标追踪,文章的系统框架是基于上一代DynaSLAM做的改进,而DynaSLAM是基于ORBSLAM做的改进;
提出了一种将场景结构,相机位姿,动态目标轨迹在一个局部窗口内tightly BA优化的方法,其中动态目标的Bounding Box也可以通过优化其位姿实现更新;
以此实现了一个基于Stereo/RGBD的动态SLAM系统;
将SLAM和多目标追踪结合,用实时多目标追踪解决SLAM中动态污染的问题,同时用SLAM的定位效果完成多目标追踪。
实验分两部分:动态物体的纳入对视觉里程计的影响+多目标跟踪效果;
Visual Odometry:评价指标选用ATE,RPEt,RPER
比较了基础模型ORBSLAM和上一代框架DynaSLAM;
比较了同样将动态物体和SLAM框架结合的最新系统:ClusterSLAM,ClusterVO,VDO-SLAM:
①效果比ClusterSLAM好;
②除了旋转方向上,其他结果比VDO-SLAM;
③和ClusterVO效果相当;
Multi-Object Tracking:动态物体的轨迹和3D bounding box来自雷达数据和手工标注,评价指标选用多目标轨迹误差metric MOTP+相机轨迹误差metric TP
对于目标检测object detections:
比较了四个基于目标检测的算法;
对于目标轨迹object trajectories:
选取了具有较长动态物体停留的11段轨迹,计算误差;
Timing Analysis:实时性分析
在动态物体较少的情况下(两个动态物体)达到12fps,动态物体较多的情况下(20个)能够保持~10fps。(没有包括CNN处理的时间,那感觉没什么比较性了)
视觉里程计实验中用到:KITTI中的tracking和raw数据;(是否太少了?)
1.没有在自测的数据集实验,同时实验数据较少;
2.和上一代类似,其实有很多可以精简优化以加速的地方(匹配方式,object构建的方法);
3.说是object的track,其实只是point的聚类,两个object之间是没有任何关系的,如:一辆车辆被遮挡后重新出现,会被认定为一个新object而不是对老object的回环;
与ORBSLAM相同的蓝色关键帧轨迹+考虑优化动态部分的青色关键帧轨迹
作者没有给出文章框架…但是从方法内容上看是在上一代DynaSLAM的基础上添加了红线框的部分:Data Association特征-目标的关联、Dynamic Features目标表示、BA优化
①对于一张图片,分别计算特征点和语义特征;
语义目标的创建:moveable语义标签+包含大量特征点;(初始位姿为描述其的3D点质心+单位旋转)
②用imoveable区域初始化位姿;
动态特征点关联/object匹配:
a.object速度已知,假设匀速并做投影匹配;
b.object速度位置,或a没有足够匹配,在连续帧进行暴力匹配找到具有最多match的mask区域;
④用IOU检测匹配
以点云描述object太expensive,作者对每个object新建一个对应的obj坐标系,obj上的点在这个坐标系上描述,因为点相对这个坐标系是长久的、相对静止的;后续只优化这个坐标系的位姿
加入object后的几何投影图如下:
关键帧的新建:
①track很弱(和ORBSLAM2中相同);
②某个object的track很弱(一个具有大量特征点的obj在当前只track到一小部分);
因为①插入关键帧:和ORBSLAM2相同;
因为②插入关键帧:在接下来两秒内将该object的位姿、速度、包含的特征点,同相机位姿一起进行local BA优化;
因为①+②插入关键帧:相机位姿、地图、目标位姿、目标速度、目标特征点一同构建BA优化;
①速度连续性误差(速度不能突变):
e v c t e i , k = ( v i + 1 k − v i k w i + 1 k − w i k ) e_{vcte}^{i, k} = \left (\begin{array}{rrrr} v_{i+1}^k-v_i^k \\ w_{i+1}^k - w_i^k\\ \end{array}\right) evctei,k=(vi+1k−vikwi+1k−wik)②匀速模型误差:
e v c t e , X Y Z i , j , k = ( T W O k , i + 1 − T W O k , i △ T O k i , i + 1 ) x ‾ O j , k △ T O k i , i + 1 = ( E x p ( w i k △ t i , i + 1 ) v i k △ t i , i + 1 O 1 × 3 1 ) \begin{aligned} &e_{vcte,XYZ}^{i,j,k} = (T_{WO}^{k, i+1} - T_{WO}^{k, i}\triangle T_{O_k}^{i, i+1})\overline{x}_O^{j, k} \\ &\triangle T_{O_k}^{i, i+1} = \left(\begin{array}{rrrr} Exp(w_i^k\triangle t_{i, i+1}) & v_i^k\triangle t_{i, i+1}\\ O_{1\times 3} & 1\end{array}\right) \end{aligned} evcte,XYZi,j,k=(TWOk,i+1−TWOk,i△TOki,i+1)xOj,k△TOki,i+1=(Exp(wik△ti,i+1)O1×3vik△ti,i+11)即object上的特征点通过求解的位姿 T W O k , i + 1 T_{WO}^{k, i+1} TWOk,i+1得到的世界坐标位置和通过恒速模型得到的 △ T O k i , i + 1 \triangle T_{O_k}^{i, i+1} △TOki,i+1计算的位姿 T W O k , i △ T O k i , i + 1 T_{WO}^{k, i}\triangle T_{O_k}^{i, i+1} TWOk,i△TOki,i+1得到的世界坐标位姿之间的误差;
静态点的重投影误差
e r e p r i , l = u i l − π i ( T C W i x ‾ W l ) e_{repr}^{i,l} = u_i^{l} - \pi_i(T_{CW}^i\overline{x}_W^{l}) erepri,l=uil−πi(TCWixWl)④动态点的重投影误差
e r e p r i , j , k = u i j − π i ( T C W i T W O k , i x ‾ O i , k ) e_{repr}^{i,j,k} = u_i^{j} - \pi_i(T_{CW}^i T_{WO}^{k,i}\overline{x}_O^{i,k}) erepri,j,k=uij−πi(TCWiTWOk,ixOi,k)表示object k上的点j转换到世界坐标系再转换到相机坐标系上和观测u的像素误差;
最终的误差,从左到右表示静态重投影误差(棕色)+①速度连续性误差(红色)+④动态重投影误差(青色)+②匀速模型误差(粉红色):
m θ i n ∑ i ∈ C ( ∑ l ∈ M P i ρ ( ∣ ∣ e r e p r i , l ∣ ∣ ∑ i l 2 ) + ∑ k ∈ O i ( ρ ( ∣ ∣ e v c t e i , k ∣ ∣ ∑ △ 2 2 ) + ∑ j ∈ O P k ( ρ ( ∣ ∣ e r e p r i , j , k ∣ ∣ ∑ i j 2 ) + ρ ( ∣ ∣ e v c t e , X Y Z i , j , k ∣ ∣ ∑ △ t 2 ) ) ) ) \underset{\theta} min\sum_{i\in\mathcal{C}}(\sum_{l\in{\mathcal{MP}_i}}\rho(||e_{repr}^{i, l}||_{\sum_i^l}^2)\ +\ \sum_{k\in\mathcal{O_i}}(\rho(||e_{vcte}^{i, k}||_{\sum_{\triangle}^2}^2)\\ +\sum_{j\in\mathcal{OP}_k}(\rho(||e_{repr}^{i,j,k}||_{\sum_i^j}^2)\ +\ \rho(||e_{vcte,XYZ}^{i,j,k}||_{\sum_{\triangle_t}}^2)))) θmini∈C∑(l∈MPi∑ρ(∣∣erepri,l∣∣∑il2) + k∈Oi∑(ρ(∣∣evctei,k∣∣∑△22)+j∈OPk∑(ρ(∣∣erepri,j,k∣∣∑ij2) + ρ(∣∣evcte,XYZi,j,k∣∣∑△t2))))待优化参数列表,从左到右表示相机位姿+object位姿+静态3d点坐标+动态object点坐标+速度+角速度:
θ = { T C W i , T W O k , i , X W j , X O j , k , v i k , w i k } \theta = \{T_{CW}^i, T_{WO}^{k,i}, X_W^j, X_O^{j,k}, v_i^k,w_i^k\} θ={TCWi,TWOk,i,XWj,XOj,k,vik,wik}
BA图和海森矩阵:
上图表示:5个关键帧+1个object+10个object point+10个静态point的海森矩阵,需要想一想的是:
①Objects-KFs:虽然只有一个object,但是优化是在一个local windows中进行的,在这个local windows中每个时刻都会对应一个object_t,被关键帧观测的object_t被标记为粉红色,所以呈现这样的分布;
②Objects-Objects:相邻时刻的object之间会有相关性,所以呈现这种斜对角线的柱状分布;
用一个长方体描述object,从作者文字描述看不懂是怎么得到这个box,应该跟别的工作类似,以后再看
1、关键帧的新建规则会不会导致一直创建关键帧?