著录项信息
专利名称 | 一种基于无线传感器网络节点的视觉传感器驱动方法 |
申请号 | CN200810018006.6 | 申请日期 | 2008-04-18 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2008-10-08 | 公开/公告号 | CN101282265 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L12/28 | IPC分类号 | H;0;4;L;1;2;/;2;8;;;H;0;4;L;2;9;/;0;8;;;G;0;6;F;1;3;/;2;8查看分类表>
|
申请人 | 西安交通大学 | 申请人地址 | 陕西省西安市咸宁路28号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 西安交通大学 | 当前权利人 | 西安交通大学 |
发明人 | 冯祖仁;梁耀斌;陈火健;苏家全;田锋 |
代理机构 | 西安通大专利代理有限责任公司 | 代理人 | 陈翠兰 |
摘要
本发明公开了一种基于无线传感器网络节点的视觉传感器驱动方法。它提供了在现有的无线传感器网络节点上加入视觉传感器的方法,建立视觉传感器采集数据的状态机;在内存中开辟多帧循环缓冲区;直接内存访问DMA传输方式把视觉传感器采集到的数据拷贝到内存当中,对视觉传感器进行实时调节以适应实际环境的变化;返回包含有效采集数据的内存缓冲区地址,无线传感器网络节点的微处理器可以访问该地址而获取采集所得的数据。本发明大大提高了图像采集的性能,提高了其利用效率,有效地解决了图像数据采集与用户读取数据之间的冲突,增强其适应性。
1.一种基于无线传感器网络节点的视觉传感器驱动方法,其特征在于,包括以下步骤:
1)建立视觉传感器采集数据的状态机;利用视觉传感器的帧同步信号触发状态机,行同步信号触发采集一行象素的数据,时钟信号触发采集一个象素的数据;
2)在内存中开辟多帧循环缓冲区;多帧循环缓冲区以一帧图像的大小为单位,开辟至少3帧的缓冲空间,头尾相接形成一个循环队列;
3)使用直接内存访问DMA传输方式把视觉传感器采集到的数据拷贝到内存当中;数据先被放到先进先出缓冲器FIFO中,当达到其半满门限值时,触发使用直接内存访问DMA传输方式把采集所得的数据拷贝到内存所开辟的空闲多帧循环缓冲区当中;
4)利用由Philips公司开发的两线式串行总线通信协议-I2C总线,对视觉传感器进行实时调节以适应实际环境的变化;
5)最后,返回包含有效采集数据的内存多帧循环缓冲区地址,无线传感器网络节点的微处理器可以访问该地址而获取采集所得的数据。
2.根据权利要求1所述的视觉传感器驱动方法,其特征在于,对视觉传感器进行实时调节是通过I2C总线向视觉传感器发送需要检测的参数所对应寄存器的地址进行读操作,用来检测视觉传感器的状态,通过发送对应寄存器的地址和参数值进行写操作,用来配置和控制视觉传感器的采集方式。
技术领域\n本发明涉及属于嵌入式系统领域,特别涉及一种基于无线传感器网络节点的视觉传感器驱动方法。\n背景技术\n无线传感器网络(Wireless Sensor Network)是当今涉及多学科高度交叉的前沿热点研究领域。它综合了传感器技术,现代计算机网络技术,嵌入式计算技术及分布式计算和控制技术等。分布于网络中的节点通过各种传感器对周围环境进行实时的感知和信息的采集,节点之间利用无线通信模块进行协作,信息共享,知识融合,使用分布式计算和控制技术,对网络的下一步行为进行决策。无线传感器网络把物理环境和信息世界有机地融合在一起,大大地提高了认知环境能力,拓展了计算智能在现实环境中的应用。\n当前存在很多无线传感器网络的硬件平台,典型的有加州大学伯克利分校(UC Berkeley)的智能尘埃(Smart Dust),Crossbow公司的Mica系列节点。2007年授予王汝传等人的发明专利CN 101009623A“一种无线传感器网络节点及其实现方法”揭示了一种短距离低功耗的无线通信系统的设计方案。但上述的专利和应用中,均只把重点放在节点的硬件自身构建,没有考虑节点与传感器的进一步整合。由于无线传感器节点一般分布安装于环境当中,对其功耗,稳定性和安全性有较高的要求,从而限制了其计算和处理能力。所以,节点上的传感器一般必须具有简单、低速的特点。但随着人们对环境信息采集和认知的要求越来越高,视觉传感器具有信息量大,精确度高和简单易用的特点使得其在无线传感器网络节点中的应用成为趋势。\n发明内容\n本发明的目的是提供一种基于无线传感器网络节点的视觉传感器驱动方法。该方法使现有的无线传感器网络节点与视觉传感器有机地结合在一起,提高节点对环境信息的采集速度,能对采集图像效果进行实时的调整和处理。驱动中合理安排采集过程中数据的存储和传输,具有数据冲突避免处理功能、图像预处理功能和节电模式控制功能,给用户提供简单易用的接口,提高其稳定性和适应性。\n本发明的技术方案是这样实现的,包括以下步骤:\n1)建立视觉传感器采集数据的状态机;利用视觉传感器的帧同步信号触发状态机,行同步信号触发采集一行象素的数据,时钟信号触发采集一个象素的数据;\n2)在内存中开辟多帧循环缓冲区;缓冲区以一帧图像的大小为单位,开辟至少3帧的缓冲空间,头尾相接形成一个循环队列;\n3)使用直接内存访问DMA传输方式把视觉传感器采集到的数据拷贝到内存当中;数据先被放到先进先出缓冲器FIFO中,当达到其半满门限值时,触发使用直接内存访问DMA传输方式把采集所得的数据拷贝到内存所开辟的空闲缓冲区当中;\n4)利用由Philips公司开发的两线式串行总线通信协议—I2C总线,对视觉传感器进行实时调节以适应实际环境的变化;\n5)最后,返回包含有效采集数据的内存缓冲区地址,无线传感器网络节点的微处理器可以访问该地址而获取采集所得的数据。\n所述的对视觉传感器进行实时调节是通过I2C总线向视觉传感器发送需要检测的参数所对应寄存器的地址进行读操作,用来检测视觉传感器的状态,通过发送对应寄存器的地址和参数值进行写操作,用来配置和控制视觉传感器的采集方式。\n本发明的结合的方法使用了DMA传输方式,大大提高了图像采集的性能,微处理器的计算控制模块在采集过程中被释放,提高了其利用效率。内存中开辟多帧循环缓冲区,有效地解决了图像数据采集与用户读取数据之间的冲突。使用I2C总线能对视觉传感器进行实时的配置和控制,使视觉传感器在大部分环境下能正常工作,增强其适应性。\n附图说明\n图1是本发明的原理框图。\n图2是本发明的硬件连接图。\n图3是本发明采集数据的时序状态机。\n图4是本发明多帧循环缓冲区使用示意图。\n图5是本发明具体实施的流程图。\n图6是图5中“加载VIDEO模块”部分的任务图。\n图7是图5中“加载CAMERA模块”部分的任务图。\n图8是图5中“open函数”部分的任务图。\n下面结合附图对本发明的内容作进一步详细说明。\n具体实施方式\n本发明中所述驱动方法的实现是在现有的无线传感器节点基础上整合了一个低功耗的CMOS彩色视觉传感器,其分辨率达640×480,最高采集速率达60帧每秒。节点主要通过I2C串行通信协议来对视觉传感器进行配置和实时控制,采集所得的图像数据流以8位并行的方式放入FIFO缓冲区中,当缓冲区达到一定的阈值时,触发DMA控制器来把图像数据拷贝到内存当中,整个过程,微处理器不参与进行,大大地提高了微处理器的利用效率。\n本发明还实现对视觉传感器进行实时的调节和控制。只要用户在驱动提供的接口输入适当的参数,可以使视觉传感器实行自动曝光或者人工调节曝光时间,实现自动白平衡或者人工调节红色分量和蓝色分量在图像中所占的比例,实现自动增益控制或者人工调节增益系数,可以调节亮度系数,对比度系数,颜色饱和度系数和伽玛校正等。基于上述的各种参数均可实时调节,视觉传感器的能在大部分的环境当中得到较为满意的图像采集效果。\n本发明可以对图像的分辨率,图像信息的输出格式和输出速度进行调整。其分辨率可选640×480(VGA格式)和320×240(QVGA格式),也可以开辟较小的窗口以对感兴趣区域进行图像采集。图像的输出格式有RGB原始数据格式,其他各种比例的RGB数据格式和YUV格式。输出可以从0.5到60帧每秒多级可选。\n实现基于无线传感器网络节点的视觉传感器驱动方法如下:\n步骤1:规划视觉传感器模块的基本性能指标:模块需要达到数据采集速度,采集所得的图像分辨率,模块的能耗,采集的实时性,要求具有较高的可靠性,适应性和集成度等。\n步骤2:确定视觉传感器模块的输入和输出方式:基于嵌入式Linux系统编程环境,用户通过接口配置函数对视觉传感器模块进行配置和控制,通过接口读取函数对图像数据进行提取。驱动向用户提供一系列的驱动调用函数,以输入参数的方式来对视觉传感器进行调节和控制,以返回数据所在内存地址的方式来获取采集得到的图像数据信息。\n步骤3:视觉传感器模块的主要设计方案描述:利用串行方式对模块进行配置,配置操作与数据获取操作独立分开设计使微处理器能对视觉传感器实现实时调节;设计视觉传感器模块和微处理器的接口,接口包括硬件中的各个信号的连接方式和采集时序的握手配合;设计内部循环缓冲区,合理安排采集所得的数据流,避免数据的冲突。\n步骤4:利用由Philips公司开发的两线式串行总线通信协议—I2C对CMOS彩色视觉传感器进行配置与控制。串行方式中I2C总线方式简单易用,传输速率也满足我们的需要,所以本发明在嵌入式Linux操作系统中,开发了I2C总线的驱动,设计简单易用的与用户交互的接口,方便用户对视觉传感器进行实时的控制与调整。\n步骤5:设计微处理器与视觉传感器的硬件连接方式。视觉传感器与微处理器之间使用并行8位的数据传输方式,8位数据线与微处理器的通用输入输出口连接,帧同步信号、行同步信号、时钟信号和复位信号分别与微处理器相应的信号线相连,还有步骤4中所述的I2C总线与微处理器的相应的接口线连接。\n步骤6:设计视觉传感器采集图像数据的状态机。结合时钟信号、帧同步信号和行同步信号,根据实际图像数据采集的速度,格式和数量等要求,合理设计状态机。状态机初始化在空闲状态,图像的行数作为行计数器的初始值,图像列数作为列计数器的初始值。当视觉传感器开始采集数据时,会发出帧同步信号,状态机作出反应,跳转到帧等待状态,接着当行同步信号来临时,跳转到行等待状态,随着时钟信号的上升沿来临,有效的数据被采集,列计数器减1,当列计数器为0时,即一行数据被采集完毕,行计数器减1,且列计数被赋初值,接着采集下一行数据。当行计数器和列计数器均为0时,则一帧的数据采集完毕,状态机返回初始状态。\n步骤7:图像数据的获取利用了DMA传输方式。视觉传感器的主要传输模式被配置确定后,视觉传感器进行对数据信息的采集。采集所得的数据首先被存放在先进先出缓冲区FIFO中,FIFO被设定固定的门限值(一般为FIFO容量的一半),当数据达到FIFO的门限值时,中断触发DMA控制器,把图像数据拷贝到内存中,所以在整个采集期间,微处理器不需要参与计算,加快了采集速度。\n步骤8:在内存中开辟多帧循环缓冲区。视觉传感器以固定的采集速率把数据存放在缓冲区中,当达到缓冲区的队尾时,自动把接着采集的数据引导到缓冲区的队首,这就形成了循环的缓冲区域。当用户提取某一帧的图像数据时,将提取视觉传感器刚采集完毕的一帧完整数据,并把该区域的缓冲区锁定,当视觉传感器的写入操作遇到已经锁定了的缓冲区时,跳过该缓冲区域,并把数据放进下一个空闲的缓冲区中。要确保用户读取的是最近刚采集完成的数据,为避免两次读取时间过短而读取到旧数据,所以开辟的缓冲区空间至少为3帧。这样便避免了在用户读取数据与视觉传感器写入新的数据之间的可能会发生的冲突。\n步骤9:设计用户接口。视觉传感器模块的驱动中给用户提供了基本的视觉传感器控制接口和高级的视觉传感器控制接口。基本的控制接口有启动和关闭视觉传感器,配置视觉传感器为省电模式,设置采集图像大小,采集速度等;高级的控制接口有自动或手动曝光控制,自动或手动增益控制,自动或手动白平衡控制等。在Linux操作系统中编写驱动程序,接口的具体形式通过系统调用来实现,把需要传递给视觉传感器的控制信息作为系统调用的输入参数,而采集所得的图像数据所在的内存地址则是系统调用的返回值。\n步骤10:视觉传感器模块的供电设计。提供对视觉传感器的正常模式,省电模式和关闭模式三个状态进行控制,设计相应的接口函数,使用户能简易地对视觉传感器的功耗进行控制。模块需要5V供电,对输入的电池电压进行稳压,给视觉传感器提供持续稳定的电压。数据端的输入输出为CMOS电平,适合与大多数微处理器进行连接。\n步骤11:视觉传感器模块的优化与扩展设计。根据嵌入式处理器架构体系,对模块的驱动代码进行优化设计,使其具有更快更高效的采集性能,更适合在资源有限的嵌入式系统中应用。设计和完善配置接口函数,如添加调整图像大小函数,软件自动曝光和软件自动白平衡函数等,方便用户使用与扩展。\n步骤12:对系统进行全面测试。使系统处于不同的环境下进行测试,如亮度不足和亮度变化较大的环境,颜色偏蓝和颜色偏红的环境等。无线传感器节点与视觉模块结合得很好,并且能高速稳定地进行图像采集,在大部分环境下能很好的工作,得到满意的效果。\n参照图1所示,它主要包括了视觉传感器1,计算控制模块2,内存3,DMA控制器4,I2C模块5,状态机6和先进先出缓冲区FIFOs 7。首先,计算控制模块通过两线串行通信协议I2C总线对视觉传感器进行基本的配置,然后对视觉传感器发出采集命令,由视觉传感器发起采集同步信号,通过状态机使得视觉传感器与微处理器握手协作,以完成整个采集过程。采集时,数据首先临时被放进先进先出缓冲区FIFO里,当FIFO中的数据达到一定的门限时,触发DMA控制器把采集所得的数据拷贝到内存当中,这个过程中,计算控制模块可独立地做自己的计算。这种设计方式能够大大提高计算控制模块的使用效率。\n参照图2所示,视觉传感器与微处理器之间的数据传输是使用8位的并行总线D0-D7。数据采集时钟PCLK由视觉传感器输出,微处理器利用其时钟来触发读取有效数据的操作。帧同步信号VSYNC和行同步信号HSYNC也由视觉传感器输出,微处理器根据同步信号来改变状态机的状态,以完成采集过程。复位信号RESET由微处理器输出,可以对视觉传感器进行硬件复位。掉电信号PDWN由微处理器输出,可以对视觉传感器进行硬件转入省电模式。最后还有I2C协议总线的时钟线SCL和数据线SDA。\n参照图3所示,状态机总共分为4个状态,包括空闲等待状态,帧等待状态,行等待状态和数据提取状态。首先状态机置于空闲等待状态,并对其两个参数行计数器Row和列计数器Col进行初始化,其初始化值分别为图像的高度和宽度。当视觉传感器的帧同步信号上升沿跳变时,触发状态机转入帧等待状态,提示视觉传感器开始采集数据。当行同步信号上升沿跳变时,触发状态机转入行等待状态,提示图像中一行数据的采集开始,这时行计数器Row减1。当时钟信号上升沿跳变时,跳转到数据提取状态,有效数据从视觉传感器传送到微处理器上,并且列计数器Col减1。若Col不为0,当时钟信号上升沿跳变时,采集下一个数据,且Col继续减1,直到Col为0时,表示一行数据采集完毕,此时若行同步信号上升沿跳变,则状态转入到行等待状态,Col被赋予初值,且行计数器Row减1,继续下一行数据的采集。直到Row值和Col值为0时,状态机返回到空闲等待状态,此时,一帧图像的数据被采集完毕。\n参照图4所示,本发明设计一个多帧循环缓冲区,该缓冲区以一帧图像的大小为最小单位,其大小至少为3帧,可根据内存的空闲情况而扩大。该区域首尾相接,形成一个循环队列。图中每一个矩形方块表示一帧的缓冲空间,其属性均有说明:free表示该帧缓冲区可以进行正常的写操作;locked表示该帧缓冲区正被读取,不能进行写操作;writing表示该帧缓冲区正被进行写操作。视觉传感器开始采集数据后,连续采集得到的数据被DMA控制器存放在内存当中,并且将当前帧记录为writing,如图a中所示。当写入到达队尾时,下一帧数据被引导到队头,继续写入下一个空闲的缓冲区。在某一时刻,用户读取采集数据,这时会把当前写入帧的前一帧锁住(也就是最新采集完毕的一帧),并被记录为locked,如图b所示。视觉传感器在写入数据时,将会跳过这一帧缓冲,写进下一个空闲帧缓冲中。当读取操作完成时,被锁的帧缓冲即被释放,成为可用的空闲帧。这样,便解决了用户读取的随机性与采集操作的冲突,并保证用户读取到的数据均为最新采集所得的数据。\n参照图5所示,使用本驱动方法需要实施以下几个步骤:\n步骤1(Step1):首先,用户必需在Linux操作系统中加载VIDEO模块,这一操作的主要工作是在Linux操作系统中登记注册设备信息,包括注册系统中唯一的一个设备号,建立一个设备文件,支持sysfs系统,该文件系统接口能使用户更详尽地了解设备驱动的工作状态,如图6所示。\n步骤2(Step2):接着是加载CAMERA模块,这一操作主要工作是申请系统唯一的中断号,该中断号关联一帧的图像数据采集完毕后触发的中断服务函数。然后申请DMA通道,该DMA通道负责数据从先进先出缓冲期FIFOs拷贝到内存的操作。最后建立一个建立记录视觉传感器信息的结构体,该结构体为全局变量,描述了图像的大小(即分辨率),采集速度,数据的输出格式,帧缓冲区大小,缓冲区物理地址,虚拟地址等一系列参数,如图7所示。\n步骤3(Step3):如图8所示,当加载了上述的两个模块后,驱动设备文件就能被操作。第一个操作是open函数,打开设备文件。该操作主要完成工作有,配置状态机的握手参数,包括图像的行数和列数,采集的速率,同步信号的触发方式等。然后是初始化I2C模块,配置好相应的管脚属性,I2C缓冲区清零等。接着是检测视觉传感器的ID,每个视觉传感器都有相应的ID号,同类型的视觉传感器可以有相同的ID号,检测ID号使系统知道视觉传感器的属性,并确保与视觉传感器已通讯成功。多次检测失败则函数返回失败。最后是分配链式缓冲区,分配失败则函数返回失败。如图4所示的多帧循环链式缓冲区,确保缓冲区中数据的写入与读出不发生冲突。\n步骤4(Step4):当打开设备成功后,则设备即可被使用。mmap函数是把在内核空间中开辟的缓冲区映射到用户空间中,省去了内存拷贝的步骤,使得用户访问缓冲区是更加快捷方便。\n步骤5(Step5):使用ioctl函数可以给视觉传感器发出采集的开始命令,视觉传感器随即进行图像采集。ioctl函数可以配置采集图像的大小(分辨率),采集速度和图像格式。ioctl函数也可以通过输入参数来实时地调节视觉传感器,如曝光方式(自动或手动),曝光时间,自动增益控制,自动白平衡,图像亮度调节,色度调节和饱和度调节等参数。ioctl函数能够发送图像获取命令,驱动程序会立即把最新采集完毕的对应帧缓冲空间锁住,保证数据写入与数据读取不发生冲突,如图4所介绍。\n步骤6(Step6):当采集过程完毕后,必须先调用munmap函数。该函数放弃内核空间到用户空间映射操作,这样才能正常释放缓冲空间。\n步骤7(Step7):调用munmap函数后,调用close函数。该函数释放open函数中所申请的多帧循环缓冲空间,并关闭所打开的设备文件。
法律信息
- 2014-06-11
未缴年费专利权终止
IPC(主分类): H04L 12/28
专利号: ZL 200810018006.6
申请日: 2008.04.18
授权公告日: 2010.09.15
- 2010-09-15
- 2008-12-03
- 2008-10-08
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-08-01
|
2007-01-29
| | |
2
| |
2008-03-12
|
2007-09-30
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |