视觉建图多次数据融合的思考

学术上提供的算法程序大都只能处理一次采集的数据,但实际应用中,数据是源源不断的到来,所以我们有必要分析大量数据能怎么影响地图的精度。并且有一种筛除数据的机制。

  1. 在小区域内,建立局部地图,优化keyframe和mappoint之间的重投影误差。能从更多的角度来观察kf和mp能够提升大家的精度。但是当区域扩大的时候,仍然有累计误差。
  2. 对于长距离,一次从A点到B点的odometry相当于是一次距离测量。我们熟知的多次测量取平均的方法在这里就有用了。当时如果路途上有什么东西会每次都让测量不准,这也是没办法的。就像我们拿了一根有缺陷的尺子,测量再多次数都没用。唯一办法就是换个尺子。视觉建图中,我们可以考虑加上其他传感器的独立测量,比如激光slam。
  3. 我们期望一个mp被更多的kf看到,一个kf能看到更多的mp。所以对于观察数少于多少的mp合kf都应该删除。另外空间上重复的mp和kf也应该删除,但还要保证他们的观察对象也是重复的。另外新的比老的数据更重要,比如一个mp长期没被观察到了,所以他已经没用了,不能在那里站位置。比如一个mp虽然能被很多kf观察,但是都是历史的kf。新来的数据又用不到他,如果没有机制把他删除,后面的点就加不进来。但是也有风险是如果删掉后,又刚好有能和他匹配上的kf来到了。数据的筛选要考虑到各种各样的问题。
  4. 所以长距离的轨迹调整,使用pose graph就够了。3d点一定要和kf绑定起来。还有种思路是使用kf尽量保存完整的mp的限制,这样不需要使用mp的先验信息。这样来看的话,其实mp不需要保存他的位置,但是共视关系需要保存。
  5. 要多次测量取平均的话,那一定要测量的是一个东西。所以只要在A,B两点能精确匹配上就行(kf和mp的匹配)。如果只有gps的大概对齐是不够的。这样来看,回环并不是唯一的选择。
  6. 需要对不同传感器计算的误差有分析,比如gps的误差大概是10m,而odometry的误差累计大于10m后就需要考虑和gps融合,这里可以借鉴卡尔曼滤波的思路来实现。
  7. 超大规模的地图,我们需要一个全局的骨架。把一开始零散的数据大概分布一下。这个骨架室外多用gps,室内多用wifi定位。在某些关键点上面最好能用最精确的方式和视觉绑定定位一下。
  8. 同类传感器数据需要能够匹配才算融合在一起,不同传感器必须要能一次测量并绑定一起(知道他们的空间和时间关系)。所以第6点说的关键点必须是各种测量的大融合:不同光照,不同传感器。
  9. 即使不能把所有数据都融合在一起,对于只需要局部定位的情况,我们可以同时基于多个局部地图定位,然后给出效果最好的那个。
  10. 比如我们使用激光slam在A到B之间量出了距离,然后在A,B两点上做大量的融合。这样就建立起一个较好的骨架。A,B之间就区域就只需要松散的数据就能建立起map。
  11. 一个传感器的精度和和其他传感器的匹配性都很重要。一个只有激光的测量,虽然能测很准,但是不能用来优化其他数据,就没有太大作用。
  12. 视觉里面最准的还是frame之间的相似变换。如果能保存每个kf的2d特征,新来的frame先和某几个frame做相似匹配,然后再综合计算scale。
  13. imu只能给出时间是局部的限制。但当一个区域被跟新很多次之后,所有kf之间都不是时间连续的了,这个时候imu其实就没用了。所以如果要使用imu的时候,不仅要kf看到的mp多,时间上还要有些连续性。这样来看,在删除kf的时候,需要优先保留一段时间上都比较好的kf,或者连续kf长的那一段。
  14. 滤波器融合和优化融合:滤波器是不断的在历史先验信息上用新的数据来修正(快,可以随时给出一个结果),优化法是一次使用所有数据。当他们使用的都是相同数据的时候,并且没有线性化的近似时,两者的结果是一样的。但是如果历史有的数据有错误,优化法可以很容易的剔除数据,得到没有错误的结果,但是滤波法就不行了。另外滤波法还建立在正确的噪音的估计上(就像流水求平均,你必须预先知道总的数据数量),优化法不用。

猜你喜欢

转载自blog.csdn.net/ziliwangmoe/article/details/82949733