VINS(二)Feature Detection and Tracking

2023-05-16

系统入口是feature_tracker_node.cpp文件中的main函数

1. 首先创建feature_tracker节点,从配置文件中读取信息(parameters.cpp),包括:

  • ROS中发布订阅的话题名称;
  • 图像尺寸;
  • 特征跟踪参数;
  • 是否需要加上鱼眼mask来去除边缘噪点;

%YAML:1.0

#common parameters
imu_topic: "/imu0"
image_topic: "/cam0/image_raw"

#camera calibration 
model_type: PINHOLE
camera_name: camera
image_width: 752
image_height: 480
distortion_parameters:
   k1: -2.917e-01
   k2: 8.228e-02
   p1: 5.333e-05
   p2: -1.578e-04
projection_parameters:
   fx: 4.616e+02
   fy: 4.603e+02
   cx: 3.630e+02
   cy: 2.481e+02

# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 1   # 0  Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.
                        # 1  Have an initial guess about extrinsic parameters. We will optimize around your initial guess.
                        # 2  Don't know anything about extrinsic parameters. You don't need to give R,T. We will try to calibrate it. Do some rotation movement at beginning. 
ex_calib_result_path: "/config/euroc/ex_calib_result.yaml"  # If you choose 1 or 2, the extrinsic calibration result will be written vins_folder_path + ex_calib_result_path.                        
#If you choose 0 or 1, you should write down the following matrix.
#Rotation from camera frame to imu frame, imu^R_cam
extrinsicRotation: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [0, -1, 0, 
           1, 0, 0, 
           0, 0, 1]
#Translation from camera frame to imu frame, imu^T_cam
extrinsicTranslation: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [-0.02,-0.06, 0.01]

#feature traker paprameters
max_cnt: 150            # max feature number in feature tracking
min_dist: 30            # min distance between two features 
freq: 10                # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image 
F_threshold: 1.0        # ransac threshold (pixel)
show_track: 1           # publish tracking image as topic
equalize: 1             # if image is too dark or light, trun on equalize to find enough features
fisheye: 0              # if using fisheye, trun on it. A circle mask will be loaded to remove edge noisy points

#optimization parameters
max_solver_time: 0.04  # max solver itration time (ms), to guarantee real time
max_num_iterations: 8   # max solver itrations, to guarantee real time
keyframe_parallax: 10.0 # keyframe selection threshold (pixel)

#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.2          # accelerometer measurement noise standard deviation. #0.2
gyr_n: 0.02         # gyroscope measurement noise standard deviation.     #0.05
acc_w: 0.0002         # accelerometer bias random work noise standard deviation.  #0.02
gyr_w: 2.0e-5       # gyroscope bias random work noise standard deviation.     #4.0e-5
g_norm: 9.81007     # gravity magnitude


#loop closure parameters
loop_closure: 1   #if you want to use loop closure to minimize the drift, set loop_closure true and give your brief pattern file path and vocabulary file path accordingly;
                     #also give the camera calibration file same as feature_tracker node
pattern_file: "/support_files/brief_pattern.yml"
voc_file: "/support_files/brief_k10L6.bin"
min_loop_num: 25  

该config.yaml文件中的其他参数在vins_estimator_node中被读取,属于融合算法的参数。

  • 优化参数(最大求解时间以保证实时性,不卡顿;最大迭代次数,避免冗余计算;视差阈值,用于选取sliding window中的关键帧);
  • imu参数,包括加速度计陀螺仪的测量噪声标准差、零偏随机游走噪声标准差,重力值(imu放火星上需要改变);
  • imu和camera之间的外参R,t;可选(0)已知精确的外参,运行中无需改变,(1)已知外参初值,运行中优化,(2)什么都不知道,在线初始化中标定
  • 闭环参数,包括brief描述子的pattern文件(前端视觉使用光流跟踪,不需要计算描述子),针对场景训练好的DBow二进制字典文件;

2. 监听IMAGE_TOPIC, 有图像信息发布到IMAGE_TOPIC上时,执行回调函数:


ros::Subscriber sub_img = n.subscribe(IMAGE_TOPIC, 100, img_callback);  

 

 

3. img_callback()

