CN328

基于FPGA的手术导航定位系统

清华大学
计算机科学与技术






Advisor

Name: 许忠信

Members

No. Name English Name
1 杨炼 Yang Lian
2 沈逸潇 Shen Yixiao
3 赵广杰 Zhao Guangjie

Project Paper

1. 设计概述 (Preliminary Paper)

    设计意图

    本项目计划以CycloneII FPGA为核心,设计一套基于双摄像头的特征物体定位系统。通过双摄像头从不同角度拍摄特征物体,分析得到的图像,计算出物体的空间位置。

    双视定位是一项应用前景广阔的技术,在机器视觉、医疗辅助等方面都有直接的应用。例如,微创手术是一种对患者伤害比较小的新型手术,已经称为手术发展的必然趋势。而由于创口极小,手术医生无法看到手术刀在患者体内的位置。如何准确定位手术到的位置是微创手术首先需要解决的问题,也是最为重要的问题。利用双视定位技术,对手术刀上安装的若干特征点进行空间位置的计算,就可以进一步计算出刀体的位置。

    国外已经出现了利用双视定位原理的手术导航定位系统,但是价格昂贵,结构复杂。图1为研究人员手持光杆模拟人体头部进行手术的实验装置,其中光杆模拟手术刀,其原理是利用双摄像头追踪手术刀体外部分的标识点(图2)实时计算出手术刀尖的三维坐标,从而提高微创手术的准确性和成功率。

    本项目以医疗手术训练及微创手术辅助定位为背景,以ALTERA DE2-70开发板为基础,设计基于双摄像头的三维空间物体定位系统。本系统可以作为各类双视定位系统的开发平台,对各种双视算法进行验证与调试。经过进一步开发,将特征点安装到微创手术刀上,作为医疗手术训练或手术辅助的双视定位系统。

    另外,本系统作为通用的双视定位平台,经上位机功能开发,可用于各类定位系统。例如,运用在工厂中作为双视监控系统,用于监控物体的空间位置,乃至对人员进行定位。还可用于新型互动式游戏平台,作为操作输入的方式,提供玩家的空间位置信息。

     

    1 国外手术导航系统

    2  手术导航系统中的双摄像头(左)和模拟手术刀(右)

    适用范围

    本系统可作为各类双视定位系统的开发工具,对双视算法进行研究与优化。在确定双视算法后,可作为手术安全辅助系统,应用于各医科学校的手术教学和训练中。为医科学生或者手术医生提供直观的位置参数。该系统造价低廉,结构简单,且允许后期进一步调整和设置。

    选用FPGA器件的原因

    我们选用了Altera DE2-70作为开发平台。其FPGA核心为数量高达70,000个逻辑单元的Altera Cyclone II 2C70。平台上具有大容量的内存组件,丰富的多媒体、储存及网络等应用接口,可以进行深入的功能开发。同时,对于此开发平台,Altera提供了大量的教材和各种说明范例。非常便于开发。

    考虑到本系统会使用到很多算法。其中有些算法的软件实现方法很容易实现,但是用硬件方法设计起来就有相当的难度。Altera提供的NiosⅡ软核系统可以根据我们的要求定制处理器,完成算法的软件实现。在FPGA内部可以实现多个处理器内核,通过将多个Nios Ⅱ内核集成到单个器件内,可以提高效率。

     

    (Revision: 4 / 2008-09-14 21:09:30)

    2. 功能描述 (Final Project Paper)

    本设计采用DE2-70多媒体开发平台,设计实现了双视定位系统,基本完成了双视定位功能。

    系统通过双摄像头从不同角度拍摄的图像。对于摄像头滤得红外光后的图像,多标识点捕获模块通过DSP算法自动检测出三个特征标识点(红外LED)的坐标,

    得到每个摄像头3个特征点坐标后,进入标识点配对计算,即分析标识点相对位置以及几何关系,将同一实际光源通过不同摄像头所得到的两个坐标配对。

    配对完成后,采用设定的双目视觉定位算法,计算得到特征标识点在空间中的坐标。

    将计算好的特征点的空间坐标数据通过USB接口传输到PC机上,并在上位机程序中做出物体空间位置的演示。

    本设计在NiosII程序中提供了双视算法c语言函数接口,可以用于双视算法的验证与调试。

     

    (Draft / 2008-09-14 21:05:29)

    3. 性能参数 (Final Project Paper)

    1、系统的性能参数:

    处理能力

    多标识点捕获模块数据输出频率:60Hz

    光点配对数据输出频率:50Hz

    预置双视定位算法,空间坐标数据输出频率:40Hz

    VGA显示大小:640×480

    自制摄像头参数

    CMOS传感器尺寸3.68mm(H)x2.98mm(V),对角线4.48mm,

    像素640HX480V(VGA),像素尺寸5.6umx5.6um,

    以完全分辨率进行停格影像撷取时的速率为60fps

    感光芯片采用MT9V022

    l  片内有分辨率为10位的ADC,

    l  动态范围60dB,信噪比最大为45dB,

    l  工作电压2.8V+/-0.25V,工作功耗在2.8V 12MHz15fps小于80mW,

    l  工作温度-20度到60

    2、系统资源利用情况

    硬件资源利用情况如图3所示。

    3 工程编译后占用的硬件资源情况

    其他部分:

    l  VGA接口

    l  USB接口

    l  选择开关

    SOPC系统组件如图4所示。

     

    4  SOPC系统组件列表

    3NiosII软核处理器在设计中的功能

    本系统中,使用了两颗NiosII软核处理器。标识点配对、双视定位算法这两项复杂的数学运算分别在NiosII中实现,从而避免了复杂的逻辑设计,大大减少了设计的时间。

    计算采用双核运算的方式进行,一个CPU用于读取数据,进行标识点配对计算,将结果存储到RAM中;同时,另一个CPURAM中读出标识点配对的计算结果,并进行双视定位计算,得出特征点的空间位置。从而大大提高了系统的运行速度与数据吞吐能力。

    NiosII软核处理器占用资源少,可以说是性价比很高的运算资源。

    开发方面,我们在使用中深切地体会到了Altera SOPC Builder开发软件功能之强大,同时使用上又非常简单,使我们在很短的时间内就建立了可靠实用的双核运算系统。

    同时,在标识点配对的计算中,我们使用了NiosII提供的自定义指令功能,通过逻辑模块对运算进行加速,进一步提高了计算能力。

     

    (Draft / 2008-09-14 21:16:25)

    4. 设计结构 (Preliminary Paper)

    硬件总体结构如图5所示,共分为三部分,SOPC结构如图6所示,CMOS多标识点捕获模块如图7所示,USB输出模块如图8所示。

    5   双摄像头定位系统硬件总体结构

    CMOS摄像头采集的数据经过FPGA处理,由VGA显示,用于实时监控。

    FPGA得到每个摄像头3个特征点坐标后,计算得到特征标识点在空间中的三维坐标,将空间坐标数据通过USB接口传输到PC机上,在上位机程序中显示物体空间位置及坐标值。

    6   硬件结构1 —— SOPC系统结构

    自定义指令,用硬件逻辑电路实现系统中软件处理耗时多的关键算法,提高了系统的效率。

    两颗NiosII CPU分别完成计算,提高了运算能力。双核通过共享OnChip-RAM高速地通讯、传递数据。

     

    7  硬件结构2 —— 多标识点捕获模块

    由于传感器控制器与VGA控制器以不同的速率在同一块RAM区域进行读写,VGA图像在物体快速移动时,会出现画面跳动的现象

    我们修改了IP核,使缓存结构变为环形RAM。当传感器控制器或VGA控制器完成对当前区域的读写时,都可以找到另一块没有被读写的区域进行操作。

      

     

    8   硬件结构3 —— USB输出模块

    USB输出3个点的3D坐标,发送到PC机的上位机程序,并以三维立体的形式进行动态展示。而且USB设备支持热插拔,自动识别硬件设备的接入与断开,设备接入后以全自动的方式进行数据获取。

    双摄像头定位系统软件流程图如图9所示。我们将标识点配对、双视计算两个算法分离,并使用两颗NiosII CPU分别完成计算。这样在Core2进行双视计算的同时,Core1就开始下一组数据的标识点配对,大大提高了运算能力。双核运行在一片2M SSRAM上不同的内存空间,通过共享OnChip-RAM高速地通讯、传递数据。

      

     

    9   双摄像头定位系统软件流程

     

    (Revision: 2 / 2008-09-14 21:51:50)

    5. 设计方法 (Final Project Paper)

           在本系统的设计中,使用两个固定的摄像头,从不同角度对空间中三个的红外LED光点进行拍摄。根据两个摄像影像中各个标识点的平面坐标,进行双视计算,获得光点的空间坐标,即完成了空间特征点的三维定位。

    1、自制摄像头

    由于本设计使用到两个摄像头,考虑到DE2-70开发板的资源中只可接入一个USB设备,使用USB摄像头不合适。我们将两个扩展口作为摄像头的接口,并且自行设计了印刷电路板,MT9V022 CMOS传感器接到扩展口。

    CMOS传感器与购买的镜头组合成摄像头,传感器将图像数据通过电路板直接传到FPGA中。光经过镜头,由红外滤光片滤出大部分可见光,投影到感光芯片MT9V022上,芯片MT9V022输出图像数据,图像数据经FPGA,最后在VGA显示。根据VGA显示的图像,找出镜头的焦距,并固定好镜头和感光芯片的距离。

    10   自制摄像头

    两个摄像头放置在同一水平线上,安装时微调了感光芯片和镜头的角度,使镜头光轴与CMOS传感器中心对齐,然后将其固定,组成了双目视觉装置,如图11所示。

    11   双目视觉装置

    2、标识点提取DSP模块

    12   标识点提取DSP模块

    标识点提取,就是要使用数字信号处理方法,通过分析CMOS传感器给出的影像信号跟踪影像中的多个标识点,得到它们的平面坐标。本设计中通过设计硬件模块,高速地实现了此项功能,并且能够较稳定地捕捉屏幕中的三个标识点。标识点显示在VGA中,用红点表示,如图13所示

    13   VGA显示各个标志点(经过红外滤光)

    此模块采用了图像DSP设计的基本方法,使用3×3的扫描方格窗对单帧图像进行运算处理。不仅通过亮度分析得到了若干个标识点的坐标,而且计算分析使得三个标识点能够比较均匀地分布屏幕之中。不会因为单个标识点过大,而出现找到的三个标识点都处在一个亮斑中的情况。

    14   用扫描方格窗对单帧图像的处理

    值得称道的是,利用Altera提供的多输出口移位寄存器ip核,生成扫描方格窗这一DSP设计步骤变得十分快捷,是我们能够更专注于处理算法部分的电路设计。电路运行速度25MHzCMOS传感器像素速率同步,输出信号与传感器的帧信号同步,达到了输出信号速率60Hz的设计要求。

    3、双核运算系统

    本设计中,SOPC部分承载了复杂算法实现的重要任务。主要算法步骤如下:

    (1) 算法步骤

    n  标识点配对

    在空间中存在3个红外LED光源时,标识点提取模块从每个影像中得到了三个标识点(标识点)坐标。下一步对这6个标识点坐标进行配对,即分析标识点相对位置以及几何关系,将同一实际光源通过不同摄像头所得到的两个坐标配对。

    对应代码,main_0.c    MatchPoint();

    n  双视计算

    双视计算属于计算机视觉所研究的范畴。一般在计算之前,都需要对摄像机装置进行定标。通过记录若干组给定空间位置的特征点在两个摄像头平面上的坐标,拟合出模型参数。

    之后就可以根据事先测定的模型参数,利用空间特征点在两个不同位置的摄像机平面的坐标,计算出该标识点的空间坐标。

    目前计算的具体实现算法不一。在我们的软件设计中,给出了清晰的算法c语言函数接口Calculate(),可以简单快捷地调试乃至改变当前使用的双视算法。

    (2) 关键技术

    最初设计NiosII系统时,采用的是一般的单核心解决方案,所有运算由一颗运行在100MHzNiosII CPU完成。但在实验中,发现由于标识点配对、双视计算包含了极其大量的乘除运算,在使用了硬件乘除法器的情况下,最终数据输出到上位机的速率也仅能达到1020Hz,与设计要求相差较远。

    NiosII系统具有很好的可重构性,SOPC Builder又使得设计的修改变得简单易行。因此我们的设计还具有广阔的升级空间,之后我们使用了以下手段将系统性能大大提高。

    n  多核加速处理

    在本设计中使用FPGA芯片的CycloneII具有充分的片上逻辑资源,这使得我们多核计算的想法得到了实现的可能。

    考虑到标识点配对、双视计算这两个步骤的计算在空间上具有相对的独立性,在时间上,具有先后的顺序,即标识点配对的数据输出为双视计算的数据输入。我们将两个算法分离,并使用两颗NiosII CPU分别完成计算。这样在Core2进行双视计算的同时,Core1就开始下一组数据的标识点配对,大大提高了运算能力。

    双核运行在一片2M SSRAM上不同的内存空间,通过共享OnChip-RAM高速地通讯、传递数据。

    在双核的方案下,数据输出速率提高到了40Hz左右。

    当前Core2对三个特征点进行双视计算。我们设想,如果性能要求提高,这个过程还可以进一步并行化,使用三颗剪裁的NiosII核心分别完成。

    在算法复杂、FPGA资源丰富的情况下,采用多核并行的方案,开发成本上远比设计相应硬件模块要低。可以说,正是得益于NiosII这样简单易用的软核处理器,我们才在最短时间内使系统性能倍增。

    n  自定义指令

    为了进一步提高性能,我们分析了标识点配对的算法。考虑到算法中有很多重复性的复杂运算,编写了功能上对应于该重复运算的VHDL硬件加速模块。在自定义指令、自定义外设、c2h三种方案中,考虑到实现与调试上的难易程度与性能提升比例,我们使用自定义指令的方式,对Core1的标识点配对运算进行加速。

    4、修改了SDRAM IP

           在设计中,SDRAM作为CMOS传感器与VGA信号输出之间的缓存使用。SDRAM的控制器使用了Terasic提供的4-port-sdram IP核。

           在测试中,发现VGA图像在物体快速移动时,会出现画面跳动的现象。这是由于传感器控制器与VGA控制器以不同的速率在同一块RAM区域进行读写导致的。

    我们对IP核进行了修改,使缓存结构变为环形RAM。方案如下,使用三块RAM区域ABC,每块区域大小为一屏的数据。当传感器控制器或VGA控制器完成对当前区域的读写时,都可以找到另一块没有被读写的区域进行操作。

    这样,避免了对缓存同一块区域的同时读写,使画面质量得到提高。

    5、纯硬件USB控制器

    本设计中,设备以USB Device的形式与PC进行数据通信,使用的USB芯片为isp1362。其控制器模块由我们自己设计,完全以VHDL语言硬件实现。

    控制模块为USB_Isp1362_control.vhd

    控制器硬件结构为复杂状态机,以中断方式工作。

    框架流程为

    1)配置工作状态

    2)配置中断模式

    3)配置端点模式

    4)进入中断处理循环,处理各类中断

    l  Setup包处理(枚举过程控制)

    l  收包处理

    l  发包处理

    子模块USB_Isp1362_regAccess.vhd用于按照时序要求,对isp1362内部寄存器进行存取。USB时序图如图15所示。

    15   USB时序图

           USB控制器在CycloneII FPGA上实现了通常MCU的功能,且不依赖于Nios CPU,可以作为IP核在一般的FPGA设计上复用。所设定的USB设备支持两端点收发,达到了USB2.0规范的传输速度。

           在程序下载到FPGA后,连接设备与PC,即可在PC端发现新硬件,安装驱动程序后,就可以与上位机正常工作。

    6、上位机

           在设计硬件系统的同时,我们在PC端设计了基于DirectX9的上位机程序。上位机用于接收硬件系统通过USB发送的3个点的3D坐标,并以三维立体的形式进行动态展示,如图16所示,图中的小球表示VGA中的标识点。由此获取的坐标值可用于进一步的应用开发。

    支持热插拔。自动识别硬件设备的接入与断开,设备接入后以全自动的方式进行数据获取。控制方式方面,支持完整的视角移动,支持坐标的查看。

    16   上位机程序界面

     

    (Draft / 2008-09-14 21:37:00)

    6. 设计特点 (Preliminary Paper)

    1、图像的背景亮度过高会对预置特征光点的提取造成障碍。本设计中利用了红外滤光片,基本上做到只显示红外发光二极管,避免了干扰,提高了精度。

    2、图像标识点提取处理采用硬件实现,能够提高处理的速度。相对纯软件实现的解决方案而言,能够提供更高的帧率,使得输出更流畅。

    3CycloneII提供了大量逻辑单元资源,使得本设计能够并行处理双摄像头采集的两个视频流。避免了共用处理模块而导致的各种冲突问题,也提高了性能。

    4、硬件对外提供了直接的VGA输出,以监控标识点提取模块的性能。

    5、以硬件方式实现了USB控制器。通过USB接口,以即插即用的方式实现了与计算机的通讯。能够向计算机输出计算出的空间定位坐标信息。

             6、采用双核处理,双核之间的通信通过OnChip-RAM作为缓存,大大提高了系统的运行能力。

    7、自定义指令的应用,用硬件逻辑电路实现系统中软件处理耗时多的关键算法,大大提高了系统的效率。

    8、与计算机的通讯,使得本设计在功能方面具有了很高的扩展性。根据硬件输出的结果,在计算机上进行再开发,可以得到很多种不同的应用。

     

    (Revision: 4 / 2008-09-14 21:11:49)

    7. 总结 (Final Project Paper)

    我们本次设计作品利用SOPC较好的完成了系统的设计任务,实现了双视算法开发硬件平台的功能。在具体的双视算法的方面上,效果还有缺陷,我们还需要努力。

    我们较好的完成了系统的设计任务,SOPC设计方面,我们使用了Nios软核处理器作为计算核心,并完成了内核之间数据的通讯,在芯片上实现了自定义指令对程序的加速。自制了采样率达50-60fps的高帧率图像传感器,保证了运动轨迹的实时捕获。我们设计了CMOS传感器控制与信号接收模块,对于收到的图像信号使用了DSP设计方法进行多标识点提取。在图像的输出方面使用并修改了Terasic SDRAM IP,引入了环形RAM缓存结构。与此同时,自行设计了纯硬件的USB控制器,独立于CPU进行数据包的处理与收发。定制了PC端的USB驱动程序,并通过USB与所编写的上位机程序成功通讯。最终完成了系统的软硬件设计。

    作为刚刚完成数字电路课程的本科生,QuartusSOPC Builder简介明了的界面与方便实用的功能给了我们很深的印象,也让我们很快的上手并作出自己的设计。设计过程中,我们学到了很多Nios的应用,应用都大大提高设计的效率和程序运行的速度。

    此次设计过程中, SOPC Builder的高度集成性以及Nios IDE软件集成开发环境的稳定性,使系统调试起来非常方便。

    最后,我们参赛小组很感谢Altera公司为提供这次机会,在学习中开阔了视野,锻炼了我们的动手能力。

     

    (Draft / 2008-09-14 21:13:43)