摘要:为了探索虚拟平台技术在引导设备中应用的可行性,对DSP图形处理技术结合传感器信号实施虚拟水平指示图形的显示控制进行了研究。构建了DAM6416P为的开发平台,在该平台中,通过试验比较了直线生成算法的画线速度。研究了RGB颜色空间以及YUV颜色空间,通过实验得出不同数据格式在等离子显示器上的几种颜色数值。采集倾角传感器的输出信号,使用C语言编制了指示图形,实时输出到双等离子显示器上,指示舰船的横摇状态。
1 引言
船载飞机飞行于气象变化无常的海洋,起降于面积狭小、摇摆不稳的飞行甲板,危及飞行安全的因素很多。据美国安全中心统计,船载直升机驾驶员的飞行事故是轰炸机驾驶员的10倍,是民航驾驶员的54倍。飞行事故不仅危及直升机的安全,而且由于船上一般载有大量的可燃物,还会危及船的存亡。因此,安全有效的船载机引导系统是保证飞行员生命安全和直升机安全降落的重要手段[1];目前,船上的灯光导引设备主要采用机电设备,用内置白炽灯的机械灯臂作为横摇指示器的显示部分;随着电子器件的不断发展,电子元器件的性能越来越高,应用高、高稳定性的电子器件取代机械设备已经成为一种趋势。本文采用DSP图形处理技术结合传感器信号实施虚拟水平指示图形的显示控制,探索虚拟平台技术应用的可行性,力图消除因机械水平灯杆惯性造成的响应滞后和机械啮合产生的误差等不良因素,对提高船用直升机助降设备的有很大好处,有利于提高船用直升机降落的安全性。
2 相关工作
目前船上的横摇指示器主要采用机电设备,为了探索虚拟平台技术在引导设备中应用的可行性,构建了以DSP倾角传感器、等离子显示器为的横摇引导试验平台。
同时,针对DSP在图形图像处理方面的超强能力,根据倾角传感器的角度信号,设计了虚拟的水平指示图形、指示舰船的横摇状况。
2.1 硬件设计
试验平台共由三部分组成,分别是:1)信号采集部分,使用角度传感器采集三自由度转台横摇信号;2)数字信号处理部分,采用DSP数字信号处理器对传感器输出的信号进行处理;3)视频输出部分,将DSP处理后的数字信号转换成模拟信号后输出。如图1所示。
DAM6416P是DSP开发板。提供了RS-232、RS-422等多个通信接口。同时支持复合视频和S端子的输入、输出,并可单独输出VGA格式的图像。
数字倾角传感器选用ZC-TD-30S为单轴倾角传感器,可输出RS-232串行数字信号。
测量范围±30°,分辨率0.1°,<0.5°。
硬件仿真时使用TDS510仿真器。
等离子显示技术适合动态视频显示领域。本环境选用厦华PS-42D8,具有多种输入接口。
等离子显示器安装在三自由度并联机构转台上,三自由度并联机构转台模拟舰船的摇摆姿态,其作用是作为横摇指示器的信号源。
2.2 软件流程
软件设计过程中采用了模块化结构,设计流程如图2所示。
3 实验分析与结果
3.1 直线生成算法的比较分析
输出到等离子显示器的图形以直线为主,常用的直线生成算法有数值微分法、中点法、Bresenham算法三种[2~4],所以要对直线生成算法做出选择。在这里主要考虑算法的生成速度。为了测试以上三种直线生成算法的速度,分别编写直线生成程序。在CCS软件中,可以看到执行各直线生成程序所耗用的时钟周期,从而计算出执行时间。三种直线生成算法在DAM6416P中需要的指令周期数及执行时间如表1所示。
从表1可以看出Bresenham算法的速度快。所以选择Bresenham算法编制图形显示程序。
3.2 色彩空间分析与实验
为了更直观地表示舰船的摇摆状态,在输出图形时要用到黄色、绿色和红色。而且由于亮度对颜色有影响,不同的显示设备显示的颜色会略有差异,所以需要通过实验,得出与漆膜颜色标准样卡GSB(2000版)中的国标值R03、G04、Y05相匹配的颜色值。DAM6416P输出的视频数据格式有两种:RGB565格式和YUV422格式。在用双等离子显示器显示时,必须同时使用两种输出格式。
3.2.1 RGB色彩空间
RGB565格式是RGB色彩空间的一种数据格式,RGB色彩空间又称加色空间,它将红、绿、蓝三种基色按一定的混合系数相加,几乎可以得到任何一种颜色[5].RGB565格式表示每个像素用16位表示,其中5位用于表示红色,6位用于表示绿色,5位用于表示蓝色。RGB565格式的数据在内存中的存放如表2所示。
编写图形显示程序,在配色时,让像素点的颜色值从0变化到65535,通过实验得出等离子显示器中,与漆膜颜色标准样卡GSB(2000版)中的国标值R03、G04、Y05相匹配的颜色值,如表3所示。
3.2.2 YUV色彩空间
YUV422格式是YUV 色彩空间的一种数据格式。
YUV色彩空间的基本特征是将亮度信号和色度信号分离表示,Y 表示亮度信号,U 表示蓝色色差信号,V 表示红色色差信号[6~7];YUV色彩空间将相邻的像素组成一个宏像素,YUV各分量都带有下标。如YUV422格式中,如果图像数据为16位,一个宏像素为4个字节,实际表示2个像素。每个像素保留Y 分量,而UV 分量在水平方向上每两个像素采样。422的意思为一个宏像素中有4个Y 分量,2个U 分量,2个V 分量。DAM6416P中,YUV422格式的数据在内存中的存放如表4所示。
从表4可以看出,YUV422格式中,相邻两像素点,偶数点的颜色是由它本身的亮度信号Y 和蓝色色差信号U以及它下一点中的红色色差信号V 共同决定;奇数点的颜色由它本身的亮度信号Y 和红色色差信号V 以及它上一点中的蓝色色差信号U 共同决定。针对这一特点,编写图形显示程序,在配色时,保持相邻两像素点亮度值相等,将U 值从0变化到255,V 值每变化一个循环V 值加1,V 的变化范围同样是在0~255,从而观察出颜色的变化规律。
主要程序如下:
for(U=0;U<=255;U++){
for(V=0;V<=255;V++){
for(x=0;x<=351;x++){
for(y=0;y<100;y++){
m=x;
n=m/2;
if(n>floor(n)){
*(pVideoOutFrame+x+h*y)=pow(2,8)+U;}
else{
*(pVideoOutFrame+x+h*y)=pow(2,8)+V;}
}
}
VOUT_putFrame(hVout,pVideoOutFrame,IEKC64_VIDEO_NO_WAIT);
}
outVideoIndex=(outVideoIndex+1)%2;
pVideoOutFrame=&OutputBuffer[outVideoIndex][0];
temp_address2=pVideoOutFrame;
for(i=0;i<FRAME_SIZE_IN_PIXELS;i++)
*(temp_address2++)= *(temp_address1++);
}
实验结果显示,Y 相同的相邻两像素点颜色相同;将U从0变化到255时,图形的颜色从绿色变到蓝色,分界点在128附近;V 从0变化到255,图形的颜色从绿色变到红色,分界点在128 附近。通过实验得出等离子显示器中,YUV422格式的颜色数值如表5所示。
3.3 单线程分时显示的研究
DAM6416P开发板的输出解码芯片BT864被复用了一些引脚,导致不能同时输出两路视频信号。考虑在每台等离子显示器上定义图像的大小为352×240像素,一帧图形仅为0.18MB,以及DSP的处理速度,在编程时采用了分时复用的思想来实现两路信号的输出。
在单线程中采用分时复用输出数据时,VIN模块(视频输入)和VOUT(视频输出)模块的初始化必须放在线程的内部,并且放在每一路输出信号的前面。也就是在输出VGA信号前,对VIN模块和VOUT模块进行初始化。初始化成功后,打开VIN 模块和VOUT 模块,输入、输出VGA信号。输出一帧图形后,停止、关闭VIDEO模块。接着输出CVBS信号,输出前要对VIN 模块和VOUT模块重新初始化,初始化成功后,打开VIN 模块和VOUT 模块,输入、输出YUV422格式的CVBS信号。
反向指针关于正向指针是中心对称的。所谓中心对称图形就是在平面内,一个图形绕某个点旋转180°,如果旋转前后的图形互相重合,那么这个图形叫做中心对称图形,这个点叫做它的对称中心。在编制反向指针的程序时,利用中心对称的特性将坐标横移即可。
3.4 实验结果
DAM6416P提供了针对DSP程序开发的板级开发函数库IEKLIB.IEKLIB为用户提供了九个功能模块。在使用这些模块前,应对其进行初始化。
3.4.1 打开串口接收、发送数据
对UART 模块的初始化是由函数UART_open(&uartcfg)完成的。其中,uartcfg为配置UART端口的一个数据结构。利用这个数据结构可以对串行端口进行具体的配置,包括波特率、校验位、缓冲区的大小及地址。初始化成功后即可打开串行端口,读取传感器数据并存入FIFO中。
3.4.2 打开VIDEO模块
打开VIDEO模块前,需要对VIN模块和VOUT模块的初始化[8].VIN 模块的初始化由函数VIN_open(&videoIn,&hVin)完成。其中videoIn是IEKLIB为配置视频输入功能提供的一个数据结构,可以对视频输入过程的参数进行具体的配置。如果初始化成功,会将新创建的VIN对象句柄的指针返回给hVin.同时,函数将返回一个操作成功的状态。程序如下:
status= VIN_open(&videoIn,&hVin);
if(!IEKC64_SUCCESS(status)){
LOG_printf(&myLOG,“ VIN_open()failed with 0x%
08X\n”,status);
abort();
}
status= VIN_start(hVin);
if(!IEKC64_SUCCESS(status)){
LOG_printf(&myLOG,“ VIN_start()failed with 0x%
08X\n”,status);
abort();
}
VOUT模块的初始化由VOUT_open(&video Out,&hVout)函数完成[9~10].其中videoOut是IEKLIB 为配置视频输出功能提供的一个数据结构,可以对视频输出过程的参数进行具体的配置。如果初始化成功,程序会将新创建的VOUT对象句柄的指针返回给hVout.同时,函数将返回一个操作成功的状态。程序如下:
status= VOUT_open(&videoOut,&hVout);
if(!IEKC64_SUCCESS(status)){
LOG_printf(&myLOG,“ VOUT_open()failed with
0x%08X\n”,status);
abort();
}
status= VOUT_start(hVout);
if(!IEKC64_SUCCESS(status)){
LOG_printf(&myLOG,“ VOUT_start()failed with
0x%08X\n”,status);
abort();
}
3.4.3 数据采集及角度控制
通过数字倾角传感器采集转台的横摇角度信号,将传感器输出的角度值按照一定的比例运算后,输出控制量,控制横摇指示器图形。横摇角度的控制如图3所示。
使用ZC-TD-30S 采集转台的横摇角度时,需要对RS232接口进行初始化,包括波特率、接收数据缓冲区及发送数据缓冲区等。初始化后,就可以打开串口接收和发送数据,采集转台的横摇角度数据的主要程序如下:
if(dwCount= UART_getReadCount()>=1){
dwCount= UART_Read(pframe,1);
if(dwCount){
UART_write(pframe,1);
pframe++;
angle=*pframe;//取角度值
if(pframe>(MyCaptureBuffer+My_Capture_size))
pframe= MyCaptureBuffer;
}
}
横摇指示器指针斜率的变化与舰船的横摇角度相关,在没有接入传感器之前,对横摇指示器指针的控制是通过自定义的变量z来实现,程序如下:
for(z=30;z<=210;z++)
{
……
h=352;//水平像素
y1=120;//旋转轴心点
p=120-4*(120-z)/5;//光带右列中点
dx=240;//水平增量
dy=p-y1;//垂直增量
k=dy/dx;
……
}
在使用倾角传感器的输出角度值控制横摇指针时,要先将倾角传感器的输出值进行比例的换算。z 的取值范围是30~210,倾角传感器的输出角度值angle的范围是-150~150,表示的实际角度范围是-15°~+15°。从而,计算出angle与z的换算公式:
angle=5·(z-120)/3 (1)
3.4.4 双等离子显示器输出
DAM6416P提供了复合视频和VGA 两种输出接口,可以分时进行输出。复合视频接口输出正向的指针,VGA接口输出反向的指针。但由于视频信号的采集是由BT835视频Decoder完成的,而BT835输出的是4:2:2的YUV格式的图像数据,所以在使用VGA接口输出时,需要对图像数据进行格式转换。转换由函数void ycbcr422_rgb565完成,转换系数为coeff[5]={0×2543,0×3313,-0x0C8A,-0x1A04,0x408D}.
3.4.5 图形显示说明
在双等离子显示器组成的平面中始终显示一条相对大地水平的黄色光带,光带的边缘带有箭头,箭头与等离子显示器水平中线的夹角为当前舰船的摇摆角度,为了方便我们观测,该夹角用一矩形区域表示。当夹角在0°~5°之间时,该区域颜色为黄色;当夹角在5°~8°之间时,该区域有两种颜色组成,0°~5°之间仍是黄色,其余为绿色;当夹角大于8°时,该区域有三种颜色组成,0°~5°之间是黄色,5°~8°之间是绿色,大于8°的区域是红色。
4 结语
在实验室环境下,经试验平台安放在三自由度并联机构转台上,三自由度并联机构转台模拟舰船的摇摆姿态,其作用是作为横摇指示器的信号源。在测试及运行过程中,横摇指示器中心对称图形显示程序一直稳定可靠,并且很好地保证了系统的灵活性与实时性,而且双等离子显示器的作用与效果明显优于普通的LED显示模块,提高了显示图形的效果,具有很强的推广及实用价值。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。