乐于分享
好东西不私藏

Tacview三维态势数据驱动软件

Tacview三维态势数据驱动软件

TacviewConnector-QT:基于 Qt 的 Tacview 实时遥测数据推送工具


1. 项目简介

TacviewConnector-QT是一款基于 C++/Qt 框架开发的桌面应用程序,其核心功能是将外部仿真系统的空战数据实时推送到回放客户端,使操作人员能够在 Tacview 中以三维视角实时观察仿真态势。

Tacview 是飞行模拟领域广泛使用的空战回放和分析工具,支持通过 ACMI(Air Combat Maneuvering Instrumentation)格式记录和回放飞行数据。本项目实现了 Tacview 的实时遥测协议(Real-Time Telemetry),通过 TCP 网络连接将仿真帧数据以 ACMI 文本格式流式推送给 Tacview 客户端,从而实现"边仿真、边回放"的实时态势展示效果。


2. 核心架构

项目采用经典的生产者-消费者模式,整体架构分为三层:

2.1 UI 层 — MainWindow

主窗口使用 Qt Widgets 构建(通过.ui文件设计),提供以下交互功能:

功能说明
服务器设置可配置监听端口(默认 42674)和帧间隔(默认 100ms),一键连接/断开
仿真控制开始、暂停/继续、停止仿真,实时显示当前帧号和仿真时间
实体数据表3 行 x 8 列表格,实时显示蓝方 F-35、红方 F-22、AIM-120C 导弹的名称、阵营、经纬度、高度和姿态角
状态指示以彩色圆点实时显示服务器和 Tacview 客户端的连接状态(灰/橙/绿)

2.2 仿真层 — SimWorker

SimWorker 继承QThread,在独立线程中运行仿真循环,不阻塞 UI。内置一套完整的演示场景,每帧按照时间线编排各种事件:

蓝方 F-35:持续飞行,正弦波模拟爬升/下降,周期性释放热诱弹

红方 F-22:持续飞行,反向正弦波模拟爬升/下降,周期性释放箔条弹,第 200 帧后开启雷达传感器

AIM-120C 导弹:第 101~201 帧从红方 F-22 位置发射并飞行,第 201 帧销毁

航路管理:红/蓝双方航路的添加、删除和随机重建

雷达威胁区:红方雷达传感器在第 200 帧后激活

仿真数据通过dataUpdated信号(跨线程安全传递)通知 UI 刷新,同时通过 API 调用将数据投递给 TacviewServer。

2.3 传输层 — TacviewServer

TacviewServer 是整个项目的核心,负责与 Tacview 客户端进行 TCP 通信,实现了完整的 Tacview 实时遥测协议:

协议握手流程:

服务端监听指定端口,等待 Tacview 客户端连接

客户端连接后,服务端发送握手标识:XtraLib.Stream.0\nTacview.RealTimeTelemetry.0\nhunter\n\0

客户端回复后,服务端发送 ACMI 文件头(FileType=text/acmi/tacview\nFileVersion=2.2\n)和参考时间

握手完成,帧定时器开始按固定间隔推送数据

数据推送机制:

TacviewServer 内部维护了多个待处理队列(QQueue),外部调用者通过以下 API 将数据投递到队列中:

帧定时器每帧按以下顺序处理数据:

  1. 处理实体删除请求

  2. 处理航路删除请求

  3. 处理传感器删除请求

  4. 构建时间戳头(RecordingTime+#帧时间

  5. 创建箔条弹对象(带随机位置散布和自动到期清理)

  6. 创建热诱弹对象(同上)

  7. 发送航路更新数据

  8. 发送传感器更新数据

  9. 发送实体位置更新/创建数据

  10. 发送带雷达属性的实体数据

  11. 清理到期的箔条弹/热诱弹对象

这种队列化的设计使得仿真线程和网络发送线程实现了松耦合,任何线程都可以安全地调用 API 投递数据。


3. 数据类型体系

项目在TacviewTypes.h中定义了完整的数据类型体系:

每种数据类型都提供了toString()/toStringUpdate()/toStringCreate()方法,可将自身序列化为 Tacview ACMI 文本格式。


4. 技术特性

特性说明
实时遥测协议完整实现 Tacview Real-Time Telemetry 协议,支持 TCP 连接、握手、ACMI 格式数据流
多线程架构UI 线程、仿真线程、网络发送通过信号/槽和原子变量协调,线程安全
队列化发送所有数据操作通过内部队列缓冲,由帧定时器统一处理,实现生产者-消费者解耦
箔条弹/热诱弹模拟支持创建带随机散布的箔条弹和热诱弹对象,自动按时清理
雷达威胁区支持为实体挂载雷达传感器属性(波束宽度、探测距离、方位等)
航路管理支持创建/删除/动态重建航路,航路点通过 Next 链接串联
可配置参数帧间隔、监听端口、箔条弹散布系数、持续时间、重绘模式均可调整
FD 版本兼容通过 FD_VERSION 编译宏支持与外部仿真系统的数据转换
跨平台基于 Qt 框架,支持 Windows / Linux 编译运行
C++17使用 C++17 标准,std::atomic 确保线程安全

5. 快速使用

使用 Qt Creator 打开TacviewConnector.pro

编译并运行程序

在界面上设置端口号(默认 42674)和帧间隔(默认 100ms)

点击"连接服务器"按钮

打开 Tacview 客户端,连接到localhost:42674

界面状态变为绿色 "Tacview 客户端已连接" 后,点击"开始仿真"

在 Tacview 中即可看到蓝方 F-35 和红方 F-22 的实时飞行态势


6. 扩展与集成

本项目设计为中间件角色,核心价值在于 TacviewServer 提供的 API 接口。实际使用时,可以将 SimWorker 替换为真实的外部仿真数据源:

只需按帧调用上述 API,即可将任意仿真系统的态势数据实时投射到 Tacview 中进行可视化。


7 适用场景

空战仿真态势展示:将仿真系统中的飞行器位置、姿态实时推送到 Tacview

战术训练回放:训练过程中实时记录,训练结束后可在 Tacview 中完整回放

雷达/传感器威胁可视化:将探测范围和波束方向投射到三维地图上

航路规划展示:动态显示飞行航路和航路点

武器效果模拟:箔条弹释放、热诱弹投放、导弹飞行轨迹的实时展示

欢迎关注我们的公众号,获取最新产品动态和技术资讯

1. 产品目录

2.桌面级飞行教学系统完成交付验收

3.航空宝固定翼无人机训练台系统

4.航空宝无人机虚拟体验训练系统

声      明:原创文章,欢迎联系获取转载授权,并注明来源航空宝;转载文章,目的在于传递更多信息,并不代表平台赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时联系我们更正或删除。文章版权归原作者及原出处所有 ,本平台只提供参考并不构成任何投资及应用建议。