基于摄像的飞行定位系统的研究和实现

时间:2022-05-26 06:36:40

基于摄像的飞行定位系统的研究和实现

摘要:基于摄像的定位系统具有广泛的应用领域,本文设计和实现了一个室内飞行实验的定位系统,它能实时给出小型飞行器的位置,姿态等信息。本文详细分析了标定的原理,基于OpenCV与张氏算法给出了标定的实现,并介绍了定位软件的原理和基本算法,在图像处理过程中还给出了图像扫描的一种优化方法,提高了图像识别效率。

关键词:小型无人直升机;标定;定位

中图分类号:TN953+.7 文献标识码:A文章编号:1007-9599 (2010) 05-0000-04

Research and Implementation of Flight Positioning System

Base on Cameras

Di Yueping,Hu Fei

(Software College of Shanghai Transportation University,Shanghai200240,China)

Abstract:Indoor flight positioning system can give real-time location and other information of small unmanned helicopter.This paper analyzes the principle of calibration,give the implementation based on OpencV and zhang algorithm,introduced the principle of localization software and basic algorithm. In the image processing this paper gives an optimal method of image scanning.Improve the efficiency ofimage recognition.

Keywords:Small unmanned helicopter;Calibration;Location

随着电子技术、计算机技术、信号处理理论和人工智能理论的发展,应用于各个领域的定位理论和技术上术有了长足的进步。在工业、军事、民用和科学探索等领域都有着很广泛的应用空间。

定位技术主要分为卫星定位,无线网定位,摄像机定位等。它们有着自己的优势,适用于不同的应用场合,其中卫星定位用于户外侦查勘测;无线网络定位用于机场、高档写字楼、研究机构等场所;基于摄像机的定位技术还运用于医学手术定位,机器人导航等等。其中基于摄像机的立体视觉定位技术近年来被广泛的研究和运用,国外开展立体视觉技术的研究比较早,涉及的领域也较为广泛,主要是用于机器人导航、微操作系统的参数检测、三维测量和虚拟现实等方面[1]。

本文研究的定位系统,通过六个摄像机对运动物体的图像拍摄,来实时确定空间目标物体的空间精确位置、姿态等信息。并且将这些信息实时传递给飞行器控制系统,支持飞行控制算法的计算,是室内环境下飞行控制技术研究的关键技术平台之一。

一、摄像系统标定技术

系统标定技术是三维视觉系统的基础,三维物体的位置信息是从摄像机获取的图像信息中得到的。为了保证空间点到摄像机图像像素点对应关系的精确性,摄像机的系统定标必不可少。标定参数分为内参数和外参数,内参数指的是相机内部几何和光学特性,比如摄像机的焦距,镜头畸变系数等。外部参数指的是摄像机架设位置和外部参考系之间的相对位置关系,包括旋转举证R以及平移向

量 等。

(一)传统标定方案

传统标定需要借助定标块,一般定标块形状结构已知,精度很高,作为空间参照物,通过世界坐标系下的点和图像坐标系下点之间的对应关系来建立模型的参数约束,然后通过优化算法来求解这些参数[2]。

(二)自标定方法

摄像机自标定方法由Fuageraus 和Manybank[3][4]在1992年首次提出,在以后不断成熟和发展。摄像机自标定技术主要从图像序列中得到的约束关系来计算摄像机的内外参数,而不像传统标定方法中需要参照物的尺寸,如果不知道场景的几何知识和相机的运动情况,所有的自标定方案都是非线性的,从而需要很复杂的计算。目前自标定的研究主要有以下几种[5][6]:利用本质矩阵和基本矩阵的摄像机标定方法[7];利用绝对二次曲线和外极线变换性质的标定方法[8][9][10];利用主动系统控制摄像机做特定运动的自标定方法[11][12];利用多幅图像之间的直线对应关系的摄像机定标方法[13][14]。自标定方法不需要标定块,只需要依靠多幅图像对应点之间的关系就可以进行标定。

(三)标定原理介绍

在系统标定过程中,有三个坐标系的概念是十分重要的,下面介绍这三个重要坐标系:

1.世界坐标系,即真实空间中的坐标系。

2.摄像机坐标系,以摄像机为原点的坐标系统,其中摄像机光轴为Z轴,记为 。

3.图像平面坐标系,即在摄像机成像平面上建立的坐标系,记做记为 。

在室内定位视觉系统中,我们希望输入是二维图像坐标系下面的坐标,输出的是世界坐标系下运动对象的精确位置。从几何模型可以得出每一个坐标之间都有一个关系和约束。由几何成像模型的关系可以知道,三个坐标系的转换关系可以分为以下几步:

1.世界坐标系与摄像头坐标系的变换,三维空间的刚体变换

