地图构建是SLAM系统中非常重要的部分,一个信息完善的地图对于后续导航相当重要。运动场景中除了静态的元素外也会出现一些例如行人、其他机器人等动态元素,对于导航而言,需要避开但是我们不希望出现在地图模型中,会让机器人认为障碍物的“真实面貌”就是这样,因此我们需要筛选元素,存储到语义图谱中。今天阿chai给大家介绍一种SLAM中动态元素筛选的方法。
1. Main
以下是动态目标筛选的算法流程。
接下来我们详细的讲解一下。
2. YOLOX的动态目标筛选
YOLOX是旷视研究院开源的目标检测算法,赢得了Streaming Perception的第一名。算法是YOLO系列的改进,Anchor- Free,decoupled head、NMS-free以及SimOTA是算法的亮点, COCO 上实现了 50.0% AP,并且提供了ONNX模型,支持TensorRT、NCNN 和 Openvino 的侧端推理部署的版本。
- 论文:https://arxiv.org/abs/2107.08430
- 官方demo:https://github.com/Megvii-BaseDetection/YOLOX
- Tengine版:https://github.com/OAID/Tengine/blob/tengine-lite/examples/tm_yolox.cpp
TFLite、MNN版本的example以及ios上的测试APP私聊阿chai,嘿嘿。
基于YOLOX的动态目标筛选是通过YOLOX检测到可能存在运动的元素,这些元素是优先设置到物体库中,例如人、其他机器人、手推车等。
3. 光流法动态特征点筛选
3.1 Lucas-Kanade
Lucas–Kanade光流算法是两帧差分的光流估计算法,基于三个假设:
- 灰度不变性:像素的灰度值不会随着帧的跟踪改变。
- 时间持续性:时间的变化不会引起像素位置的剧烈变化。
- 空间一致性:场景中相同表面的相邻点具有相似的运动,并且其投影到图像平面上的距离也比较近。
论文:http://cseweb.ucsd.edu/classes/sp02/cse252/lucaskanade81.pdf
首先根据前两个光流的基本假设能得到图像的约束方程,然后进行泰勒展开,联立得到方程组。由于两个未知量所以无法求解,于是根据第三个基本假设设立新的方程带入,同时根据最小二乘策略处理方程组,求的速度矢量。
这里不做有关光流法的详细公式推导,有兴趣的小伙伴可以去阅读paper。
3.2 运动一致性
通过光流法获取匹配的特征点对,并跟据匹配的特征点对计算基础矩阵。然后通过基础矩阵和特征点计算特征点对应的极线,当特征点到极线的距离大于一定值,即判断为动态特征点。
一组匹配的特征点对、的齐次坐标为:
、是像素的横纵坐标。对于,极线为:
其中代表着对应的基础矩阵,到极线的距离为:
当距离大于一定值时为动态点。
4. 误差分析
视觉里程计的评价标准需要看绝对误差与相对误差。为做误差分析,使用TUM数据集中无运动以及有运动的序列作为分析数据。
绝对轨迹误差:
旋转相对误差:
平移相对误差:
经过测试,在运动目标的序列中动态目标的筛选会降低误差,在静态环境中效果几乎等同于ORB-SLAM。