一种Android系统下的雷达回波显示方法与流程

文档序号:14834122发布日期:2018-06-30 11:40阅读:777来源:国知局
一种Android系统下的雷达回波显示方法与流程

本发明涉及的是航海导航领域,特别涉及一种雷达视频图像显示方法。



背景技术:

船舶导航雷达用于探测海面上的冰山、礁石、船只、浮冰等各类物体,并可提供有效的目标方位及距离信息,从而使船舶避让各类障碍物,防止碰撞事故发生,是船艇航海必备的导航设备。现代船载导航雷达显示系统主要特点为数字化的信息处理、高效的信息展示、简单易用的人机交互方式,实现方式多为片上系统(System on Chip,SOC)平台或以ARM(Advanced RISC Machines)为核心的嵌入式平台。雷达显控终端作为雷达操作员与雷达系统间的重要桥梁,具备雷达视频图像的绘制、目标的识别与跟踪、船舶信息的显示等众多功能,提供了重要的导航信息。

现有的雷达回波显示方法主要有三种:一种是在Qt开发环境下用原生的视图框架开发显控界面,并结合FrameBuffer(帧缓存)技术操作显存来绘制雷达视频图像。第二种是使用图形用户界面(GraphicalUser Interface,GUI)技术开发雷达显控界面,结合支持硬件加速技术的图形接口完成雷达视频图像的绘制。第三种是采用数字信号处理(Digital Signal Processor,DSP)或ARM处理器解析雷达原始数据并结合基带信号板的雷达视频数据,将两者的图像数据融合处理显示。前2种方法对硬件有额外的要求,需要GPU支持硬件加速或Alpha混合渲染;第3种方法硬件设计复杂且难以维护升级。除此之外,上述方法开发的显控终端人机交互体验较差。



技术实现要素:

本发明的目的是在于解决上述三种方法的缺陷,提供一种Android系统下的雷达回波显示方法,拓展了雷达显控的应用平台,同时基于OpenGL技术实现了雷达图像的高效渲染。本发明所述一种Android系统下的雷达回波显示方法,包括以下步骤:

步骤一、在内存中构建从极坐标到直角坐标的映射表T。所述步骤一包含两个子步骤:

步骤一(一)、对于屏幕中每个点(x1,y1),计算出其对应的极坐标,并将这个点从极坐标到直角坐标的映射关系放入表L中;

步骤一(二)、遍历表L,将角度和半径作为键、对应直角坐标作为值的映射关系存入新的数据表T中;

步骤二、创建两个大小相等的二维纹理缓冲区F与B。

步骤三、将方位圈、距标圈、船艏线以点的形式更新在F中。

步骤四、接收并解析出雷达天线的回波数据,同时将该帧数据存入回波缓冲区中。

步骤五、用回波缓冲区中的数据更新B。该步骤包含四个子步骤:

步骤五(一)、检查回波缓冲区中的累计回波角度差是否大于等于给定分割角度,如果不是,则结束步骤五;

步骤五(二)、获得回波缓冲区中最后存入的两帧数据D1和D2,从D2中获取回波数据E和起始角度θ1,从D1中获取结束角度θ2;

步骤五(三)、对于屏幕上的每一个角度大于等于θ1小于θ2的点,在T中查找其直角坐标,并以数据E更新在B中;

步骤五(四)、从回波缓冲区中将D1和D2移除。

步骤六、在Android中利用OpenGL的纹理映射技术,渲染出雷达回波图像。该步骤包含六个子步骤:

步骤六(一)、在Android中分别创建GLSurfaceView和继承于GLSurfaceView.Renderer的自定义View对象和Renderer对象,同时设置渲染模式为脏渲染;

步骤六(二)、通过函数gl.glViewport(0,0,width,height)初始化视口。其中width为屏幕宽度,height为屏幕高度;

步骤六(三)、通过函数gl.glFrustumf(left,right,bottom,top,zNear,zFar)初始化平截头体,left为-0.5×width,right为0.5×width,bottom为-0.5×height,top为0.5×height,zNear为3,zFar为7;

步骤六(四)、通过函数gl.glMatrixMode(GL10.GL_MODELVIEW)设置投影模式。然后清除颜色缓冲区并加载单位矩阵;

步骤六(五)、通过函数gl.glGenTextures(2,ts,0)创建两个纹理,并分别于关联F和B,其中ts为保存纹理对象编号的数组;

步骤六(六)、通过函数gl.glEnable(GL10.GL_BLEND)开启纹理混合功能,并通过函数gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA)设置纹理混合方式;

步骤六(七)、通过函数gl.glBindTexture绑定纹理;

步骤六(八)、通过函数gl.glTexSubImage2D,用B和F中的数据更新纹理;

步骤六(九)、通过函数requestRender请求系统进行画面渲染。

有益效果

本发明提出一种Android系统下的雷达回波显示方法,通过在内存上创建纹理缓冲区模拟显存、使用OpenGL的多重纹理技术模拟多个图层等技术进行雷达回波图像的显示。相对于传统的雷达回波显示方法具有以下优点:(1)能够应用于Android系统上,从而实现对触屏的原生支持,同时拥有更好的人机交互体验。(2)本系统首先将需要高速刷新的雷达回波图像绘制在一个纹理中,然后将不需要高速刷新的方位圈、距标圈、船艏线等内容绘制在另一个纹理中。可以刷新部分纹理从而拥有较高的渲染效率。(3)目前通用的智能终端的显卡都能够支持OpenGL技术,因此不依赖于特定硬件。