前端视觉的算法基本在这个回调函数中,步骤为:

  1. 频率控制,保证每秒钟处理的image不多于FREQ;

  2. 对于单目:

    1). readImage;

    2). showUndistortion(可选);

    3). 将特征点矫正(相机模型camodocal)后归一化平面的3D点(此时没有尺度信息,3D点p.z=1),像素2D点,以及特征的id,封装成ros的sensor_msgs::PointCloud消息类型; 

  3. 将处理完的图像信息用PointCloud和Image的消息类型,发布到"feature"和"feature_img"的topic:


pub_img = n.advertise<sensor_msgs::PointCloud>("feature", 1000);
pub_match = n.advertise<sensor_msgs::Image>("feature_img",1000);  

 

4. 包含的视觉算法:

1. CLAHE(Contrast Limited Adaptive Histogram Equalization)


cv::Ptr<cv::CLAHE> clahe = cv::createCLAHE(3.0, cv::Size(8, 8));  

2. Optical Flow(光流追踪)


cv::calcOpticalFlowPyrLK(cur_img, forw_img, cur_pts, forw_pts, status, err, cv::Size(21, 21), 3);  

3. 根据匹配点计算Fundamental Matrix, 然后用Ransac剔除不符合Fundamental Matrix的外点


cv::findFundamentalMat(un_prev_pts, un_forw_pts, cv::FM_RANSAC, F_THRESHOLD, 0.99, status);  

4. 特征点检测:goodFeaturesToTrack, 使用Shi-Tomasi的改进版Harris corner


cv::goodFeaturesToTrack(forw_img, n_pts, MAX_CNT - forw_pts.size(), 0.1, MIN_DIST, mask);  

 特征点之间保证了最小距离30个像素,跟踪成功的特征点需要经过rotation-compensated旋转补偿的视差计算,视差在30个像素以上的特征点才会去参与三角化和后续的优化,保证了所有的特征点质量都是比较高的,同时降低了计算量。

