Profile - CN090


CN090

基于机器视觉的辅助挂弹系统

西安理工大学
信息与控制工程系


Finals


[print]


Project

Name of Project:基于机器视觉的辅助挂弹系统

Contact Information

Name:李学锋
E-Mail:xautlxf@hotmail.com
Telephone:02984047717
Mobile Phone:13002939042
Mailing Address:西安理工大学,金花校区,105信箱,邢男收,邮编710048

Contest Advisor

Name:邢男
E-Mail:xingnan@xaut.edu.cn
Telephone:13571927630

Members

No.NameE-MailEnglish Name
1樊骕研xautfsy@hotmail.comFan Su Yan
2李学锋xautlxf@hotmail.comLi Xue Feng
3张月zhangyue0726@163.comZhang Yue

Project Paper - view as Preliminary(2010/06/01), Final(2010/09/18), Draft, Latest

1. 设计概述 (Preliminary Paper)

1.1 研究背景

            战争状态下飞机挂弹的快慢在双方争夺制空权的时候是决定性因素之一,在现代作战环境中,尽可能缩短飞机再次出动间隔时间已成为提升航空战斗力的重要任务。统计表明,美军航空兵在以对地攻击为主的作战中,飞机挂弹作业的工作量占整个地面保障作业的80%,占用人员6以上,是构成地面保障作业"木桶"中那块“最短的木板”。由于主战装备(作战飞机和弹药)和保障设备的采购价格和使用成本之间存在着可达几个数量级的巨大差异,所以在提高飞机地面保障作业的效率方面所进行的任何努力都将创造可观的军事经济效益。给挂弹飞机快速挂载导弹是提高空战快速反应能力的重要作战指标之一。早期挂弹完全靠人工方法(图1.1.1),现今机械化有所提高,但智能化不足(图1.1.2)。实现智能化和低人工化是研究的主流方向!

  

图1.1.1  俄军地勤为苏25挂弹过程                                           图1.1.2飞豹战机挂弹过程

             一般的挂弹方式有三种,分为人工挂弹(图1.1.1)、绞索挂弹(图1.1.3)和全刚性挂弹(图1.1.4)。全刚性挂弹机械化程度高、方便控制所以更易于实现自动化挂弹,本课题也是在全刚性挂弹的基础上设计的。全刚性挂弹由挂弹车机械臂的托弹盘托载弹体,通过地勤人员的肉眼观察来对机械臂操作手辅助指挥,经由多人员的相互配合完成挂弹。挂弹要求弹体与机翼的紧固接口进行准确对接,继由工作人员对紧固接口和其它装置进行连接。因为需要多人协作交互并不断调整位置,所以人员投入多且效率低。

 

图1.1.3 绞索挂弹                                                      图1.1.4 刚性挂弹

1.2 设计意图

   本研究课题意在设计出一套基于机器视觉的辅助挂弹系统,在完全自主设计的挂弹系统模型上借助CMOS摄像头进行实时图像采集,用Atera DE系列开发平台进行视频处理与机械控制,最终成功完成模型的自动挂弹操作。(图1.1.5)

 图1.1.5 设计意图 

        我们设计的创新点在于机器视觉的辅助挂弹,实现自动检测挂点并进行导弹挂点同机翼挂点的自动对准操作。能够精确的利用CMOS摄像头进行挂点的空间定位,并且完成了对机械臂各自由度的灵活控制。减少了挂弹操作的人员投入同时缩短挂单作业的耗时,提高挂弹系统的效率及自动化程度。

1.3 应用前景

       本系统可以运用到空军基地和海军航空母舰上,对进行现代化自动挂弹系统的研究和开发及定点运输工具的开发具有一定的参考价值。本系统运用了SOPC技术,在Nios II软核上开发,所以软件部分可以用于基于Nios II软核的图像处理算法开发平台。

1.4 利用Altera FPGA器件进行设计的原因

1.Altera Cyclone FPGA极为丰富的片上资源足以满足复杂度不是特别高的设计。另外DE2-70开发板也为用户提供了丰富的接口和存储器资源,用户可以在其上进行各种系统的设计和开发。相关的例程及学习资料也极为丰富。

