vins 解读_代码解读 | VINS 视觉前端

本文深入解析VINS MONO的视觉前端,包括特征点提取、跟踪及KLT光流算法的应用。VINS前端涉及特征点检测、去畸变、外点剔除等,将图像数据转化为可供后端优化使用的特征点。此外,还介绍了前端节点的ROS实现,包括话题订阅、发布以及关键函数的功能。
摘要由CSDN通过智能技术生成

AI

人工智能

代码解读 | VINS 视觉前端

本文作者是计算机视觉life公众号成员蔡量力,由于格式问题部分内容显示可能有问题,更好的阅读体验,请查看原文链接:代码解读 | VINS 视觉前端

vins前端概述

在搞清楚VINS前端之前,首先要搞清楚什么是SLAM前端?

SLAM的前端、后端系统本身没有特别明确的划分,但是在实际研究中根据处理的先后顺序一般认为特征点提取和跟踪为前端部分,然后利用前端获取的数据进行优化、回环检测等操作,从而将优化、回环检测等作为后端。

而在VINS_MONO中将视觉跟踪模块(feature_trackers)为其前端。在视觉跟踪模块中,首先,对于每一幅新图像,KLT稀疏光流算法对现有特征进行跟踪。然后,检测新的角点特征以保证每个图像特征的最小数目,并设置两个相邻特征之间像素的最小间隔来执行均匀的特征分布。接着,将二维特征点去畸变,然后在通过外点剔除后投影到一个单位球面上。最后,利用基本矩阵模型的RANSAC算法进行外点剔除。

VINS_MONO原文中还将关键帧的选取作为前端分,本文暂不讨论, 后续文章会详细介绍。

VINS-Mono将前端封装为一个ROS节点,该节点的实现在feature_tracker目录下的src中,src里共有3个头文件和3个源文件:

feature_tracker_node.cpp构造了一个ROS节点feature_tracker_node,该节点订阅相机图像话题数据后,提取特征点,然后用KLT光流进行特征点跟踪。feature_tracker节点将跟踪的特征点作为话题进行发布,供后端ROS节点使用。同时feature_tracker_node还会发布标记了特征点的图片,可供Rviz显示以供调试。如下表所示:

操作

话题

消息类型

功能Subscribe

image

sensor_msgs::ImageConstPtr

订阅原始图像,传给回调函数

Publish

feature

sensor_msgs::PointCloud

跟踪的特征点,供后端优化使用

Publish

feature_img

sensor_msgs::Image

跟踪特征点图片,输出给RVIZ,调试用

feature_tracker.h和feature_tracker.cpp实现了一个类FeatureTracker,用来完成特征点提取和特征点跟踪等主要功能,该类中主要函数和实现的功能如下:

函数

功能bool inBorder()

判断跟踪的特征点是否在图像边界内

void reduceVector()

去除无法跟踪的特征点

void FeatureTracker::setMask()

对跟踪点进行排序并去除密集点

void FeatureTracker::addPoints()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值