DCS-WORLD 数据获取
任务:
获取DCS-World的姿态数据,发送到6自由度平台。
过程:
1.获取dcs-bios
https://github.com/DCSFlightpanels/dcs-bios
2.复制DCS-BIOS文件夹和Export.lua放到游戏指定位置:
用户/保存的游戏/DCS/Scripts/
3.根据数据输出协议获取数据。
以下部分翻译自 https://github.com/DCSFlightpanels/dcs-bios/blob/master/Scripts/DCS-BIOS/doc/developerguide.adoc
1.数据输出
驾驶舱当前状态使用二进制协议从 DCS 导出(参见下方 DCS-BIOS 导出协议)。此数据通过 UDP 发送到多播地址 239.255.50.10,环回接口 (127.0.0.1) 上的端口 5010。
如果不能或不想处理多播 UDP,您也可以通过编辑 BIOSConfig.lua 使 DCS-BIOS 将导出数据流的副本发送到单播地址。
还可以使用 socat 程序将串行端口连接到 DCS-BIOS 导入和导出流。
另一种方法是打开到端口 7778 的 TCP 连接。可以使用此连接向 DCS-BIOS 发送命令并接收导出数据。
2.DCS-BIOS 导出协议
每个驾驶舱状态都被编码为整数或字符串,并在 16 位地址空间内分配一个地址。
(1)整数值
整数值的位置由一个 16 位字地址定义,该地址指定数据所在的 16 位字的开始,一个 16 位掩码指定该字中的哪些位属于该值,以及一个移位值(也可以从掩码中推导出来)。
给定起始地址、掩码和移位值,以下伪 C 代码解码一个值:
char[] state;
unsigned int value = (((uint16_t*)state)[start_address/2] & mask) >> shift
对状态数据的更改被编码为对该地址空间的写访问,并以下列格式写入导出数据流:
<起始地址(16位)> <数据长度(16位)>数据
起始地址和数据长度总是偶数(在内部,DCS-BIOS 将数据视为 16 位整数列表)。这确保没有写访问部分更新整数值(整数可能占用不超过 16 位)。
所有整数值都以 litte-endian 字节顺序写入。
以下字节序列是从地址 0x1000 开始的四个字节的写访问示例:
0x00 0x10 0x04 0x00 0x41 0x2d 0x31 0x30
(2)字符串值
字符串的位置由它的 16 位起始地址和以字节为单位的长度定义(所有字符串值都有一个固定的最大长度,并且从 16 位对齐的地址开始)。
可以部分更新最大长度大于两个字符的字符串值。为避免不一致的中间状态,接收 DCS-BIOS 导出数据的应用程序应在下一个帧同步序列中应用对字符串值的更改(参见下一节)。
(3)同步顺序
DCS-BIOS 尝试每秒发送 30 次更新。
DCS-BIOS 将在每次更新开始时发送四个字节 0x55 0x55 0x55 0x55。如果字节序列 0x55 0x55 0x55 0x55 出现在单个写入访问中,DCS-BIOS 将通过将其分成两个单独的写入来避免这种情况。
3. 添加新的飞机模块
DCS-BIOS 中的导出模块。DCS-BIOS 包含几个导出模块,每个导出模块分配给一架或多架飞机,可以同时激活多个导出模块。
MetadataStart 和 MetadataEnd 模块始终处于活动状态,即使没有活动的飞机(例如,多人游戏中的旁观者模式)。
当 AircraftList.lua 中的任何飞机处于活动状态时,CommonData 模块始终处于活动状态。它导出高度、位置和航向等通用信息。
每个导出模块都在 lib 子目录中自己的文件中定义。
每个导出模块都由 BIOS.lua 中的 dofile(...) 行加载。
每个导出模块都需要 control-reference.html 中的 <script> 标记以显示在控件参考文档中。
最新文章
- DUILIB入门使用说明整理
- Hive官方手册翻译(Getting Started)
- NAND flash sub-pages
- 150925-周五不干活-HTML(CSS),Javascript
- Sublime Text 3 笔记
- ArcGIS Engine开发之旅03--ArcGIS Engine中的控件
- EasyMock使用说明
- 使用DS18B20设计温控系统
- parent.location.href和location.href区别
- C#主键类型选择
- 一句话绑定父函数的作用域this
- 利用vertical-align实现行内元素对齐
- Semaphore简介
- CSS布局 两列布局之单列定宽,单列自适应布局思路
- OO第三次博客总结
- 201772020113 李清华《面向对象程序设计(java)》第17周学习总结
- linux-阿里云仓库搭建-搭建本地仓库-yum
- 【htop】Linux CentOS 6.5下安装htop进程管理工具
- Django_基于模块的单例模式
- [UE4]蓝图转换成C++代码
热门文章
- 9.java单链表初学代码复现及一些不值一提的小问题(2)
- Springboot+thymeleaf结合Vue,通过thymeleaf给vue赋值解决Vue的SEO问题
- CentOS8安装pycharm报错【Can&#39;t connect to X11 window server using &#39;:0&#39; as the value of the DISPLAY variable. 】
- 静态变量设为non-public或者加final关键字
- 配置Centos8网络绑定
- django的注意事项
- tapdata问题
- 像MIUI一样做Zabbix二次开发(7)——问答
- C++11 mutex unique_lock condition_variable 互斥锁 条件变量
- css - 预编译less下,解决深度选择器失效问题,完成css样式修改