2. Altera公司向开发者提供了丰富的软件开发资源。SOPC Builder是我们可以方便的定制NiosII处理器、外设、存储器和I/O。降低了成本,提高了集成度。

 

 

 

3.优势的Nios II 软核处理器

        Nios II软核系统的性能是可以根据应用来进行裁减的,定制用户自己的系统,与固定的处理器相比,在较低的时钟速率下具备更高的性能。具有丰富的IP核库,方便用户设计,有效的提高系统的运算能力。并且便于设计人员对系统的升级和开发。

    C2H对设计的有力支持。Nios II提供的C2H编译器能够将对性能要求较高的C语言程序自动转换为硬件加速器,集成到基于FPGA的Nios II子系统中。这样,分担了Nios II处理器的数据计算和存储器访问功能,使处理器能够更好的处理其他任务。由于Avalon互联架构并没有限制主机和从机的数量,因此,Nios II C2H编译器可以根据转换目标代码的要求,产生多个存储器自治硬件加速器。帮助嵌入式系统开发人员提高效率,实现成功的设计。

(Revision: 8 / 2010-08-30 04:02:12)

2. 功能描述 (Final Project Paper)

 

          我们在设计过程中划分了模块,分为图像检测和机械控制两部分。下面通过图像检测、机械控制和整合后的完整功能三部分来对我们设计的功能进行全面的描述。

2.1图像检测

 

 

    FPGA图像检测,能够完成对目标挂点的参数计算,并将处理后的视频输出显示。其中工作包括:

1.图像数据转换

将CMOS摄像头PAL制式视频数据转换成30bitRGB。用作Frame buffer的SDRAM用1write2read方式控制。

2.图像分割,包括拨动开关对分割阈值可调

通过图像分割将目标挂点从背景中提取,用以进行后续的处理。因为挂弹会在不同的环境下进行,我们让拨动开关对分割的阈值可调。这样我们可以通过调整拨动开关让图像分割适应不同的环境。

3.图像滤波,去除检测目标外的噪声

场景中的噪声会对图像检测造成影响,通过中值滤波将噪声去除。

4.对两挂点中心坐标的计算和挂点连线中点的标记

两挂点连线中点在视频中的映射坐标是控制步进电机的重要参数。

5.中点坐标多帧取平均

摄像头的模拟信号易受干扰,输出的视频中标记点会在一定范围内抖动,采用FIFO寄存器将多帧数据求平均,使输出信号得到稳定。

6.最后计算出连线中点同视屏中心的X轴距离Y距离和连线同视频水平轴的夹角

这些信号将传给机械控制部分,用来控制步进电机。

2.2机械臂控制

机械臂的控制,对四个步进电机的控制,在四个自由度上移动机械臂。其中工作包括:

1.四个步进电机驱动电路的设计

 

2.步进电机控制算法的编写和测试

    良好的控制算法可以使系统精确运行,减小误差。

3.编写完整的驱动模块程序

    对四个自由度的电机进行最优化控制,使运行时间最短 

 

4.将电机驱动程序嵌入图像检测程序并进行调试

    设计电机驱动模块和检测模块的时序,在资源利用最优的前提下保证两个模块的衔接,以及系统的稳定性

 

5.对嵌入后的程序进行性能测试和评估并进行修改

 

2.3整体功能实现

    本设计完成了用机器视觉来辅助挂弹操作,提高了挂弹操作的自动化程度。通过图像处理,把检测到的挂点坐标参数传给控制部分,控制部分利用得到的数据控制电机,完成自动挂弹的全过程。

 

 

 

 

 

(Revision: 6 / 2010-08-30 00:46:08)

3. 性能参数 (Final Project Paper)

3.1系统性能参数

 

 

1.系统处理性能参数

 

Nios CPU配置:150MHz

SDRAM_Controller配置:150MHz

SSRAM_Controller配置:150MHz

 

2.图像参数

 

VGA配置:60MHz

VGA分辨率:640*480

像素时钟:27MHz

LTM配置:33.3MHz

视频输入格式:PAL

视频输出格式:RGB

 

3.控制参数

 

输入时钟:50MHz

步进电机最大运行频率:2KHz

