1、AR视觉

功能包:~/yahboomcar_ws/src/yahboomcar_visual

本节效果可在安装了我们相对应镜像的主板上演示。

1.1、概述

增强现实(Augmented Reality),简称“AR”,技术是一种将虚拟信息与真实世界巧妙融合的技术,广泛运用了多媒体、三维建模、实时跟踪及注册、智能交互、传感等多种技术手段,将计算机生成的文字、图像、三维模型、音乐、视频等虚拟信息模拟仿真后,应用到真实世界中,两种信息互为补充,从而实现对真实世界的“增强”。

AR系统具有三个突出的特点:①真实世界和虚拟世界的信息集成;②具有实时交互性;③是在三维尺度空间中增添定位虚拟物体。

增强现实技术包含了多媒体、三维建模、实时视频显示及控制、多传感器融合、实时跟踪及注册、场景融合等新技术与新手段。

1.2、使用方法

在使用AR案例时,必须得有相机的内参,不然无法运行。内参文件与代码同目录(功能包的AR文件夹下);不同相机对应不同内参。

我们对应主板镜像里已存放好标定的相机内参文件,无需二次标定

启动单目相机/树莓派 CSI相机

启动Jetson CSI相机

启动标定节点 (单目相机/树莓派 CSI相机)

启动标定节点 (jetson CSI相机)

标定完后,将【calibrationdata.tar.gz】文件移动到【home】目录下。

解压后,将该文件夹里面的【ost.yaml】打开,找到相机内参矩阵和畸变系数修改到【USB_camera.yaml】或者【csi_camera.yaml】文件对应的位置,只需修改两处【data】的内容即可。例如:以下内容。

一共12种效果。

启动命令

image-20230908124455568

根据需求设置参数,也可直接修改launch文件,启动时便无需附带参数。不开启画面时,可使用网络监控方式查看

1)在显示画面的情况下(即display为true),【q】键退出,【f】键切换不同效果,也可以使用命令行切换。

image-20210902122726648

使用【f】或【F】键切换不同效果。

image-20210906141251637

2)在不显示画面的情况下(即display为false),只能通过命令行切换效果

image-20220219095427447

image-20210906141829879

1.3、源码解析

1.3.1、算法原理

使用RANSAC方案从3D-2D点对应中查找对象姿势。

RanSaC算法(随机采样一致)原本是用于数据处理的一种经典算法,其作用是在大量噪声情况下,提取物体中特定的成分。下图是对RanSaC算法效果的说明。图中有一些点显然是满足某条直线的,另外有一团点是纯噪声。目的是在大量噪声的情况下找到直线方程,此时噪声数据量是直线的3倍。

img

如果用最小二乘法是无法得到这样的效果的,直线大约会在图中直线偏上一点。

RANSAC的基本假设是: (1)数据由“局内点”组成,例如:数据的分布可以用一些模型参数来解释; (2)“局外点”是不能适应该模型的数据; (3)除此之外的数据属于噪声。 局外点产生的原因有:噪声的极值;错误的测量方法;对数据的错误假设。 RANSAC也做了以下假设:给定一组(通常很小的)局内点,存在一个可以估计模型参数的过程;而该模型能够解释或者适用于局内点。

1.3.2、核心代码

设计流程:

输入图像
是否每个图片的角点
查找角点亚像素
输出图像
计算对象姿态
输出图像点和雅可比矩阵
绘制并输出图像

launch文件

python主函数

关键函数

https://docs.opencv.org/3.0-alpha/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

我们需要使用cornerSubPix()对检测到的角点作进一步的优化计算,可使角点的精度达到亚像素级别。

使用RANSAC方案从3D-2D点对应关系中查找对象姿态。该函数在给定一组对象点、它们对应的图像投影以及相机矩阵和失真系数的情况下,估计对象姿势。此函数找到一个使重新投影误差最小的姿势,即重新观察误差,即观察到的像素点投影imagePoints与物体投影(projectPoints())objectPoints之间的平方距离之和。 RANSAC的使用可以避免异常值对结果的影响。