附图说明

图1为雷达系统结构。

图2为雷达显控软件主界面。

图3为二次索引改进后的数据存储模型。

图4为回波图像显示框架图。

图5为一种Android系统下的雷达回波显示方法流程图。

图6为基于此方法的雷达回波绘制效果。

具体实施方案

下面结合附图进一步详细描述本发明的技术方案:

参照说明书附图1,本方法所在硬件环境如图所示,雷达天线将原始信号交由信号收发模块进行噪声抑制、杂波处理,随后将回波数据、时钟数据、船艏和方位数据交由显控终端进行显示。显控终端所处软件运行界面如附图2所示,显控界面由雷达图像显示区、船舶信息显示区、菜单区三部分组成。雷达图像显示区内主要有雷达回波图像、警戒区、AIS目标和航迹点等内容。附图6为基于此方法的雷达回波绘制效果。

步骤一、在内存中构建从极坐标到直角坐标的映射表T。存储结构如附图3所示,其中m为直角坐标点数量(边长为2048像素的正方形区域的像素点数量),该结构由两个一维数据表组成,索引表可通过r和θ查询出s和l,并通过s和l在直角坐标表中查到直角坐标集,该集合即为最终的查表结果。其中r和θ分别为需要查询的点的极坐标半径和角度,s和l分别为目标集合在直角坐标表中的起始位置和长度。所述步骤一包含两个子步骤:

步骤一(一)、创建一维链表数组L[keyIdx](0≤r≤MaxRng,0≤θ≤MaxDeg,其中MaxRng为最大显示半径,MaxDeg为最大量化角度,雷达图像显示区高度为2R,keyIdx代表极坐标下该点的一维索引值),其中keyIdx根据下式计算:

步骤一(二)、计算出该点直角坐标下的一维索引值valueIdx,并存入链表L[keyIdx]中;

步骤一(三)、对表L做存储结构的优化。首先初始化一个空的索引表I和一个空的直角坐标表T,并获得待优化的链表数组L;

步骤一(四)、对屏幕上每一个极坐标点在L中找到对应的链表S,并将S的大小和T的容量存入I中;

步骤一(五)、将S中所有元素放入T中。

步骤二、创建两个大小相等的二维纹理缓冲区F与B。在自定义Renderder对象中两个纹理缓冲区,大小设置为1024×1024×4Byte,一个缓冲区用于绘制雷达回波视频,另一个用来绘制AIS目标、导航路线等二次信息,并初始化显控系统UI背景色。后续只需要对纹理缓冲区进行操作即可完成图像绘制,与直接操作显存效果一致。

步骤三、将方位圈、距标圈、船艏线以点的形式更新在F中。

步骤四、接收并解析出雷达天线的回波数据,同时将该帧数据存入回波缓冲区中。

步骤五、用回波缓冲区中的数据更新B。该步骤包含四个子步骤:

步骤五(一)、检查回波缓冲区中的累计回波角度差是否大于等于给定分割角度,如果不是,则结束步骤五;

步骤五(二)、获得回波缓冲区中最后存入的两帧数据D1和D2,从D2中获取回波数据E和起始角度θ1,从D1中获取结束角度θ2;

步骤五(三)、对于屏幕上的每一个角度大于等于θ1小于θ2的点,在T中查找其直角坐标,并以数据E更新在B中;

步骤五(四)、从回波缓冲区中将D1和D2移除。

步骤六、构建渲染环境并在Android中利用OpenGL的纹理映射技术,渲染出雷达回波图像。附图4阐述了渲染环境的构建与纹理映射技术的应用,该步骤包含九个子步骤:

步骤六(一)、在Android中分别创建GLSurfaceView和继承于GLSurfaceView.Renderer的自定义View对象和Renderer(渲染器)对象,同时调用setRenderMode函数设置渲染模式为GLSurfaceView.RENDERMODE_WHEN_DIRTY;

步骤六(二)、通过函数gl.glViewport(0,0,1080,1080)初始化视口;

步骤六(三)、通过函数gl.glFrustumf(left,right,bottom,top,zNear,zFar)初始化平截头体。left为-540,right为540,bottom为-540,top为540,zNear为3,zFar为7;

步骤六(四)、通过函数gl.glMatrixMode(GL10.GL_MODELVIEW)设置投影模式,然后清除颜色缓冲区并加载单位矩阵;

步骤六(五)、通过函数gl.glGenTextures(2,ts,0)生成两个纹理编号,并分别于关联于F和B,其中ts为保存纹理对象编号的数组;

步骤六(六)、通过函数gl.glEnable(GL10.GL_BLEND)开启纹理混合功能,并通过函数gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA)设置纹理混合方式;

步骤六(七)、通过函数gl.glBindTexture绑定纹理;

步骤六(八)、通过函数gl.glTexSubImage2D,用B和F中的数据更新纹理;

步骤六(九)、通过函数requestRender请求系统进行画面渲染。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1