APP下载

无人机全数字仿真的Flightgear三维显示

2018-09-10钱伟

无人机 2018年12期
关键词:动力学通讯传输

钱伟

本文介绍了无人机三维显示需求,介绍了Flightgear软件的功能和使用特点,建立了无人机数字仿真模型,并基于仿真模型和Flightgear软件,采用udp网络通讯协议建立了二者之间的连接,将无人机仿真数据实时传输到Flightgear软件,驱动Flightgear中无人机模型、场景模型等的实时运行,完成无人机的三维实时显示工作。

无人机在试飞之前需要对各个系统部件进行大量的测试和仿真,以检测系统的控制部分的极性、逻辑、量值等等,但是有时实验室测试并不直观,容易使人忽略重要的细节。例如,某型无人机在地面测试时一切正常,但在起飞后全自主飞行过程中,发生了一加自主飞行功能就向北飞的现象。发生这一现象的原因是程序员在设计航路时,将无人机所用磁航向传感器的单位弄错,弧度当成了角度。最终虽然依靠人工手动将其控制返航,依然表明了传统的测试存在盲区。如果能加入仿真的实时显示功能,将无人机沿着航路模拟飞行的经纬度高度、速度、姿态角、实时舵面值等,以以无人机三维运动的形式直观地反映出来,可使系统测试人员直接看到无人机能否完成航路、是否存在问题。Flightgear软件是一款开源飞行软件,内部集成了多款飞机模型数据,具有良好的人机界面,容易进行二次开发,并可接收外部传送过来的飞行动力学数据进行飞行,是无人机全数字仿真和地面测试阶段三维显示的较好选择。

无人机三维显示需求

目前我们的无人机无论是进行实验室仿真或外场飞行试验,一般都能拿到较为准确、实时性也较强的遥测数据,这些数据包括无人机系统飞行的各种信息,如GPS经纬度、高度等定位信息;无人机俯仰角、滚转角等姿态角信息;三轴加速度信息、舵面控制量及反馈量信息等等。按照以往经验,有了这些信息,如需对无人机的飞行性能进行分析,可以对各路信息分别汇总,绘出曲线,即能较直观地看出参数的数值走向和有无异常等。有时也需要视频信息,以记录那些测试数据测试不到的细节,则要另外增加价格昂贵的高清长焦摄像机,但摄像机也存在无法拍到或拍摄不清晰的问题,且有时从成百上千帧视频图像中也难以找到有用线索。

Flightgear软件介绍

自从David于1997年发布了Flightgear软件第一个跨平台版本之后,从最初比较粗糙的空气动力学模型开始,逐渐增加了更多的特性如环境特性、跑道特性、场景特效、屏幕显示、仪表台、导航塔台系统和网络互联以及串口互联等,也支持多机编队飞行和多人空中对战模式,更突出的是,此软件为开源软件,用户可以自行定义通讯协议、飞机模型、显示模式等,可以添加自己绘制的飞机模型进行飞行,动力学模型可采用系统自带也可自己编写,并通过matlab-simulink软件或者其他仿真软件与Flightgear进行实时交互,驱动飞机模型的飞行。该软件具有跨平台、多场景、开放性等特点,扩展性特别强,且对计算机和显卡的要求不高,一般计算机的集成显卡即可满足要求。Flightgear软件部分特点如下:

飞行动力学模型

Flightgear在3个主要的飞行动力学模型之间选择,可以添加新的动力学模型,甚至接入外部“专有的”飞行动力学模型:

JSBSim:JSBSim是一个开源飞行动力学模型(FDM)软件库,用于对飞行器的飞行动力学进行建模,用C + +编写。JSBSim可以在独立模式下批处理运行,飞机模型以XML文件配置,其中包括飞机的质量平衡、空气动力学、飞行控制属性、大气模型等。

