当前位置: 首页 > news >正文

利用XPlaneConnect从X-Plane内读写数据

开发步骤(C/C++)

在https://github.com/nasa/XPlaneConnect 下载XPlaneConnect插件和源代码。

将XPlaneConnect.zip插件解压并复制到X-Plane安装目录下的/Resources/plugins/目录,然后打开X-Plane。

创建一个C/C++工程,将XPlaneConnect-1.3-rc6.zip解压,将XPlaneConnect-1.3-rc6/C/src内的xplaneConnect.c和xplaneConnect.h这两个文件复制到C/C++工程目录。

利用xplaneConnect的openUDP函数新建一个udp通信。

利用xplaneConnect内的getPOSI、sendPOSI、getCTRL、sendPOSI、getDREF和sendDREF等函数与X-Plane进行数据读取或写入;利用sendCOMM可以向X-Plane发送指令(类似于快捷键)。

xpconnect下载1

图1.XPlaneConnect github仓库

xpconnect下载2

图2.XPlaneConnect 插件和源码下载

xpconnect下载3

图3.下载后的XPlaneConnect 插件和源码

xpconnect下载4

图4.XPlaneConnect 插件解压复制到xplane根目录下的/Resources/plugins/目录

xpconnect下载5

图5.XPlaneConnect.c和xplaneConnect.h这两个文件复制到C/C++工程目录

代码示例

#include <iostream>

#include "xplaneConnect.h"

int main(int argc, char* argv[])

{

//利用xplaneConnect自带的openUDP函数新建一个udp通信

XPCSocket client = openUDP("127.0.0.1");//"127.0.0.1"为XPlane所在电脑的ip

const int aircraftNum = 0;//X-Plane当前用户飞机为0,其他编号为AI飞机

while (1)

{

//利用getPOSI获取飞机位置、姿态和起落架状态,由于经纬度数据需要较高的数据精度,因此需要用double类型

//利用sendPOSI可以实现飞机位置、姿态和起落架状态的控制

//[Lat, Lon, Alt, Pitch, Roll, Yaw, Gear]

double posi[7];

int result = getPOSI(client, posi, aircraftNum);

if (result < 0) // Error in getPOSI

{

break;

}

//利用getCTRL获取飞机的升降舵、副翼、方向舵、油门杆、起落架、襟翼以及扰流板数据

//利用sendCTRL可以实现飞机升降舵、副翼、方向舵、油门杆、起落架、襟翼以及扰流板的控制

//[Elevator, Aileron, Rudder, Throttle, Gear, Flaps, Speed Brakes]

float ctrl[7];

result = getCTRL(client, ctrl, aircraftNum);

if (result < 0) // Error in getCTRL

{

break;

}

//设置X-Plane飞行仿真暂停/恢复

result = sendCOMM(client, "sim/operation/pause_toggle");

if (result < 0) // Error in sendCOMM

{

break;

}

//利用getDREF获取X-Plane飞行仿真是否暂停的状态

float simPaused[1] = { 0.0f }; //用于存放"sim/time/paused"的状态

int drefArraySizze = 1; //"sim/time/paused"接口的数组大小,该接口不是数组则为1

result = getDREF(client, "sim/time/paused", simPaused, &drefArraySizze);

if (result < 0) // Error in getDREF

{

break;

}

//设置X-Plane内的时间(祖鲁时间,协调世界时)

//sim/time/zulu_time_sec

float zuluTime = 9 * 60 * 60;//设置为早上9点(如果要设置本地时间,需要添加时差)

result = sendDREF(client, "sim/time/zulu_time_sec", &zuluTime, 1);

if (result < 0) // Error in sendDREF

{

break;

}

printf("Loc: (%4f, %4f, %4f) Aileron:%2f Elevator:%2f Rudder:%2f\n",

posi[0], posi[1], posi[2], ctrl[1], ctrl[0], ctrl[2]);

Sleep(100);

}

}

数组类型数据读写:

//设置X-Plane各风层风向

float windDir[13] = {0.0f};

result = sendDREF(client, "sim/weather/region/wind_speed_msc", windDir, 13);

if (result < 0) // Error in sendDREF

{

break;

}

xpconnect下载8

图6.数组类型数据接口示例

接口列表

X-Plane 指令列表(Command): https://siminnovations.com/xplane/command/index.php

X-Plane 数据读写接口(Datarefs): https://developer.x-plane.com/datarefs/#search-form

xpconnect下载1

图7.X-Plane 指令列表

xpconnect下载7

http://www.cnnetsun.cn/news/40673.html

相关文章:

  • DeepSeek-R1-Distill-Qwen-7B集群部署终极指南:轻松搞定AI推理服务
  • 风储调频在Matlab/Simulink中的探索:基于四机两区系统的实践
  • 基于Java Swing的猜数字小游戏(2)
  • 提升 Web 端 JavaScript 的可信度:WAICT 体系详解
  • Solon (可替换 SpringBoot)集成 Docker 实战:30分钟搞定轻量级应用容器化部署
  • 一次 React 项目 lock 文件冲突修复:从 Hook 报错到 Vite 配置优化
  • 记录一次USB虚拟网络问题排查
  • 学Simulink——基于高比例可再生能源渗透的复杂电网建模场景实例:大规模光伏并网对区域电网频率稳定影响研究
  • CANN Samples(十九):特色场景:机器人 AI 绘画 手写识别等
  • 毕设开源 深度学习YOLO交通路面缺陷检测系统(源码+论文)
  • 【URP】Unity[后处理]色彩调整ColorAdjustments
  • Flutter混合开发与WebView集成实战
  • 压缩空气储能和释能阶段模型,附相关文档文献。 建立了压缩空气储能系统中的压缩机、换热器、储气罐...
  • Profinet转Modbus TCP工业数据采集网关:实现1200PLC 与打标卡数据实时传输
  • Flutter 2025 国际化与本地化实战:从多语言支持到文化适配,打造真正全球化的用户体验
  • P1178 到天宫做客 题解
  • 2025年GEO优化机会与争议以及规范发展的必要性
  • 2026老年春晚怀化区域节目征集启动仪式在怀化学院举行
  • 【笔记篇】【硬件基础篇】电力电子元器件应用手册 阅读笔记(1)电阻器及其应用
  • 柠檬 软件测试之python全栈自动化测试工程师第25期
  • 为什么你的视觉AI项目总是耗时又低效?Florence-2-large-ft一站式解决方案
  • 基于php的微信小程序的学习交流平台系统(源码+lw+部署文档+讲解等)
  • springboot高校读书分享系统的设计与实现_34ur7fyk-
  • 如何快速解锁RouterOS无限权限:MikroTikPatch的终极指南
  • 测试工程师的增值型职业休假策略:从技术深耕到跨界突破
  • USART串口
  • SDET职业生涯中的关键决策点与路径选择
  • 第三方API密集型聚合服务的测试体系构建
  • System Informer:你的Windows系统管家,3大核心功能深度解析
  • 探索城市脉搏:解密共享单车数据背后的故事