基于PC104无人机网络视频系统的构建
发布时间:2008/5/29 0:00:00 访问次数:407
1 系统结构及工作原理
该系统的下位机主要由深圳桑达公司的pc104工控机、罗技快看太空版mp摄像头(usb接口)、linksyswrt54gc-cn无线路由器及外围电路组成,采用嵌入式linux 2.4.26操作系统,主要负责视频数据的采集,压缩及将数据发送到上位机。上位机是包含有无线网卡的pc电脑,主要负责视频数据的接收、解压和显示,上下位机通过udp/ip网络协议进行数据的传输,采用socket网络编程可以实现网络的互联及数据的收发。
pc104工控机采用嵌人式专用cpu pⅲ533~933 mhz,板载ddr内存高达128
2 视频数据采集的软件实现
video4linux(v4l)是嵌入式linux下视频设备的内核驱动,他为linux下的视频设备提供了一系列的接口函数,在编译和配置内核阶段,必须增加v4l模块和usb摄像头驱动模块的支持。对于usb接口摄像头,其驱动程序中需要提供基本的i/o操作函数open,read,write,close的实现,对中断的处理实现,内存映射功能以及对i/o通道的控制接口函数ioctl的实现等,并把他们定义在struct file operations中。这样当应用程序对设备文件进行诸如open等系统调用操作时,linux内核将通过fileoperations结构访问驱动程序提供的函数。在系统平台上对usb摄像头进行驱动,首先把usb控制器驱动模块静态编译进内核,使平台中支持usb接口,再在需要使用摄像头采集时,使用insmode动态加载其驱动模块,这样摄像头就可正常工作了。
在usb摄像头被驱动后,再利用video4linux支持的几个视频采集相关的数据结构进行编程,就可以实现视频数据的采集。图1是嵌入式linux下视频数据采集的流程:
使用ioctl(devfd,vidiocsync,&vid_mmap)函数判断一帧图像是否截取完毕,成功返回表示截取完毕,之后就可把图像数据保存成文件的形式。为了得到连续帧视频图像,可在单帧的基础上,利用vid_buf.frames值确定采集完摄像头帧缓冲区帧数据进行循环的次数。在循环语句中,也是使用vidiocmcapture ioctl和vidiocsync ioct1函数完成每帧截取,但要给采集到的每帧图像赋地址,利用语句buf=map+vid_buf.off-sets[frame],然后保存成文件的形式。
3 视频数据压缩原理
无人机系统的下位机要求实时传输视频数据到上位机,由于视频数据量较大且网络带宽非常宝贵,对视频数据选用一种高压缩比的文件格式显得十分重要。jpeg是联合图像专家组(joint picture expert group)的英文缩写,是国际标准化组织(iso)和ccitt联合制定的静态图像的压缩编码标准。和相同图像质量的其他常用文件格式(如gif,tiff,pcx)相比,jpeg是目前静态图像中压缩比最高的,而图像质量却差不多。正是由于jpeg的高压缩比,使得他广泛地应用于多媒体和网络编程中。
jpeg-专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(discrete cosine transform,dct)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用有损压缩算法时,在压缩比为25:1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出他们之间的区别,因此得到了广泛的应用。jpeg压缩是有损压缩,他利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。jpeg算法框图如图2所示。
压缩编码大致分成3个步骤:
(2) 使用量化表对dct系数进行量化。量化表是一个量化系数矩阵,通过量化
1 系统结构及工作原理
该系统的下位机主要由深圳桑达公司的pc104工控机、罗技快看太空版mp摄像头(usb接口)、linksyswrt54gc-cn无线路由器及外围电路组成,采用嵌入式linux 2.4.26操作系统,主要负责视频数据的采集,压缩及将数据发送到上位机。上位机是包含有无线网卡的pc电脑,主要负责视频数据的接收、解压和显示,上下位机通过udp/ip网络协议进行数据的传输,采用socket网络编程可以实现网络的互联及数据的收发。
pc104工控机采用嵌人式专用cpu pⅲ533~933 mhz,板载ddr内存高达128
2 视频数据采集的软件实现
video4linux(v4l)是嵌入式linux下视频设备的内核驱动,他为linux下的视频设备提供了一系列的接口函数,在编译和配置内核阶段,必须增加v4l模块和usb摄像头驱动模块的支持。对于usb接口摄像头,其驱动程序中需要提供基本的i/o操作函数open,read,write,close的实现,对中断的处理实现,内存映射功能以及对i/o通道的控制接口函数ioctl的实现等,并把他们定义在struct file operations中。这样当应用程序对设备文件进行诸如open等系统调用操作时,linux内核将通过fileoperations结构访问驱动程序提供的函数。在系统平台上对usb摄像头进行驱动,首先把usb控制器驱动模块静态编译进内核,使平台中支持usb接口,再在需要使用摄像头采集时,使用insmode动态加载其驱动模块,这样摄像头就可正常工作了。
在usb摄像头被驱动后,再利用video4linux支持的几个视频采集相关的数据结构进行编程,就可以实现视频数据的采集。图1是嵌入式linux下视频数据采集的流程:
使用ioctl(devfd,vidiocsync,&vid_mmap)函数判断一帧图像是否截取完毕,成功返回表示截取完毕,之后就可把图像数据保存成文件的形式。为了得到连续帧视频图像,可在单帧的基础上,利用vid_buf.frames值确定采集完摄像头帧缓冲区帧数据进行循环的次数。在循环语句中,也是使用vidiocmcapture ioctl和vidiocsync ioct1函数完成每帧截取,但要给采集到的每帧图像赋地址,利用语句buf=map+vid_buf.off-sets[frame],然后保存成文件的形式。
3 视频数据压缩原理
无人机系统的下位机要求实时传输视频数据到上位机,由于视频数据量较大且网络带宽非常宝贵,对视频数据选用一种高压缩比的文件格式显得十分重要。jpeg是联合图像专家组(joint picture expert group)的英文缩写,是国际标准化组织(iso)和ccitt联合制定的静态图像的压缩编码标准。和相同图像质量的其他常用文件格式(如gif,tiff,pcx)相比,jpeg是目前静态图像中压缩比最高的,而图像质量却差不多。正是由于jpeg的高压缩比,使得他广泛地应用于多媒体和网络编程中。
jpeg-专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(discrete cosine transform,dct)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用有损压缩算法时,在压缩比为25:1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出他们之间的区别,因此得到了广泛的应用。jpeg压缩是有损压缩,他利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。jpeg算法框图如图2所示。
压缩编码大致分成3个步骤:
(2) 使用量化表对dct系数进行量化。量化表是一个量化系数矩阵,通过量化