2.摄像头坐标系与图像坐标系的变换

3.以毫米为单位的图像坐标系与以像素为单位的图像坐标系的变换。

从世界坐标系到摄像机坐标系的变换,空间任意一点P在世界坐标系下为 到摄像机坐标系P的变换表示:

(1)

R为3 3的正交变化矩阵

T为3 1的平移向量

摄像机坐标系下的 点与投影点 存在比例关系,从摄像机坐标(xc,yc,zc,1)到图像坐标(xu,yu,1),存在几何关系

写成齐次坐标方程为:

(3)

摄像机在每幅摄像机采集的图片的过程中,图片在计算机内部是以m n的二维数组的形式储存,其中m行n列的图像中的每个元素就为像素。其数值就为像点的灰度。图像坐标系的原点在像素坐标系上坐标为 (u0,v0),而每个像素在X轴,Y轴方向上物理尺寸为(dx,dy),则有如下关系:

(4)

则从图像坐标系到计算机像素坐标系的变换(Xu,Yu,l)到(u,v,l)的变换:

总结出从世界坐标系P(X,Y,Z,1)到像素坐标系(u, v,1)转换关系

( 6)

在张氏标定法中可将上式写为[15]:

( 7)

在这里,假定模板平面在世界坐标系Z=0的平面上。其中K为摄像机的内参数矩阵,[X,Y,1]为模板平面上点的齐次坐标,[u,v,1]为模板平面上点到图像平面上对应点的齐次坐标,[r1,r2,r3]和t分别是摄像机坐标系相对于世界坐标系的旋转矩阵和平移向量。

根据旋转矩阵的性质,

即 和

每幅图像可以获得以下两个对内参数矩阵的基本约束

由于摄像机有5个位置内参数,所以当所摄取得的图像数目大于3时,就可以唯一求解出K。

1.系统标定算法实现

在此定标方法中,我们采用opencv库,具体实现如下:

首先采集图像

void CCalibrationToolDlg::OnGetPic()

设定棋盘格然后对棋盘格识别

内参数标定:

a.使用OpenCV的cvFindChessboardCorners()函数找到棋盘格的角点。

b.使用OpenCV的CalibrateCamera2()函数标定内参数。这里需要用多张(至少使用五张)不同角度的对棋盘格的角点识别图片,才可以标定出精确的内参数。

外参数标定:

标定出内参数之后,通过角点识别,并读取内参数,使用OpenCV的FindExtrinsicCameraParams2()函数标定外参数。

由于摄像头固定在天花板上,所以外参数相对固定;摄像头焦距也不改变,所以内参数也相对固定。摄像头定标一次即可多次实验。

标定精度的校验:

在标定过程中,棋盘格的世界坐标已知,棋盘格中单位格子为变长为224mm的正方形,故这些棋盘格上角点的世界坐标已知。在求解出内外参数之后,我们可以反解棋盘上格角点的世界坐标,来校验标定的准确定和精度。

CGeometry::GetLine(&rm,&mv,&ip,&dp,&_2dp,&line);通过二维图像上一点,求出一条空间直线。

Cgeometry::SolveLinePoint_Z0(&line,&retp);求出该空间直线与Z=0平面的交点,即棋盘格角点的世界坐标

实验结果如图1,红框所示:

(224,224)(223.955,223.954)

(224,0) (224.306,1.054)

(0,672) (-0.599,671.878)

(0,448)(-0.634,447.680)

(0,224)(1.294,223.780)

(0,0) (-0.135,-0.020)

误差范围基本在1.5mm之内。

二、定位系统设计及实现

(一)硬件系统的设计

我们室内实验空间中,面积大约在30平米左右,飞机的飞行区域在室内中心范围,大致为4m 4m的范围,所以我们采用六台摄像机布置在房间天花板四周(天花板高约为3m),采用两台计算机,每台计算机连接三个摄像机.如图2:

图2硬件系统连接图

Fig.2 Hardware System Connection Diagram

其中摄像机型采用的型号是蓝色妖姬T400,最高采集频率是120帧,采集的二维图像的像素是320 240,试验中我们用的采集频率是 50Hz,图像的像素为64 480,对目标点进行采集数据。

两台计算机上都安图像数据采集软件,通过扫描实时采集的图片,得出每幅二维图像的特征点位置。计算机A负责二维图像采集和与其连接三台摄像机的标定,把数据传给摄像机B,计算机B除摄像机A的功能之外还负责位置等信息的计算,通过六台摄像机采集到的信计算机小型直升机的位置姿态等信息。

(二)定位软件系统的设计与实现

内外参数标定之后,通过计算机二维图像上的成像点,计算出空间坐标系下的直线方程,每个摄像机都会得出一条在世界坐标系下的点,每两条直线就可以确定一空间点,从而来确定目标物体在世界坐标系下的坐标。

通过CGeometry类下面的以下成员函数实现:

Static void GetLine(pRoterMatrix Roter, pMoveVecter Mv, pIntrinsicPara gp, pDistortionPar gd, p_2D_Pointp2d, p_3D_Line pl);

功能是从一个摄像头成像上的点解出对应的空间直线的世界坐标系下的方程

Roter为从世界坐标系到摄像头坐标系的旋转矩阵;

Mv为从世界坐标系到摄像头坐标系的位移矩阵;

gp为摄像头内参数;

gd为摄像头的畸变系数;

p2d为摄像头成像上点的像素坐标系位置;

pl为返回的直线方程(返回值);

这个函数是位置算法中十分关键的技术点,它的计算精度对系统有着很大的影响,下面介绍下这个位置算法的具体算法:

分三步进行:

1.反解畸变:

在实际计算中,成像点的坐标是畸变产生后的值,如果用此进行计算,则会产生很大影响,需要对其进行解畸变,算出理想真实点的坐标位置,则通过畸变公式可解得理想成像的实际点。

2.坐标转换:

计算出理想坐标值之后,需要在世界世界坐标下求出成像设想,而此时理想坐标系是在图像坐标下,需要对其进行坐标转换,转化到世界坐标系下面。

3.求解世界坐标系下的直线方程

由摄像机拍摄点出发,通过理想成像点在世界坐标下的坐标值求解出一条射线方程。为之的求解交点做好准备。

static bool GetLineCross(p_3D_Line line1, p_3D_Line line2,p_3D_Point cross_point, double *dist);

计算两条直线的交叉点,若无交叉点解出直线间最短距离线段的中点

line1为直线1

line2为直线2

cross_point为获得的交点

dist 是两条直线之间的距离

在小型无人直升机上,我们设计了三种不同颜色的标记点,分别以红,绿,蓝标记。当每个标记点的世界坐标位置已知的情况下,可以通过三个标记点的相对位置关系解出小型直升机的位置和姿态信息。通过以下接口实现:

static bool GetPosePosition(p_3D_Point red_p, p_3D_Point green_p, p_3D_Pointblue_p, double pose[3][3], p_3D_Point position_p);

功能为计算姿态和位置,其中red_p 为红色灯位置,green_p为绿色灯位置,blue_p为蓝色灯位置,pose为姿态向量机体坐标三轴单位向量,通过这个矩阵可以解出偏航角,俯仰角,侧滚角。position_p是位置坐标。三个标记点构成了一个新的直角坐标系,相对于世界坐标系有一个旋转转换,该旋转矩阵就表示了小型直升机的姿态信息。

三、图像特征点识别

在图像预处理和特征点识别过程中,本文提出了一种优化算法:飞行系统中要求定位系统的采集速率不小于30Hz。我们的方案是使用两台计算机,每台连接3个摄像机,每秒需要处理3 30=90幅图像。每幅图像的大小为30万像素,每个像素假设是4个字节,那么一副图像就是0.3M 4=1.2M的大小,90幅图像就是108M/s的数据传输速率,同时,数据传输回来之后,对数据进行处理,假设每个点的操作需要分别检查红,绿,蓝3个RGB通道,每个通道进行若干次比较,进行特征区域的识别这个计算量是巨大的,所以,必须对特征点的识别进行优化。

首先,对传输回来的图像进行编码压缩,否则108M/s的数据传输率是无法通过USB接口实现的。

然后,在分析特征区域的时候,使用的是线扫描的方法,假设有4 8个点,0为非特征点,1为特征点。

00001000

00011000

00011000

00010000

在扫描第四列的时候,扫描到第二个点,判断为有效特征点,记录下来,然后继续扫描,扫描到最后,依然是特征点,则标记线段。其中1表示线段的编号,0表示线段的区域号,值为0说明还未给它分配联通区域,1,3表示线段的起始点位置。同样标出另外一条线段 。同时,在列数组里面,将线段1加入第四列的数组,将线段2加入第五列的数组。开始识别联通区域时,从第四列开始,第四列中的线段只有1号线段,将其联通区域号改为1,代表第一个联通区域。然后检查第三列与第五列的数组,查看里面的线段,如果线段2的终止位置在线段1的起始位置之前,或者线段2的起始位置在线段1的终止位置之后,则表示线段不联通,否则表示两条线段区域联通。这里第二条线段显然联通,则将第二条线段的区域编号改为1,同时,对第二条线段进行搜索,是否有相邻列的联通区域。这样无限递归下去,可以将所有的联通区域求出来。

上一篇:基于AUTOCAD VBA 城市道路管理方法设计 下一篇:基于JAVA的网络开户系统设计与实现