YASim:YASim模型使用飞机的几何形状来生成基础飞行特性,可快速构建飞机行为,无需所有传统的气动试验数据,是一种粗略的近似,在得到接近现实的结果之前,需要进行很多调整。如果飞机有可靠的飞行数据,例如风洞数据,或者希望最终生成逼真的模拟,那么JSBSim是更好的方法。但是如果缺乏这样的数据,又知道飞机的几何形状,并且能够像真正的飞行员那样访问相同的飞行特性和极限,那么YASim提供了一种解决方案,这对于大多数仿真需求来说已经足够了。

UIUC:这个飞行动态模型是基于 LaRCsim,最初是美国国家宇航局写的。通过使用飞行器配置文件来扩充代码。.UIUC使用查表法来检索飞机部件的气动力和力矩系数,然后用这些系数来计算力和力矩作用在飞机上的总和。

全面而精确的地景风景数据库

数据库包含超过20,000个真实地景的世界机场。具有和现实相同的跑道、跑道标志、位置和进近灯光。也适用于较大的机场滑行道(在适当的时候甚至包括绿色中线灯)和倾斜跑道。定向机场照明能成功地改变强度及操作者相对方向变化。

准确和全面的天空模型

Flightgear软件可以实现精确的时间跟踪,并基于当前时间正确的放置太阳、月亮相对于当前地球坐标的位置。例如当前时间和地点是黎明的成都,那么太阳、月亮、星星和行星等在天空中都遵循正确的相对位置。这个建模考虑季节性影响,使用24小时制,甚至在北极圈以北,也放置太阳与月球的正确位置,给人以身临其境的感觉。

灵活和开放的飞机建模系统

Flightgear具有模拟各种飞行器的能力。可以模拟飞行1903年莱特飞行器、“扑翼”飞行器、飞艇、波音747和空客A320飞机,以及各种军用飞机等,Flightgear具有模拟几乎一切飞机的能力。Flightgear的飞行环境也很完备,飞机设计师可以打造逼真、具有完美动态效果、完全互动的3D驾驶舱。Flightgear还可以准确模拟许多仪器和系统故障,例如Gps故障、大氣传感器故障等。如果设置故障,则飞机会根据故障进行相应的动作。

低廉的硬件要求

Flightgear着眼现实仿真等方面的研究,但是软件本身对电脑硬件的需求并不强。如果你的电脑配置非常好,你会的到更加好的视觉效果,但是如果你的电脑配置一般,虽然视觉效果不会特别好,但是你同样可以得到一个非常流畅的飞行感受。

内部特征

Flightgear允许用户和飞机设计师通过内部和外部访问机制获取大量的内部状态变量。这些状态变量被组织成一个方便的层次“属性”树。使用属性树可以监视Flightgear内部任何状态变量。可以从外部脚本远程控制Flightgear的运行。可以仅通过编辑一个少数人可读的配置文件来创建模型动画、音效、动画工具和网络协议等任何能想到的情况。这是一个功能强大的系统,使Flightgear更加灵活、可配置、适应性更强。

通讯

通用输入/输出选项允许用户自己定义输入输出协议文件,选择采用串口或网络客户端。如果所有实例正在运行在同一帧率,可以得到非常好的互相之间的紧密同步显示。可以使用FlightGear在局域網进行多机联网通讯,练习编队飞行或对战仿真等。

无人机全数字仿真环境与Udp通讯

无人机全数字仿真

依据无人机风洞数据建立了无人机的数学模型,基于4阶龙格库塔方法对建立的无人机12阶微分方程进行解算,基于vsc++2010建立仿真和控制界面,基于Udp实现网络数据传输,实现无人机仿真模型与Flightgear软件的数据发送。无人机仿真原理如图1所示,曲线显示界面如图2所示,三维显示界面如图3所示。

Udp通讯传输

Udp通讯属于tcp/ip通讯协议的一种,支持大数据量的传输,比较适合对实时性要求不高强、对数据准确性要求不高但数据量很大的场合。我们的全数字仿真系统所用的三维显示对实时性要求并不特别强,但是数据量较大,因此采用Udp协议进行通讯传输。通信模块分为客户端和服务器端,客户端和服务器端可以部署于同一台机器,也可以部署到不同的机器上。在网络中进行通信至少需要一对套接字,其中之一运行于客户端,称之为Clientsocket;另一个运行于服务器端,称之为Serversocket。由于本机只向Flightgear传送数据,不接收其发回的数据,因此仅编写客户端程序即可。