步距角:0.225度

细分方式:1/8细分

 

SOPC中大量的标准外设,非常方便设计者的定制。本设计中定制的PLL方便的使nios cpu跑在了150MHz,使SDRAM/ssram超频至150MHz,并能够锁定相位。使得nios处理速度大幅提高,让nios下的图像参数计算得以加速,保证了实时性。

 

 

 

 

3.2性能提高

利用nios处理器提高性能。

1.自定义外设
    Nios II有2类外设:标准外设和自定义外设。添加标准外设非常方便。而用户自定义外设大大提高了系统的运行速度,节约了CPU资源。本设计自定义了LTM_Controller模块使系统速度提高了30多倍。

 

2.自定义指令

    自定义指令是Nios II的一大特色。自定义指令可以大大提高系统的性能,本系统中的本设计利用FIFO存储多帧参数并求出平均值的模块,以及LUT实现反正切的模块来进行自定义指令,使系统完成以上过程的耗时减少了40多倍。

3.3实际功能参数

    样本数/次 平均耗时/s 成功率/%

晴天  40         53         97.5

阴天  40         55         95.0

雨天  18         47         94.4

 

(Revision: 2 / 2010-08-30 04:04:24)

4. 设计结构 (Preliminary Paper)

4.1 辅助挂弹系统组成

           设计出一个硬件模拟系统,包括一个飞机的机翼、摄像头、一架机械臂和一辆起承载作用的车体,通过相应的处理与控制,完成对飞机的辅助挂弹。图4.1.1是自动挂弹系统整体的组成图,其中利用摄像头对机翼挂点的检测并通过FPGA对视频数据的分析处理和对机械部分的控制是挂弹自动化实现的关键。

图4.1.1 辅助挂弹系统组成

        (1)为机翼。机翼上有两个挂弹点,需要实现同导弹上的两处挂点进行对准。下图是我们自己制作的机翼模型实物。

图4.1.1 机翼模型

    (2)为机械臂。通过四个步进电机可以控制机械臂在水平面内移动,在垂直方向升降,及导弹托盘的转动。图4.1.2是我们自主设计的机械臂模型图。虚线框出的部分是摄像头架设点,摄像头固定在托弹下方,镜头竖直向上。这样使得导弹与摄像头的相对位置固定方便算法处理。

4.1.2 机械臂模型图

        (3)是FPGA部分。主要实现对视频的实时处理,并控制电机驱动电路。对所采集到的视频数据,完成挂点目标的自动检测,并得到挂点的空间位置,计算出导弹需要移动的位移和需要旋转的角度信息。根据计算出的数据信息,通过驱动电路,控制机械臂的各个自由度的步进电机使机械臂开始挂弹动作。

        (4)是步进电机驱动电路,实现对机械臂各自由度的操作。通过各个自由度的步进电机的驱动,逐步完成相应立体空间位移动作,使导弹挂点与机翼挂点对接。

        (5)为载体车的电路设计部分。

 

        CMOS摄像头负责采集视频信号,经过视频解码器ADV7180将视频数据传入FPGA。FPGA将数据转换成RGB格式后放入帧缓存器SDRAM中。Nios II CPU负责将SOPC从SDRAM中读入的数据进行处理,实时检测出两个挂点并得出用于对机械臂进行操作的数据。(见图4.2.1)  

 

 

图4.2.1 FPGA系统构架

        COMS Image Sensor是我们采用的支持PAL制式的摄像头。TV Decoder是集成视频解码器ADV7180

        I2C Configuration模块用于和外部IC进行通信,例如配置ADV7180

        CMOS Sensor Data CapturePAL Pattem Data to 30-Bit RGB模块分别用于获取视频数据以及数据格式转换。

        SDRAM Controller模块负责对SDRAM的读写。SDRAMCMOS摄像头与SOPC之间的帧缓存器。

        CMOS ControllerSDRAMRGB视频数据与SOPC的接口。

        Motor PIO是步进电机驱动电路与SOPC的接口。

4.3 软件流程图