转载于:https://www.cnblogs.com/shang-slam/p/7045573.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VINS(二)Feature Detection and Tracking 的相关文章

  • 斑点跟踪算法

    我正在尝试使用 OpenCV 创建简单的斑点跟踪 我已经使用 findcontours 检测到了斑点 我想给这些斑点一个恒定的 ID 我收集了前一帧和当前帧中的斑点列表 然后我计算了前一帧和当前帧中每个斑点之间的距离 我想知道还需要什么来跟
  • 如何在 PHP 中检查重复的电子邮件地址,考虑 Gmail([电子邮件受保护])

    如何在 PHP 中检查重复的电子邮件地址 考虑到 Gmail 自动标签和标点符号的可能性吗 例如 我希望这些地址被检测为重复 email protected email protected email protected email pro
  • 是否可以通过JavaScript检测插件是否激活?

    这样我通常会检测插件 例如Flash播放器 for var el in navigator plugins if navigator plugins el name navigator plugins el name toLowerCase
  • 检测移动或平板设备

    我的目标是拥有一个基于 Wordpress 构建的移动网站 适用于手机和平板电脑 和响应式桌面网站 我想要最简单的方法来实现万无一失的设备检测 移动网站将拥有许多真正有利于触摸设备的功能 并且将为手机和平板电脑定制设计 桌面站点将完全不同
  • 64位windows VMware检测

    我正在尝试开发一个应用程序来检测程序是否在虚拟机内运行 对于32位Windows 已经有方法在以下链接中解释 http www codeproject com Articles 9823 Detect if your program is
  • iOS 运动检测:运动检测灵敏度级别

    我有一个简单的问题 我正在尝试检测用户何时摇动 iPhone 我有标准代码来检测运动 这没有问题 然而 在我的实际手机上进行测试时 我意识到你必须用力摇动设备才能触发运动检测 我想知道是否有办法实施一定程度的敏感性检查 例如 一种检测用户是
  • Dialogflow,从音频中检测意图

    我正在尝试将音频文件发送到对话流 API 进行意图检测 我已经有一个工作得很好的代理 但只能处理文本 我正在尝试添加音频功能 但没有成功 我正在使用此页面中提供的示例 Java https cloud google com dialogfl
  • ANDROID - 使用 openCV 进行颜色检测 - 如何?

    我的目标是使用 HSV 颜色空间以仅显示黄色对象的方式显示脱粒图像 我使用这个代码 基于 openCV 2 3 1 android 示例给出的代码 protected Bitmap processFrame VideoCapture cap
  • 颜色检测算法 - 我应该怎么做?

    我在设计颜色检测系统方面有点陷入困境 我不太想出一种轻松完成它的方法 基本上 我有一个图像库 我想按颜色排序 因此 如果用户指定 按蓝色排序 则蓝色最多的图像将出现在结果的顶部 蓝色最少的图像将出现在底部 问题是图像并不全是一种颜色 所以它
  • 同步加载 Google 跟踪代码管理器

    我搜索了 Google 跟踪代码管理器 GTM 文档 但没有找到解决此问题的任何内容 我正在与一个联属网络合作 该网络希望同步加载其跟踪像素 以确保它在页面内容加载之前触发 这仅适用于我们的订单确认页面 我们已经实施了 GTM 因此我们可以
  • 如何在 Firefox for Android 中检测 Android 的版本号?

    对于网站 如果用户使用 Android 4 设备 我们希望在 Play 商店中显示链接 我们测试的所有浏览器都在其用户代理字符串中发送 Android 版本号 除了 Firefox for Android Firefox 只是发送这个 Mo
  • 我们如何跟踪 Javascript 错误?现有的工具真的有用吗?

    今天我发现需要跟踪和检索 Javascript 错误堆栈跟踪来解决这些问题 今天 我们能够捕获所有其余调用 其想法是 一旦出现错误 就会自动发布该错误的堆栈跟踪以及其余保存的服务的响应 以便我们可以以几乎相同的方式检测 重现和解决问题环境
  • Apache代理负载均衡后端服务器故障检测

    这是我的场景 由我的前任设计 两台 Apache 服务器为多个混合后端 Web 服务器 Apache IIS Tomcat 等 提供反向代理服务 有些网站我们有多个后端 Web 服务器 在这些情况下 我们会执行以下操作
  • 如何触发(window).focus页面加载?

    加载页面时 不会激活焦点 模糊状态 例如切换到另一个选项卡时blur显示 然后切换回页面focus激活 但在第一次加载页面时 没有任何状态被激活 为什么 这是预期的行为还是我搞砸了 function window focus functio
  • jQuery:检测 cmd+click / control+click

    我在选项卡中有我的网络应用程序的选项 ul li a href a php aaa a li li a href b php bbb a li li a href c php ccc a li li a href d php ddd a l
  • 如何从 silverlight 应用程序检测操作系统?

    我有一个 Silverlight3 应用程序 旨在在 Windows 和 Mac OS 环境上运行 我想在运行时知道我的应用程序是在 Windows 还是 Mac 上运行 这样我就可以根据用户在他们选择的操作系统中习惯的方式进行一些调整 例
  • Harris & Stephens 角点检测算法:行列式始终为 0(零)

    作为我的学士论文的一部分 我正在尝试使用 Harris 和 Stephens 算法实现角点检测器 组合角点和边缘检测器 http www bmva org bmvc 1988 avc 88 023 pdf 我确实计算过 使用 sobel 滤
  • 如何使用 PHP 检测访问我们网站的用户的 MAC 地址?

    我知道如何追踪 IP 地址 但我需要追踪查看我的页面的用户的 MAC 地址 如何做到这一点 除非用户与网络服务器位于同一 LAN 上 否则无法执行此操作 MAC 地址位于 TCP IP 下面的以太网层 并且不包含在从用户本地网络路由出去的
  • 维奥拉-琼斯算法 - “像素之和”?

    我看过很多关于 Viola Jones 算法如何真正工作的文章和问题的答案 我不断找到答案 说某个区域中的 像素总和 减去相邻区域中的 像素总和 我对 像素总和 的含义感到困惑 其价值依据是什么 是该区域的像素数吗 颜色的强度 提前致谢 这
  • 跟踪大量电子邮件活动

    Litmus 上个月 2010 年 5 月 发布了电子邮件分析服务 看这里 http litmusapp com email analytics http litmusapp com email analytics 他们拥有非常酷的 读取率

随机推荐