视觉里程计设计与实现

一、前言

视觉里程计与传统的里程计不同,不使用码盘等设备,只利用摄像头拍摄的连续图像帧就可以计算里程,非常方便,因而用途广泛。本文介绍SLAM中的视觉里程计的设计与实现。

有了前面的基础,我们就可以着手做一个简单的视觉里程计(Visual Odometry,VO)。VO作为SLAM系统的前端,负责接收图像序列,通过特征匹配等方法估计相机在相邻帧间的运动,从而获得累积的里程信息。

二、VO系统框架

首先,让我们来看看VO应该由哪些模块组成。下图为VO系统框架图。

VO系统框架
  • Frame代表每一帧图像,存储着拍摄该帧图像时的相机位姿、图像的彩色图和深度图、以及是否为关键帧。
  • Camera代表相机模型,与实际拍摄时的相机对应,只包含内参数,不包含外参数,因此在整个VO过程中只需要一个Camera对象。
  • Map代表一个局部地图,既包含关键帧又包含路标点。关键帧和路标点会根据适当的规则添加进地图中。但需要注意,这里的地图是局部地图而不是全局地图,只包含了当前位置附近的路标点,距离更远的路标点会被删除。
  • MapPoint代表路标点,又称为地图点。这些点都是通过特征提取筛选出来的点,因而包含了特征描述符。由于同一个特征点会被多个帧观测到,因此也包含了这些能观测到该路标点的帧的指针。同时,为了控制地图规模,记录了路标点匹配成功的次数和被观测到的次数,两者比值一旦过小就丢弃该路标点(因为该点出现次数很多但对VO没有帮助)。

有了这几个模块,一个简单的VO就可以搭建起来了。

三、VO算法流程图

接下来我们详细介绍VO算法的流程。以最简单的RGBD-VO为例,避免复杂的初始化过程。

首先,程序启动后等待第一帧抵达,执行初始化操作。这里的初始化只需要将第一帧设置为关键帧,同时把该帧中观测到的所有路标点添加进地图。

后续帧抵达后,提取关键点,计算描述子,与地图中的路标点匹配。与地图中的路标点匹配是为了提高匹配的成功率,如果只与上一帧或上一关键帧匹配的话很容易导致匹配结果太少。

匹配成功后,执行PnP位姿估计。这里使用的是RANSAC PnP加上非线性优化的方式估计相机位姿,使用g2o构造图优化问题。

接下来判断PnP位姿估计是否成功。如果内点个数过少或者估计出的运动距离过大,则认为位姿估计失败。如果成功则优化地图点并决定是否添加当前帧为关键帧,如果失败则结束VO。其中,优化地图点是一个删除距离较远或无效点的过程,通过判断路标点匹配成功的次数与被观测到的次数之间的比值是否低于某阈值,从而决定是否删除这个点。总之,优化地图点的目的是使地图规模不至于太大且只包含与当前帧最接近的局部环境。

整个流程如下图所示。

VO流程图

四、运行效果和存在的问题

使用TUM数据集rgbd_dataset_freiburg1_desk测试效果如下。

左图为当前视频帧及局部地图中路标点的投影,右图为世界坐标系和当前帧的相机坐标系位置。从后三张图可以发现,特征点位置出现了一些明显的偏差,这可能是由于相机位姿估计不准确造成的。说明这个简单的VO在运动过快的情况下产生了漂移。

在完整的SLAM中,既有前端的VO,又有后端优化和回环检测,从而可以在一定程度上降低VO的漂移问题。我们将在后续文章中一一介绍。

本文的VO例程完整代码地址:https://github.com/jingedawang/VO

该代码依赖于OpenCV 3.2.0,opencv-viz,Sophus,g2o,Eigen等库,请特别检查viz模块是否正确安装。另外,如果Sophus库找不到,请手动编写FindSophus.cmake。

五、参考资料

《视觉SLAM十四讲》第9讲 实践:设计前端 高翔

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 1. 前言 开始做SLAM(机器人同时定位与建图)研究已经近一年了。从一年级开始对这个方向产生兴趣,到现在为止,...
    壹米玖坤阅读 1,142评论 4 8
  • 协作SLAM通常是部署在多台机器人上的多个SLAM系统,它们各自实现自己的定位和建图,当地图区域出现重叠时进行地图...
    金戈大王阅读 2,674评论 0 2
  • 定位问题的引入 我们所熟知的机器人,可以大致分为以下四类: 1. 操作机器人: 模仿人的手和手臂的动作,特点...
    飞帅阅读 1,684评论 0 2
  • 一、以小萝卜机器人为例,引入SLAM概念 1、机器人功能:实现内(自身定位)外(探索环境并建模)两项功能 (1)执...
    mjwz5294阅读 1,232评论 0 4
  • 放下所有求关注的心,如同花草树木不管有没有人关注都依然活出自己最美的样子。我就是最美的风景,只要活出自己的精彩就好...
    周海双阅读 243评论 0 0