4.3.1 软件整体流程图

 图4.3.1 软件整体流程图

    图像实时处理部分负责对挂点目标的检测、计算同预定校准完成位置的偏移量。

    机械控制部分主要负责按照图像处理得到的数据来控制机械臂的移动,具体完成挂弹操作。

 

 

 

4.3.2 图像处理流程图

图4.3.2.1 图像处理流程图

 

         图像获取是将CMOS摄像头拍摄的视频数据获取。

     图像分割的作用是过滤掉无用信息,保留挂弹标记点的信息。

4.3.3 机械控制流程

图3.3.3.1 机械控制流程

 

         每次图像处理部分将新的偏移量数据传入机械控制部分后就停止现行操作。按照新的数据对机械臂进行操作。

     数据转换是将偏移量转换为具体的脉冲数来控制步进电机驱动电路。

 

4.4 步进电机驱动电路

 

图4.4.1 步进电机驱动电路

 

  

         左端的接口同FPGA相连,中间为驱动芯片,右端圆圈代表步进电机。

 

 

 

(Revision: 7 / 2010-08-30 07:21:33)

5. 设计方法 (Final Project Paper)

 

5.1自制挂弹车 机械臂

 

        由于我们的设计是模拟实际挂弹情况,所以涉及到机械结构。我们自行设计了机械臂,并由工厂制造出我们设计的机械臂模型。我们又自行设计、改造制作出了挂弹车。挂弹车是机械臂与电路板的载体,并能够将它上面的设备灵活运输。机械臂用来实际操控弹体,摄像头也安装在它上面。

 

 

5.2设计工具

 

1.DE2-70

 

本设计使用了DE2-70多媒体开发平台,用到的资源有:

 

 

•  Altera Cyclone® II 2C70 FPGA device 

•  Altera Serial Configuration device - EPCS16

•  2-Mbyte SSRAM  

•  Two 32-Mbyte SDRAM  

•  8-Mbyte Flash memory 

•  4 pushbutton switches 

•  18 toggle switches 

•  18 red user LEDs 

•  9 green user LEDs 

 

•  50-MHz oscillator and 28.63-MHz oscillator for clock sources 

•  VGA DAC (10-bit high-speed triple DACs) with VGA-out connector 

•  2 TV Decoder (NTSC/PAL/SECAM) and TV-in connector    

•  Two 40-pin Expansion Headers with diode protection 

 

2.PAL制式COMS摄像头

 

3.VGA

 

4.LTM

 

5.机械臂驱动电路

 

 

 

 

5.3图像处理

 

5.3.1视频输入

 

       我们使用PAL制式CMOS摄像头采集视频,从DE2-70的video-in端口输入。视频通过由FPGA配置的视频解码芯片ADV 7181解码后转换成符合ITU-R656标准的数字视频信号输入FPGA。在FPGA中视频由BT656解码模块转换成YUV4:2:2格式,通过帧缓存器SDRAM后,再将YCbCr色差信号转换成RGB信号。过程如图所示。

 

 

        因为转换成RGB格式的视频要满足VGA输出的要求,所以构建了VGA controller模块来控制VGA时序,并且对SDRAM控制模块输入控制信号。SDRAM的控制使用了DE2_70_TV范例中的Sdram_Control_4Port IP核,但我们发现它不能完全支持PAL制式,于是我们修改了Sdram_Control_4Port IP核中控制内部地址和长度的参数。最后使得这个IP核在PAL制式转换成满足VGA时序的RGB格式中非常方便的对作为frame buffer的SDRAM进行了1write2read之方式控制,这样使我们更能专心于视频处理的过程。

 

5.3.2视频处理

 

1.图像分割——提取目标挂点

        因为挂弹作业会在不同环境下进行,光线的不同会很大程度上影响检测的结果,从而干扰精确挂弹。DE2-70开发板上丰富的资源给我们提供了解决的可能性,我们灵活的应用了DE2-70开发板上的18个拨动开关,用拨动开关对RGB三个通道进行阈值控制,调整出合适的分割阈值,准确提取出目标挂点。

 

2.中值滤波——去除噪声点的干扰

        为了去除噪声点对检测的干扰,我们设计了中值滤波去噪模块。此模块采用了图像DSP设计的基本方法,用一个7*7的模板从左至右、从上至下逐行逐列地扫描每帧图像的像素点。模板中的操作为统计符合分割阈值的像素点个数,49个像素点中有35个符合要求则认为模板的中心点是符合要求的点。

 

