QQ登录

只需一步,快速开始

查看: 21318|回复: 7
打印 上一主题 下一主题

Flightgear接口系列_3_Flightgear支持的基本接口协议介绍

[复制链接]

主题

好友

5438

积分

版主

跳转到指定楼层
楼主
发表于 2014-5-4 21:43:00 |只看该作者 |倒序浏览
本帖最后由 zk_sima 于 2014-5-4 21:44 编辑

前面介绍了Flightgear接口系列_2_FGIO初始化过程
下面,来分析了基本的协议:

1. joyclient协议
实例:
--joyclient=socket,in,50,,5050,udp
       该命令表示flightgear需要支持joyclient协议,并通过socket进行io通信,其中flightgear只需要接收数据,频率为50,接收端口为5050,传输层协议为UDP
       注意:joyclient协议只支持io输入,即支持in,不支持out
该协议是用来操作/controls/flight/aileron和/controls/flight/elevator,即副翼和升降舵,输入时两个值都为int型,范围在0~4096;
2.jsclient协议
实例:
--jsclient=socket,in,60,,5050,udp –prop:/jsclient/axis[0]=”/controls/flight/aileron” –prop:/jsclient/axis[1]=” /controls/flight/elevator” –prop:/jsclient/axis[2]=”/controls/flight/rudder” –props:/jsclient/axis[3]=” /controls/engines/engine[0]/throttle”
其中socket:代表jsclient的io通信时通过网络接口socket,in:代表flightgear接收数据,60:代表采集数据的频率为60,5050:代表flightgear在端口5050上接收数据,udp:代表flightgear接收udp数据。即flightgear以频率60,通过udp协议在端口5050接收数据。
  接收的第一个数据用于控制副翼,对应属性:/controls/flight/aileron;接收的第二个数据用于控制升降舵,对应属性:/controls/flight/elevator;接收的第三个数据用于控制方向舵,对应属性:/controls/flight/rudder;接收的第四个数据用于控制第一个发动机油门,对应属性:/controls/engines/engine[0]/throttle。
3.native_fdm协议
实例:
--native-fdm=socket,out,100,127.0.0.1,5498,udp
其中socket代表:数据的输入输出时通过网络接口进行的;out代表:数据流为输出,方向为从flightgear到客户端;1代表:数据的发送频率为1HZ127.0.0.1代表:客户端的ip地址为127.0.0.1,即本地;5050代表:客户端的接收端口为5050udp代表:数据流是通过udp传输的;
该协议是用于输入输出飞机的动力学模型数据,在联飞、视景扩展等很多地方都会用到该协议。
该协议可能是使用的最多的协议,论坛上有大量的帖子讲到该协议,以及该协议的输入输出数据接口。
该协议的源码在native_fdm.hxx/native_fdm.cxx文件中,数据的结构在net_fdm.hxx/net_fdm.cxx中有定义。
论坛上关于该协议的输入输出实例用到的数据接口及其解析实际上就是net_fdm.hxx/net_fdm.cxx这两个文件,不多说,可以直接参照论坛中其它帖子或者直接在源码中把这两个文件拿来用。
4.generic协议
实例:
--generic=socket,out,1,127.0.0.1,5050,udp,my-generic
其中socket代表:数据的输入输出时通过网络接口进行的;out代表:数据流为输出,方向为从flightgear到客户端;1代表:数据的发送频率为1HZ127.0.0.1代表:客户端的ip地址为127.0.0.1,即本地;5050代表:客户端的接收端口为5050udp代表:数据流是通过udp传输的;my-generic代表:在$FG_ROOT/data/Protocol目录下存在my-generic.xml文件,该文件指明了数据传输的内容和方式。该实例中my-generic.xml文件内容如下:
<?xml version="1.0"?>
<PropertyList>
<generic>
<output>
  <binary_mode>true</binary_mode>
   <byte_order>host</byte_order>
   <chunk>
    <name>Pos.Lat</name>
    <type>double</type>
   <node>/position/latitude-deg</node>
   </chunk>
   <chunk>
    <name>Pos.Lon</name>
    <type>double</type>
   <node>/position/longitude-deg</node>
   </chunk>
   <chunk>
    <name>Pos.qnh</name>
    <type>double</type>
   <node>/position/altitude-ft</node>
   </chunk>
     
  </output>  
</generic>
</PropertyList>

其中output节点内的内容代表flightgear输出的内容,每个chunk节点中包含一个值对应flightgear内部的属性。
Genericflightgear最通用的一个接口,可以满足用于的基本定制需求,能让用户自定义的读写flightgear内部属性。

flightgear中还定义了其它的接口协议,不过目前我只接触上面的这些,尤其是generic协议。
其实协议本身的使用难点不在于协议格式如何,而是协议支持的属性有哪些。如果自定义数据输入输出的话,更需要关心输入输出的属性。
关于这些属性,flightgear的data/docs目录中给出了基本的属性,但是还有很多属性可能需要通过源码或其它方式来获取了。
后面有时间会介绍下如何修改flightgear,使flightgear支持自定义协议。

email: zk.sima@gmail.com
分享到: QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏3

主题

好友

77

积分

航院新生

沙发
发表于 2014-5-5 09:23:04 |只看该作者
看了之后,受益匪浅!
回复

使用道具 举报

主题

好友

16

积分

报考学院待录取

板凳
发表于 2015-1-5 16:47:27 |只看该作者
大神,学习了~~~~~~~~~~~
回复

使用道具 举报

主题

好友

10

积分

报考学院待录取

地板
发表于 2015-5-31 22:34:06 |只看该作者
好东西,学习了,感谢
回复

使用道具 举报

主题

好友

13

积分

报考学院待录取

5#
发表于 2016-3-31 18:31:46 |只看该作者
大牛啊,膜拜,虽然看不太懂
回复

使用道具 举报

主题

好友

78

积分

航院新生

6#
发表于 2017-5-2 14:03:54 |只看该作者
收益匪浅,继续学习。谢谢楼主
回复

使用道具 举报

主题

好友

14

积分

报考学院待录取

7#
发表于 2017-5-3 15:58:25 |只看该作者
入门的好贴,~~~~~~~~~~~~~~
回复

使用道具 举报

主题

好友

56

积分

航院新生

8#
发表于 2021-3-2 10:17:19 |只看该作者
谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入FG

本版积分规则

手机版|联系我们| FlightGear ( 吉ICP备19002044号-7 )

GMT+8, 2024-12-22 22:10

Powered by Discuz! X3.2

© 2001-2013 FlightGear Inc.

返回顶部