Udp客户端程序在vc++2010中的设计流程为:

(1) 调用socket()方法创建一个数据报套接字(SOCK_DGRAM);

(2) 获取无人机的飞行数据,按照数据结构进行编组;

(3) 数据发送至服务器;

(4) 停止仿真时关闭数据报。

基于仿真系统的udp传输

软件部分发送代码如下:

Socket初始化:

voidctrlDlg::ToFlightgear()

{ //SOCKET初始化

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) {

return; }

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE(wsaData.wVersion ) != 1 ) {

WSACleanup( );

return; }

SOCKET sockClient=socket (AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.255");//

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons (5500);

数据编组:

FGNetDatafgbuf;

fgbuf.version=FG_NET_FDM_VERSION; // increment when data values change

fgbuf.padding=0; // padding

// Positions

fgbuf.longitude=show_y[num_showxy-1]/57.3; // geodetic (radians)

fgbuf.latitude=show_x[num_showxy-1]/57.3; // geodetic (radians)

fgbuf.altitude=-h; // above sea level (meters)

//fgbuf.altitude=300.0; // above sea level (meters)

fgbuf.agl=-h; // above ground level (meters)

fgbuf.phi=(float)phi; // roll (radians)

fgbuf.theta=(float)theta; // pitch (radians)

fgbuf.psi=(float)psi; // yaw or true heading (radians)

...}

数据发送:

sendto(sockClient,(char*)(&fgbuf),length,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

关闭socket:

closesocket(sockClient);

WSACleanup();

数据回放的三维显示

从上面的介绍可以看出,Flightgear软件可以通过Udp进行数据驱动。对于仿真时保存的数据或实际飞行过程生成的遥测数据,只要按照相关的通讯协议和相应的时间间隔传输到Flightgear,同样可以驱动Flightgear软件中飞机的三维显示,这里不再详细介绍。

Flightgear软件的通讯接口设置

Flightgear软件设置

通讯接口采用Udp协议,在Flightgear软件上的设置如图4所示。

其中,flightmodel界面的动力学模型设置为external,意为采用外部传过来的模型,而不采用软件自带的动力学模型;

传输协议界面,首先点击new,新建传输协议,然后依次将Protocol设置为nativefdm,Medium设置为socket,Direction设置为in,Hz取5,端口选择5500,选择UDP模式。按上述步骤设置完成后,Flightgear软件就准备就绪。点击run按钮进入运行界面,等待外部信息的传入。

接口協议

Udp协议需要按照一定的数据格式进行传输,共28个变量,408个字节长度。典型的传输变量见表1。这些变量能够满足三维显示的需求。如需对飞机座舱进行数据显示,还可以将东向、北向、天向速度、加速度以及三轴角速度等进行传输。由于我们的仿真为无人机仿真,不需要座舱显示,因此速度信息并未传输。为了直观,加入了舵面的显示,当无人机进行左右转弯或者爬升以及下滑时,可以清晰地看到舵面的动作。

结论

以往的影像数据多来自于摄像机,虽然摄像机足够高清,但当飞机飞行速度增加时,无法显示满足要求的高清影像,当需要观看动态实况时,由于缺少相应手段,只能对遥测数据逐个分析,不便于形成整体概念。相比以往外场飞行或飞行后缺少相应的三维影像的情况,仿真和回放数据能提供接近真实状态的实时影像。因此,从某种程度上来说,本文提供了一种额外的视景手段,通过三维实时软件,可以直观地看到飞机运行时的状态。

猜你喜欢

动力学通讯传输
防止蚊子叮咬的新方法
地铁SDH、OTN传输组网分析
广播电视信号传输的技术分析
低汽气比变换催化剂动力学研究
低汽气比变换催化剂动力学研究
浅谈垂直极化天线在地面数字电视传输中的应用
用动力学观点解决磁场常见问题的研究
4K传输
国内首个AR通讯应用浮出水面
国内首个AR通讯应用浮出水面