滤波前

 

滤波后

 

        可以看出,在滤波前视频中的插线处形成了噪声,并且分割出的黑块边沿不平整,检测出的中点严重失真。滤波后噪声消失,检测出的黑块边沿平整,并且标记出的中心点正确。

 

        值得称道的是使用Quartus II中的MegaWizard Plug-In Manager管理器帮助我们定制的Shift Register(RAM-Based) IP核轻松让我们完成了对流水线的图像数据进行移位操作。这使得我们十分便捷的完成了这个处理数据量较大的DSP算法,并且在输入时钟为27MHz下完成了VGA工作在60MHz的设计要求。

 

 

5.3.3坐标参数计算

 

        坐标参数即导弹实际位置与目标位置之间的坐标参数。包括水平面内两个轴向、竖直一个轴向、转角轴这四个轴向需要的偏移量。本设计的参数计算由nios处理器完成。实现的功能有:

 

1.浮点型的参数计算。我们相应的添加了浮点专用指令。

 

2.自定义指令完成对坐标参数多帧取平均,这样能够对机械控制部分输出稳定的数据。

 

3.自定义反正切函数指令。通过LUT实现的自定义反正切函数,在花费了200个深度为10bits的地址单元的基础上,实现了对两个目标挂点与视频水平线0-360°之间的检测,并且使计算速度提高了20倍。

 

 

        最后我们得到的数据每秒钟可以更新25次,这与输出视频的帧频25Hz完全相同,说明我们完成了实时处理的设计目标。

 

5.4电机控制

 

步进电机控制算法

 

        挂弹过程中每个自由度位的精准位移都是由步进电机实现的,步进电机在运行过程中过快加速会造成失步,过快减速则会造成丢步,易造成较大的运行误差。因此符合步进电机运行规律的控制算法既能使运行位移精确又动作尽快完成。在步进电机的加减速过程我们选择了指数型加减速算法。这种算法符合步进电机本身特性,并且升减速过程快速平稳。我们利用软件对开发板内的时钟信号有不同的分频数进行分频,并按算法控制每个频段的运行时间。

 

指数规律加减速曲线

 

分频器原理图

 

5.5用户界面

 

        本设计采用LTM作为用户界面,自定义了LTM_Contrller外设,用Nios来管理用户界面。在LTM上用户可以实时的得到目前与目标位置在四个维度上的偏差,并可以看到挂弹的所用时间。 

 

SOPC中自定义外设LTM_Controller模块接口

 

5.6 SOPC概念在本设计中的应用 

 

        由于本设计精确挂弹的要求,所以必须达到图像的实时处理。若全部由Nios处理器完成图像的分割、中值滤波、以及坐标参数计算等,那么Nios处理器的效力会非常低。本设计采用硬体来实现视频处理的图形加速,用Nios来实现挂弹过程中目标挂点坐标的计算、各模块的控制协调、LTM人机界面的管理。 

 

 

        在SOPC中制定了自定义指令,将硬体实现的高效与软体实现的操作简便融为一体。

 

        浮点专用指令的添加使得在硬件电路中不易管理的浮点型数据运算,在nios中用C语言容易的实现,而且获得了相应用硬件处理数据的高效。

 

        在SOPC中本设计添加了master架构的自定义外设LTM_Controller,这区别于LTM由Nios CPU对其写入数据的slave架构。由于LTM工作在33.3MHz下,不断的需要显示数据的支援,由150MHz的Nios CPU传输数据会比较难实现。所以我们用master架构的Controller,主动从SDRAM中读取显示数据,无需Nios CPU的参与。

 

        pipeline_bridge的应用。在我们设计的SPOC中,PLL、LCD、PIO等都属于慢速的slave架构外设,实时性要求不高。如果直接与CPU用专属通道相连接,会将CPU的最高频率拉低,所以我们使用了pipeline_bridge将其与master相连接。这样可以拉高CPU的最高频率,并使CPU专心处理速度较高的图像数据。

 

        利用Altera Nios 处理器完成了用户操作界面,用软体弥补了以往FPGA纯硬体的设计缺憾。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Revision: 17 / 2010-08-30 07:25:13)

6. 设计特点 (Preliminary Paper)

1.对挂弹方法进行了较大的改善。采用机器视觉辅助挂弹,提高挂弹的智能化程度。使挂弹一步到位,不需要人工进行多次校准。

2.合理设计系统实体结构,使得实现系统功能的算法得到简化。为了使开发成本降至最低并缩短开发时间,我们从最开始的多摄像头双视定位的思路改为单摄像头定位。为了不影响挂弹的精确度我们对摄像头架设点进行了精心挑选。我们采用了将摄像头与机械臂托弹盘固定连接的方法,其拍摄方向为竖直向上。这样弹体与摄像头相对坐标固定,简化了坐标换算,免去了双视定位等降低处理速度的复杂算法,并且通过一定的操作我们仍可实现精确挂弹。

3.在用硬件进行算术操作时使用了LPM,在用硬件实现DSP算法时用到了MgeaCore。通过Altera提供的宏功能模块,缩短了设计时间。

4.采用了自定义外设。正因为Nios II可以弹性化的设定,所以我们依据自己的需求设计了自定义LTM_controller外设。

5.自定义指令的应用。使用Nios II提供的硬件加速方法,将图像处理中一些软件处理耗时多的复杂算法用硬件代替,使系统的整体性能得到提高。

6.图像获取格式转换及对帧缓存器SDRAM的控制采用硬件实现,提高处理速度。相对把图像格式转换模块和SDRAM控制器集成到SOPC中,用软件来实现的方案而言,提高了处理速度,确保了实时处理。

7.基于FPGA的SOPC技术给全系统带来了低成本,高性能,高稳定性,具有可裁剪性并且便于产品升级与开发。

(Revision: 5 / 2010-08-30 07:31:36)

7. 总结 (Final Project Paper)

 

        执着的步伐,辛勤的汗水,我们的创意得以最终实现——基于机器视觉的辅助挂弹系统。是他见证了我们三个人在一个身边几乎没有人了解Nios的环境下,通过不懈的努力取得了突破。回想起6个月前我们还都是Verilog的初学者,想到这4个月以来一起包夜、一起看英文资料、一起在网上海搜各种奇怪的bug,最后真切的看到40公斤重的机械臂成功的挂弹,此时此刻编辑文稿的我们真的学到了不少东西!

 

        我们的作品完全实现了最初设计的功能,基本上完成了最初基于FPGA的所有设计构想。

1.通过硬件处理视频数据使得图形处理加速,实现实时图像处理。

2.通过PLL超频、Pipeline_Bridge的添加、合理的master-slave架构、自定义指令、自定义外设的应用构建了一个处理速度较高的SOPC系统。并在nios处理器中获得了满足精确挂弹要求的实时控制数据。

3.合理设计了实体模型,挂弹车以及机械臂。每个成功的系统都必须内外相合,软硬兼顾。

 

 

        在我们设计过程中,Altera提供的Quartus II和SOPC Builder界面美观简洁容易操作,让我们很快能够上手,着实节省了我们不少精力。并且诸如在Quartus II中右键error选中help可以让我们迅速得到错误信息之类的许多小技巧,给我们留下了深刻的印象。通过我们的实际使用,从自定义指令、自定义外设、IP的可裁剪、master-slave的灵活构建让我们更深刻的认识到了Altera FPGA的SOPC技术的优越之处。

 

        对于刚完成数电课程的我们,面对Altera提供的高级工具我们就感到力不从心了。这也使得我们觉得自己的设计尚有升级的空间。例如可以在nios中构建uc/os-II操作系统,利用多线程进行任务管理;或者在SOPC中定制双核处理系统同时处理数据;当然还有C2H技术可以用来将C代码转化成硬件电路,加快处理速度。如果有机会,我们会把我们的作品继续完善。

 

         最后感谢Altera公司给我们提供了如此好的参赛机会,感谢在比赛期间所有帮助过我们的人!

 

 

 

 

 

 

 

 

(Revision: 9 / 2010-08-30 07:33:44)