跳转至

UE4CtrlAPI 引擎控制

简介

简述:该文件定义了与 RflySim3D(UE4/UE5)通信的数据结构和控制接口,用于载具/物体状态查询、场景与相机控制、组件特效创建、攻防反馈及 SIL 数据交换。

在 RflySim 仿真平台中,UE4 提供高保真度的三维可视化与物理仿真环境。本模块封装了与 UE4 交互所需的全部数据协议结构,包括无人机位姿与碰撞数据请求(CoptReqData、reqVeCrashData)、物体状态查询(ObjReqData)、视觉传感器配置(VisionSensorReqNew、CameraData)以及 PX4 SIL 模型接口数据(PX4SILIntFloat)。通过这些结构体定义,开发者可在 Python 环境中精确构造与解析 UE4 通信报文,实现仿真场景中的传感器仿真、图像采集与硬件在环测试等高级功能。

快速开始

以下示例创建 UE 控制接口,将所有已打开的 RflySim3D 窗口切换到 Grasslands 地图,并等待地图加载完成。

参考例程:[RflySim安装路径]\RflySimAPIs\3.RflySim3DUE\0.ApiExps\e6_RflySim3DCtrlAPI\1.UECtrlPy

import UE4CtrlAPI as UE4CtrlAPI


ue = UE4CtrlAPI.UE4CtrlAPI()
ue.sendUE4Cmd("RflyChangeMapbyName Grasslands")
ue.waitForMapLoaded("Grasslands")
print("Grasslands 地图已加载")

环境与依赖

  • Python 环境:>= 3.8.10
  • 依赖库:atexit、contextlib、copy、ctrl.IpManager、ctypes、cv2、math、numpy、os、platform、select、socket、struct、subprocess、sys、threading、time、typing、xml.etree.ElementTree
  • 前置准备:调用此接口前,必须先启动 Unreal Engine 仿真环境并确保 RflySim3D 或 UE4 应用程序正在运行。

核心接口说明

该模块 UE4CtrlAPI.py 包含了配置变量、辅助函数及核心业务类。

全局常量与枚举定义

本节列出模块中所有可直接引用的全局常量和枚举定义。

独立常量

名称 值 说明
UE4CtrlAPI.UE4_COMPONENT_OFF 0 关闭组件。
UE4CtrlAPI.UE4_COMPONENT_ON 1 开启或创建组件。
UE4CtrlAPI.UE4_LASER_COMPONENT_TYPE 103 激光组件类型。
UE4CtrlAPI.UE4_LASER_MODE_TARGET_COPTER 1 锁定目标飞机的激光模式。
UE4CtrlAPI.UE4_LASER_MODE_FORWARD 2 向前发射的激光模式。

全局/独立函数

无


PX4SILIntFloat 类

输出到CopterSim DLL模型的SILints和SILFloats数据。该类封装了PX4仿真接口的整数和浮点数据传输结构,用于与CopterSim进行SIL(Software In the Loop)仿真数据交互。

数据结构定义:

struct PX4SILIntFloat{
    int checksum;          // 1234567897
    int CopterID;
    int inSILInts[8];      // 8个整数输入
    float inSILFLoats[20]; // 20个浮点数输入
};

__init__(iv=None)

功能说明:初始化PX4SILIntFloat实例,设置校验码、CopterID及整数/浮点数组数据。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv any 否 None 输入数据,用于初始化整数和浮点数组。若提供iterable,则前8个元素映射到inSILInts,接下来20个元素映射到inSILFLoats

返回值 (Returns):

  • PX4SILIntFloat 实例对象

异常 (Raises):

  • 无

reqVeCrashData 类

UE4 中无人机碰撞检测数据结构体,用于接收和存储来自 Unreal Engine 4 仿真环境的碰撞事件信息。该结构体包含了碰撞时刻的飞机状态、碰撞对象信息以及空间位置等完整数据,适用于碰撞分析、事故回放和安全验证等场景。

__init__(iv=None)

功能说明:初始化碰撞数据结构体实例。可根据传入的字节数据或同类实例进行初始化,若未提供参数则创建空结构体。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv bytes | reqVeCrashData 否 None 初始化数据,可为字节串或同类实例

返回值 (Returns):

  • reqVeCrashData 实例对象

异常 (Raises):

  • 无

CopyData(iv)

功能说明:从外部数据源复制碰撞数据到当前结构体实例。支持从字节串或同类实例中解析并复制所有字段数据。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv bytes | reqVeCrashData 是 - 数据源,可为字节串或同类实例

返回值 (Returns):

  • 无

异常 (Raises):

  • 无

示例:

from RflySimSDK.ue import reqVeCrashData

# 创建空结构体
crash_data = reqVeCrashData()

# 假设 raw_bytes 是从 UDP 接收到的原始数据
raw_bytes = b'...'  # 来自 UE4 的碰撞数据包
crash_data.CopyData(raw_bytes)

# 访问碰撞信息
print(f"碰撞飞机ID: {crash_data.copterID}")
print(f"碰撞类型: {crash_data.CrashType}")  # -2=地面, -1=静态物体, 0=无碰撞, >0=被碰飞机ID
print(f"碰撞位置: ({crash_data.CrashPos[0]}, {crash_data.CrashPos[1]}, {crash_data.CrashPos[2]})")

CoptReqData 类

用于存储无人机状态请求数据的结构体,包含飞机ID、位置、姿态、几何外框等信息,共80字节。主要用于与UE4引擎通信时传输无人机的完整状态数据。

__init__(iv=None)

功能说明:初始化 CoptReqData 实例,可选择性传入初始值进行数据填充。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv CoptReqData 否 None 用于初始化数据的源对象,若为 None 则创建空实例

返回值 (Returns):

  • CoptReqData 实例对象

异常 (Raises):

  • 无

示例:

# 创建空实例
data = CoptReqData()

# 基于现有数据创建副本
new_data = CoptReqData(existing_data)

CopyData(iv)

功能说明:将源对象的数据复制到当前实例,用于数据同步或备份。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv CoptReqData 是 - 数据源对象,其所有字段值将被复制到当前实例

返回值 (Returns):

  • 无

异常 (Raises):

  • 无

示例:

source = CoptReqData()
source.CopterID = 1
source.PosUE = [0.0, 0.0, 0.0]

target = CoptReqData()
target.CopyData(source)  # 将source的数据复制到target

CopyDataOld(iv)

功能说明:使用旧版格式将源对象的数据复制到当前实例,兼容历史版本的数据结构解析。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv CoptReqData 是 - 数据源对象,使用旧版格式进行字段映射和复制

返回值 (Returns):

  • 无

异常 (Raises):

  • 无

CombatReqData 类

固定长度的攻防状态快照,对应 296 字节 6i2d48i8d UDP 数据。一个数据包描述一架飞机及最多 8 个组件,不重复携带 CoptReqData 的位姿字段。

主要字段包括 CopterID、TeamID、ComponentCount、FriendlyFire、MaxHealth、CurrentHealth,以及按组件索引对齐的 ComponentID、ComponentTypeID、DamagePerHit、AttackFrequency、AttackRangeM、TargetCopterID 和 DamageCaused 数组。

__init__(iv=None)

功能说明:创建空攻防快照;传入已解包序列时立即调用 CopyData() 填充字段。校验码默认值为 1234567888,最大组件数为 8。

参数名 类型 是否必填 默认值 说明
iv Sequence | None 否 None struct.unpack() 得到的 64 字段序列。

返回值 (Returns):CombatReqData 实例

异常 (Raises):iv 字段数不是 64 时抛出 ValueError。


CopyData(iv)

功能说明:从 64 字段序列更新快照,并将 ComponentCount 限制在 0 至 8。所有组件数组均按固定 8 项复制,只有前 ComponentCount 项代表有效组件。

参数名 类型 是否必填 默认值 说明
iv Sequence 是 - 按 6i2d48i8d 解包后的字段序列。

返回值 (Returns):无

异常 (Raises):字段数不是 64 时抛出 ValueError。


ObjReqData 类

用于存储和传输 UE4 场景中物体的完整状态信息,包括位置、姿态、几何属性及元数据。该类对应 C 结构体的内存布局,常用于 RflySim 仿真系统中与 UE4 引擎的数据交互场景。

__init__(iv=None)

功能说明:初始化 ObjReqData 实例,可选择从现有数据复制初始化 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv ObjReqData / None 否 None 源数据对象,若为 None 则创建空实例

返回值 (Returns):

  • ObjReqData 实例对象

异常 (Raises):

  • 无

CopyData(iv)

功能说明:从源对象复制所有字段数据到当前实例(新版本格式) 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv ObjReqData 是 - 源数据对象

返回值 (Returns):

  • 无

异常 (Raises):

  • 无

CopyDataOld(iv)

功能说明:从源对象复制所有字段数据到当前实例(旧版本兼容格式) 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv ObjReqData 是 - 源数据对象

返回值 (Returns):

  • 无

异常 (Raises):

  • 无

示例:

# 创建空实例并填充数据
obj = ObjReqData()
obj.PosUE = [100.0, 200.0, 50.0]
obj.angEuler = [0.0, 0.0, 1.57]
obj.ObjName = b"TargetDrone\x00"

# 从现有对象复制创建新实例
obj_copy = ObjReqData(obj)
# 或使用 CopyData 方法
another_copy = ObjReqData()
another_copy.CopyData(obj)

VisionSensorReqNew 类

该类对应 C++ 结构体 VisionSensorReq,用于向 UE4 发送请求并设置相机参数。包含数据校验位、内存序号、传感器类型、目标飞机绑定、图像分辨率、传输协议、相机视场角、安装位置与姿态等完整配置字段。

__init__(iv=None)

功能说明:初始化视觉传感器请求对象,可选择从现有对象复制数据进行初始化。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv VisionSensorReqNew 否 None 用于初始化的源对象,若为 None 则创建默认参数的实例

返回值 (Returns):

  • VisionSensorReqNew 实例对象

异常 (Raises):

  • 无

示例:

# 创建默认配置的视觉传感器请求
sensor_req = VisionSensorReqNew()

# 基于现有实例创建副本
existing_req = VisionSensorReqNew()
new_req = VisionSensorReqNew(existing_req)

CopyData(iv)

功能说明:将指定视觉传感器请求对象的数据字段复制到当前实例。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv VisionSensorReqNew 是 - 源视觉传感器请求对象,从中复制所有配置数据

返回值 (Returns):

  • 无

异常 (Raises):

  • 无

示例:

# 创建两个实例
source_sensor = VisionSensorReqNew()
target_sensor = VisionSensorReqNew()

# 将 source_sensor 的数据复制到 target_sensor
target_sensor.CopyData(source_sensor)

CameraData 类

表示相机数据结构体,用于存储相机的元数据信息,包括相机序号、类型、分辨率、视场角、位置姿态、时间戳等信息。该结构体总大小为 72 字节。


__init__(iv=None)

功能说明:初始化相机数据对象 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv CameraData 否 None 用于拷贝数据的源对象,若为 None 则初始化默认值

返回值 (Returns):

  • CameraData 实例对象

异常 (Raises):

  • 无

CopyData(iv)

功能说明:从源对象拷贝数据到当前对象 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv CameraData 是 - 源数据对象,其字段值将被拷贝到当前对象

返回值 (Returns):

  • 无

异常 (Raises):

  • 无

示例:

cam1 = CameraData()
cam1.SeqID = 1
cam1.TypeID = 0
cam1.DataHeight = 480
cam1.DataWidth = 640

cam2 = CameraData()
cam2.CopyData(cam1)  # cam2 的字段值与 cam1 相同

CopyDataOld(iv)

功能说明:使用旧版本格式从源对象拷贝数据到当前对象 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
iv CameraData 是 - 源数据对象,使用旧版本格式进行数据拷贝

返回值 (Returns):

  • 无

异常 (Raises):

  • 无

UE4CtrlAPI 类

RflySim3D 场景控制与通信接口类。该类提供与 UE4/UE5 仿真环境的 UDP 通信能力,支持飞行器数据、对象数据、相机数据的传输与接收,以及场景控制指令的发送。

__init__(ip="127.0.0.1")

功能说明:初始化 UE4CtrlAPI 实例,建立与 RflySim3D 的通信连接。创建 UDP 套接字、初始化数据存储向量、设置控制标志,并为多线程消息处理准备事件机制。

参数列表 (Args):

参数名 类型 默认值 说明
ip str "127.0.0.1" 目标 PC 的 IP 地址,用于建立与 RflySim3D 的 UDP 通信连接

返回值 (Returns):无

异常 (Raises):无

sendUE4Cmd(cmd, windowID=-1)

功能说明:发送命令以控制 RflySim3D 的显示样式。可用的命令字符串形如 'RflyShowTextTime "txt" time',支持多种显示控制功能包括文本显示、地图切换、相机控制、车辆模型操作等。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
cmd 任意 是 无 命令字符串,详细命令格式见功能说明
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


fillList(data, inLen)

功能说明:内部辅助方法,用于填充列表数据。(无详细文档说明)

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
data 任意 是 无 待填充的数据
inLen 任意 是 无 目标长度

返回值 (Returns):无

异常 (Raises):无


sendUE4CmdNet(cmd)

功能说明:通过局域网向所有 RflySim3D 实例发送控制命令。使用多播地址 224.0.0.10:20009 进行网络广播,支持最多92字节的命令数据。命令类型会自动检查与转换:字符串会被编码为字节串,长度超过91字节会被截断。发送命令后,如果是 "RflyChangeMap" 命令会额外等待0.5秒以确保场景切换完成。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
cmd 任意 是 无 命令字符串或字节串,最大长度91字节

返回值 (Returns):无

异常 (Raises):无


sendUE4LabelID(CopterID=0, Txt='', fontSize=30, RGB=[255, 0, 0], windowID=-1)

功能说明:向 RflySim3D 发送标签ID显示命令,在指定飞机上显示文本标签。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
CopterID 任意 否 0 目标飞机ID
Txt 任意 否 "" 显示的文本内容
fontSize 任意 否 30 字体大小
RGB 任意 否 [255, 0, 0] 文本颜色 [R, G, B],范围0-255
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4LabelMsg(CopterID=0, Txt='', fontSize=30, RGB=[255, 0, 0], dispTime=0, dispFlag=-1, windowID=-1)

功能说明:向 RflySim3D 发送标签消息显示命令,支持更复杂的消息管理机制。消息显示行为由 dispFlag 和 dispTime 共同控制:当 dispFlag < 0 且 dispTime >= 0 时采用累加模式;dispFlag < 0 且 dispTime < 0 时清空所有消息;dispFlag = 0 且 dispTime >= 0 时更新第0行;1 <= dispFlag < 5 时更新对应行,dispTime < 0 会删除该消息;dispFlag 大于当前消息数时切换到累加模式。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
CopterID 任意 否 0 目标飞机ID,≤0表示所有飞机
Txt 任意 否 "" 显示的文本内容,最大120字节
fontSize 任意 否 30 字体大小
RGB 任意 否 [255, 0, 0] 文本颜色 [R, G, B],范围0-255
dispTime 任意 否 0 显示时间(秒),<0立刻消失,=0永久显示,>0指定秒后消失
dispFlag 任意 否 -1 显示标志,控制消息更新模式
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4Attatch(CopterIDs, AttatchIDs, AttatchTypes, windowID=-1)

功能说明:发送消息到 RflySim3D,将一个或多个飞机附加到其他物体上(最多支持25个飞机)。支持三种列表参数,每个列表最大长度为25。附加类型包括:0-正常模式,1-相对位置不相对姿态,2-相对位置+偏航(不相对俯仰和滚转),3-相对位置+全姿态(俯仰滚转偏航)。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
CopterIDs 任意 是 无 飞机ID列表,最大长度25
AttatchIDs 任意 是 无 目标附加对象ID列表,最大长度25
AttatchTypes 任意 是 无 附加类型列表,0-3,最大长度25
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


circle_traj(t, center=(0.0, 0.0), radius=1.0, W=5.0)

功能说明:生成圆形轨迹点,根据时间参数计算圆上的坐标位置。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
t float 是 无 时间(秒)
center 任意 否 (0.0, 0.0) 圆心坐标 (x_c, y_c)
radius float 否 1.0 半径(米)
W float 否 5.0 轨迹周期(秒),默认5秒一圈

返回值 (Returns):元组 (x, y),圆上的坐标点

异常 (Raises):无


sendUE4Pos(copterID=1, vehicleType=3, MotorRPMSMean=0, PosE=[0, 0, 0], AngEuler=[0, 0, 0], windowID=-1)

功能说明:向 RflySim3D 发送位置和姿态信息,用于创建新的3D模型或更新现有模型的状态。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID 任意 否 1 飞机ID
vehicleType 任意 否 3 载具类型
MotorRPMSMean 任意 否 0 电机平均转速
PosE 任意 否 [0, 0, 0] 地球坐标系位置 [x, y, z](米,NED)
AngEuler 任意 否 [0, 0, 0] 欧拉角 [roll, pitch, yaw](弧度)
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4Pos2Ground(copterID=1, vehicleType=3, MotorRPMSMean=0, PosE=[0, 0, 0], AngEuler=[0, 0, 0], windowID=-1)

功能说明:向 RflySim3D 发送位置和姿态信息,创建或更新3D模型,并确保模型始终贴合地面。使用 checksum = 1234567891 通知 UE4 生成始终贴合地面的物体。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID 任意 否 1 飞机ID
vehicleType 任意 否 3 载具类型
MotorRPMSMean 任意 否 0 电机平均转速
PosE 任意 否 [0, 0, 0] 地球坐标系位置 [x, y, z](米,NED)
AngEuler 任意 否 [0, 0, 0] 欧拉角 [roll, pitch, yaw](弧度)
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4Destroy(copterID, windowID=-1)

功能说明:向 RflySim3D 发送销毁指定飞机的命令。当 vehicleType == -3 时,根据指定 ID 删除对应的 Copter。使用 sendUE4PosNew 的发送逻辑。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID 任意 是 无 要销毁的飞机ID
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4PosScale(copterID=1, vehicleType=3, MotorRPMSMean=0, PosE=[0, 0, 0], AngEuler=[0, 0, 0], Scale=[1, 1, 1], windowID=-1)

功能说明:向 RflySim3D 发送位置、姿态和缩放信息,创建或更新3D模型,并支持修改模型缩放比例。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID 任意 否 1 飞机ID
vehicleType 任意 否 3 载具类型
MotorRPMSMean 任意 否 0 电机平均转速
PosE 任意 否 [0, 0, 0] 地球坐标系位置 [x, y, z](米,NED)
AngEuler 任意 否 [0, 0, 0] 欧拉角 [roll, pitch, yaw](弧度)
Scale 任意 否 [1, 1, 1] 缩放比例 [x, y, z]
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4PosScale2Ground(copterID=1, vehicleType=3, MotorRPMSMean=0, PosE=[0, 0, 0], AngEuler=[0, 0, 0], Scale=[1, 1, 1], windowID=-1)

功能说明:向 RflySim3D 发送位置、姿态和缩放信息,创建或更新3D模型,支持修改模型缩放比例,并确保模型始终贴合地面。使用 checksum = 1234567891 通知 UE4 生成始终贴合地面的物体。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID 任意 否 1 飞机ID
vehicleType 任意 否 3 载具类型
MotorRPMSMean 任意 否 0 电机平均转速
PosE 任意 否 [0, 0, 0] 地球坐标系位置 [x, y, z](米,NED)
AngEuler 任意 否 [0, 0, 0] 欧拉角 [roll, pitch, yaw](弧度)
Scale 任意 否 [1, 1, 1] 缩放比例 [x, y, z]
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4PosFull(copterID, vehicleType, MotorRPMS=[0] * 8, VelE=[0, 0, 0], PosE=[0, 0, 0], RateB=[0, 0, 0], AngEuler=[0, 0, 0], windowID=-1)

功能说明:向 RflySim3D 发送完整的位置、姿态和运动状态信息,用于创建新的3D模型或更新现有模型的完整状态。包含速度、角速度、电机转速等完整状态信息。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID 任意 是 无 飞机ID
vehicleType 任意 是 无 载具类型
MotorRPMS 任意 否 [0,0,0,0,0,0,0,0] 8个电机的转速(RPM)
VelE 任意 否 [0, 0, 0] 地球坐标系速度 [Vx, Vy, Vz](m/s,NED)
PosE 任意 否 [0, 0, 0] 地球坐标系位置 [x, y, z](m,NED)
RateB 任意 否 [0, 0, 0] 机体坐标系角速度 [p, q, r](rad/s)
AngEuler 任意 否 [0, 0, 0] 欧拉角 [roll, pitch, yaw](弧度)
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4ExtAct(copterID=1, ActExt=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], windowID=-1)

功能说明:向 RflySim3D 发送扩展动作数据,用于控制飞机的额外16个浮点参数。校验位为1234567894,包含运行时间戳和16个扩展参数。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID 任意 否 1 飞机ID
ActExt 任意 否 [0,...0](16个0) 16个扩展动作参数
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4PosSimple(copterID, vehicleType, PWMs, VelE, PosE, AngEuler, runnedTime=-1, windowID=-1)

功能说明:向 RflySim3D 发送简化的位置和姿态信息,包含时间戳和PWM控制信号。用于创建新的3D模型或更新现有模型的状态,相比完整版本参数更少,通信开销更小。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID 任意 是 无 飞机ID
vehicleType 任意 是 无 载具类型
PWMs 任意 是 无 8个PWM控制信号
VelE 任意 是 无 地球坐标系速度 [Vx, Vy, Vz](m/s,NED)
PosE 任意 是 无 地球坐标系位置 [x, y, z](m,NED)
AngEuler 任意 是 无 欧拉角 [roll, pitch, yaw](弧度)
runnedTime 任意 否 -1 运行时间戳(秒),-1表示使用当前时间
windowID 任意 否 -1 目标窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无

sendUE4PosNew(copterID=1, vehicleType=3, PosE=[0, 0, 0], AngEuler=[0, 0, 0], VelE=[0, 0, 0], PWMs=[0] * 8, runnedTime=-1, windowID=-1)

功能说明:向 RflySim3D 发送位置、姿态等信息,用于创建新的 3D 模型或更新已有模型的状态。该函数构造 SOut2SimulatorSimpleTime 结构体数据并通过 UDP 发送给 UE4。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 否 1 飞机/物体 ID
vehicleType int 否 3 载具类型,四旋翼为 3
PosE list[float] 否 [0, 0, 0] 东北天坐标系下的位置 [x, y, z],单位 m
AngEuler list[float] 否 [0, 0, 0] 欧拉角 [roll, pitch, yaw],单位 rad
VelE list[float] 否 [0, 0, 0] 东北天坐标系下的速度 [vx, vy, vz],单位 m/s
PWMs list[float] 否 [0] * 8 电机转速/ PWM 值,最多 8 个
runnedTime float 否 -1 当前时间戳,单位 s,-1 表示使用系统当前时间
windowID int 否 -1 目标 RflySim3D 窗口 ID,-1 表示广播到所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4PosScale100(copterID, vehicleType, PosE, AngEuler, MotorRPMSMean, Scale, isFitGround=False, windowID=-1)

功能说明:向 RflySim3D 批量发送 100 架飞机的位置、姿态、缩放等信息,用于一次性创建或更新 100 个 3D 模型。该函数构造 Multi3DData100New 结构体数据并通过 UDP 发送。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID list[int] 是 无 100 维飞机 ID 数组,从 1 到 100,0 表示不显示
vehicleType list[int] 是 无 100 维飞机类型数组,四旋翼为 3
PosE list[float] 是 无 300 维位置数组 [x1,y1,z1,x2,y2,z2,...],单位 m
AngEuler list[float] 是 无 300 维欧拉角数组 [r1,p1,y1,r2,p2,y2,...],单位 rad
MotorRPMSMean list[float] 是 无 100 维平均电机转速数组,单位 RPM
Scale list[int] 是 无 300 维缩放数组 [sx1,sy1,sz1,sx2,sy2,sz2,...],值为实际尺寸*100
isFitGround bool 否 False 是否使飞机始终贴合地面,True 时校验位为 1234567891
windowID int 否 -1 目标 RflySim3D 窗口 ID,-1 表示广播到所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4PosScalePwm20(copterID, vehicleType, PosE, AngEuler, Scale, PWMs, isFitGround=False, windowID=-1)

功能说明:向 RflySim3D 批量发送 20 架飞机的位置、姿态、缩放及 PWM 等信息,用于一次性创建或更新 20 个 3D 模型。该函数构造 Multi3DData2New 结构体数据并通过 UDP 发送。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID list[int] 是 无 20 维飞机 ID 数组,从 1 到 20,0 表示不显示
vehicleType list[int] 是 无 20 维飞机类型数组,四旋翼为 3
PosE list[float] 是 无 60 维位置数组 [x1,y1,z1,x2,y2,z2,...],单位 m
AngEuler list[float] 是 无 60 维欧拉角数组 [r1,p1,y1,r2,p2,y2,...],单位 rad
Scale list[int] 是 无 60 维缩放数组 [sx1,sy1,sz1,sx2,sy2,sz2,...],值为实际尺寸*100
PWMs list[float] 是 无 160 维 PWM/电机转速数组,对应 20 个飞机各 8 个电机,单位 RPM
isFitGround bool 否 False 是否使飞机始终贴合地面,True 时校验位为 1234567891
windowID int 否 -1 目标 RflySim3D 窗口 ID,-1 表示广播到所有窗口

返回值 (Returns):无

异常 (Raises):无


getUE4Pos(CopterID=1)

功能说明:获取指定飞机在 UE4 中的位置数据。该方法从内部数据缓存中查询并返回指定 CopterID 的位置信息。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
CopterID int 否 1 目标飞机 ID

返回值 (Returns):指定飞机的位置数据,具体格式取决于内部数据结构的定义

异常 (Raises):无


getUE4Data(CopterID=1)

功能说明:获取指定飞机在 UE4 中的完整数据。该方法从内部数据缓存中查询并返回指定 CopterID 的所有相关数据,比 getUE4Pos 返回更完整的信息。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
CopterID int 否 1 目标飞机 ID

返回值 (Returns):指定飞机的完整数据,具体格式取决于内部数据结构的定义

异常 (Raises):无


initUE4MsgRec()

功能说明:初始化从 UE4 接收 UDP 数据的监听机制。当前主要用于监听碰撞数据(crash data),创建 UDP 接收线程并开始监听指定端口的数据。

参数列表 (Args):无参数

返回值 (Returns):无

异常 (Raises):无


endUE4MsgRec()

功能说明:结束 UE4 消息监听。停止 UDP 接收线程,清理相关资源,终止 initUE4MsgRec 启动的消息监听机制。

参数列表 (Args):无参数

返回值 (Returns):无

异常 (Raises):无


UE4MsgRecLoop()

功能说明:UE4 消息监听死循环处理函数。监听 224.0.0.10:20006 以及本地 20006 端口,处理 RflySim3D 或 CopterSim 返回的消息。共支持 6 种消息类型:

  1. CopterSimCrash(12 字节):碰撞检测数据,RflySim3D 按 P 键开启碰撞检测模式后,发生碰撞时返回
  2. PX4SILIntFloat(120 字节):包含 checksum、CopterID、整型数组和浮点数组的复合数据结构
  3. reqVeCrashData(160 字节):完整的飞机状态数据,包含位置、速度、姿态、碰撞信息等
  4. CameraData(56 字节):相机数据,接收后存放在 self.CamDataVect 中
  5. CoptReqData(64 字节):带 copter_id 的目标数据,接收后存放在 self.CoptDataVect 中
  6. ObjReqData(96 字节):场景中自带物体的数据,接收后存放在 self.ObjDataVect 中

接收到的数据可使用 getCamCoptObj 函数进行获取。

参数列表 (Args):无参数

返回值 (Returns):无

异常 (Raises):无


getCamCoptObj(type_id=1, objName=1)

功能说明:根据类型和名称获取相机、目标或物体的数据。根据 type_id 不同,objName 的含义也不同:

  • type=0 表示相机,objName 对应相机的 seqID
  • type=1 表示手动创建带 copter_id 的目标,objName 对应 CopterID
  • type=2 表示场景中自带的物体,objName 对应物体名称(字符串)

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
type_id int 否 1 请求类型:0=相机,1=带copter_id的目标,2=场景自带物体
objName int/str 否 1 目标标识:相机时为seqID,目标时为CopterID,物体时为名称字符串

返回值 (Returns):对应类型的数据对象,具体格式取决于 type_id

异常 (Raises):无


sendRflyShowTextTime(txt, time)

功能说明:向 RflySim3D 发送显示文本和时间的指令,用于在仿真环境中显示特定文本信息并指定显示时长。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
txt str 是 无 需要显示的文本内容
time float 是 无 文本显示持续时间,单位秒

返回值 (Returns):无

异常 (Raises):

异常类型 说明
TypeError 参数类型错误时抛出
ValueError 参数值不合法时抛出

reqCamCoptObj(type_id=1, objName=1, windowID=0)

功能说明:向 RflySim3D 请求相机、带 copter_id 的目标或场景中自带物体的数据。根据 type_id 不同,objName 的含义不同:

  • type=0 表示相机,objName 对应相机的 seqID
  • type=1 表示手动创建带 copter_id 的目标,objName 对应 CopterID
  • type=2 表示场景中自带的物体,objName 对应物体名称(字符串)

内部调用 RflyReqObjData(int opFlag, FString objName, FString colorflag) 函数命令,其中 opFlag:0=创建相机,1=创建 copter_id 对应的目标,2=创建物体。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
type_id int 否 1 请求类型:0=相机,1=带copter_id的目标,2=场景自带物体
objName int/str 否 1 目标标识:相机时为seqID,目标时为CopterID,物体时为名称字符串
windowID int 否 0 目标 RflySim3D 窗口 ID,默认 0 号窗口

返回值 (Returns):无

异常 (Raises):无


reqCam(SeqIDList=[0], windowID=0)

功能说明:向 RflySim3D 请求指定相机的数据。发送请求后,RflySim3D 会定时返回 CameraData 结构体数据,接收后存放在 self.CamDataVect 中,可使用 getCamCoptObj 获取。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
SeqIDList list[int] 否 [0] 相机的序列 ID 列表
windowID int 否 0 目标 RflySim3D 窗口 ID,默认 0 号窗口

返回值 (Returns):无

异常 (Raises):无


reqCopt(CopterIDList=[0], windowID=0)

功能说明:向 RflySim3D 请求指定带 copter_id 目标的数据。发送请求后,RflySim3D 会定时返回 CoptReqData 结构体数据,接收后存放在 self.CoptDataVect 中,可使用 getCamCoptObj 获取。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
CopterIDList list[int] 否 [0] copter_id 的 ID 列表
windowID int 否 0 目标 RflySim3D 窗口 ID,默认 0 号窗口

返回值 (Returns):无

异常 (Raises):无


reqObj(ObjNameList=[''], windowID=0)

功能说明:向 RflySim3D 请求场景中自带物体的数据。发送请求后,RflySim3D 会定时返回 ObjReqData 结构体数据,接收后存放在 self.ObjDataVect 中,可使用 getCamCoptObj 获取。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
ObjNameList list[str] 否 [''] 物体名称的列表
windowID int 否 0 目标 RflySim3D 窗口 ID,默认 0 号窗口

返回值 (Returns):无

异常 (Raises):无


SetUE4RadianceValue(UEObjectName, windows=-1)

功能说明:设置 UE4 中指定物体的辐射度/亮度值。用于调整场景中物体的光照或发光效果。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
UEObjectName str 是 无 UE4 场景中物体的名称
windows int 否 -1 目标 RflySim3D 窗口 ID,-1 表示广播到所有窗口

返回值 (Returns):无

异常 (Raises):无

SetUE4RadianceValue__All(windows=-1)

功能说明:设置所有窗口的辐射值/亮度值

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
windows int 否 -1 窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4SetStencilValueByActorName(Actorname, StencilValue, is_name_regex=False, windowID=-1)

功能说明:通过Actor名称设置场景的Stencil值(模板缓冲区值),用于后期处理中的遮罩或轮廓提取

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
Actorname str 是 None Actor名称
StencilValue int 是 None Stencil值(0-255)
is_name_regex bool 否 False 是否使用正则表达式匹配名称
windowID int 否 -1 窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4SetStencilValueByMeshComponentName(Meshname, StencilValue, is_name_regex=False, windowID=-1)

功能说明:通过网格组件名称设置场景的Stencil值,用于后期处理中的遮罩或轮廓提取

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
Meshname str 是 None 网格组件名称
StencilValue int 是 None Stencil值(0-255)
is_name_regex bool 否 False 是否使用正则表达式匹配名称
windowID int 否 -1 窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4SetStencilValueByCopterID(CopterID, StencilValue, windowID=-1)

功能说明:通过CopterID(无人机ID)设置对应Actor的Stencil值,用于后期处理中的遮罩或轮廓提取

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
CopterID int 是 None 无人机ID
StencilValue int 是 None Stencil值(0-255)
windowID int 否 -1 窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4VariableMessage(copterID, vehicleType, settingType, pointIndex, vehicleSetting, messageType, messageDatas, windowID=-1)

功能说明:发送可变长度的管道/线路消息,用于在UE4中创建或修改管道、线路等可视化对象。支持创建、修改、删除等操作类型,可设置管道半径、透明度、颜色等属性。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 对象ID,用于标识唯一的管道/线路对象
vehicleType int 是 None 对象类型(ClassID)
settingType int 是 None 编辑类型:0=新增,1=修改,2=删除
pointIndex list 是 None 点位编号数组,-1表示全部,0表示不修改,其他表示对应点位
vehicleSetting list 是 None 参数设置,16位数组:[半径(m), 透明度, 自发光强度, 颜色R, G, B, A, 是否显示UI, ...],-1表示沿用原数据,-2表示使用默认数据
messageType int 是 None 消息类型:0=unknown, 1=int32, 2=Float, 3=String, 4=Vector2D, 5=Vector3D
messageDatas list 是 None 消息内容数组,坐标信息单位为米
windowID int 否 -1 窗口ID,-1表示所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4CreatePipelineMsg(copterID, settingParam, messageDatas)

功能说明:发送创建管道消息,在UE4中创建新的管道/线路对象

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
settingParam list 是 None 管道参数设置数组
messageDatas list 是 None 管道点位坐标数据

返回值 (Returns):无

异常 (Raises):无


sendUE4CoverPipelineMsg(copterID, settingParam, messageDatas)

功能说明:发送覆盖管道消息,用新的数据完全覆盖已有的管道/线路对象

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
settingParam list 是 None 管道参数设置数组
messageDatas list 是 None 管道点位坐标数据

返回值 (Returns):无

异常 (Raises):无


sendUE4AddPointToPipelineMsg(copterID, messageDatas)

功能说明:发送添加点位到管道消息,向已有的管道/线路追加新的点位

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
messageDatas list 是 None 要追加的点位坐标数据

返回值 (Returns):无

异常 (Raises):无


sendUE4DeletePointMsg(copterID, pointIndexs)

功能说明:发送删除管道点位消息,删除指定管道中的特定点位

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
pointIndexs list 是 None 要删除的点位索引数组

返回值 (Returns):无

异常 (Raises):无


sendUE4SetPipelineScaleMsg(copterID, pointIndexs, size)

功能说明:发送设置管道粗细消息,修改指定点位的管道半径/粗细

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
pointIndexs list 是 None 要设置的点位索引数组,-1表示全部
size float 是 None 管道半径,单位为米

返回值 (Returns):无

异常 (Raises):无


sendUE4SetPipelineDiaphaneityMsg(copterID, pointIndexs, diaphaneity)

功能说明:发送设置管道透明度消息,修改指定点位的管道材质透明度

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
pointIndexs list 是 None 要设置的点位索引数组,-1表示全部
diaphaneity float 是 None 透明度值,范围通常为0-1

返回值 (Returns):无

异常 (Raises):无


sendUE4SetPipelineLightMsg(copterID, pointIndexs, light)

功能说明:发送设置管道自发光强度消息,修改指定点位的管道自发光效果

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
pointIndexs list 是 None 要设置的点位索引数组,-1表示全部
light float 是 None 自发光强度值

返回值 (Returns):无

异常 (Raises):无


sendUE4SetPipelineColorMsg(copterID, pointIndexs, Color_R, Color_G, Color_B, Color_A)

功能说明:发送设置管道颜色消息,修改指定点位的管道材质颜色(RGBA)

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
pointIndexs list 是 None 要设置的点位索引数组,-1表示全部
Color_R float 是 None 红色通道值(0-1或0-255)
Color_G float 是 None 绿色通道值(0-1或0-255)
Color_B float 是 None 蓝色通道值(0-1或0-255)
Color_A float 是 None Alpha通道值(0-1或0-255)

返回值 (Returns):无

异常 (Raises):无


sendUE4SetPipelinePosMsg(copterID, pointIndexs, messageDatas)

功能说明:发送设置管道点位位置消息,修改指定点位的空间坐标位置

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道对象ID
pointIndexs list 是 None 要设置的点位索引数组
messageDatas list 是 None 新的点位坐标数据,单位为米

返回值 (Returns):无

异常 (Raises):无


sendUE4SetWidgetVisble(copterID, isShowUI)

功能说明:发送设置控件可见性消息,控制管道/线路相关的UI控件显示或隐藏

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 None 管道/控件对象ID
isShowUI bool 是 None 是否显示UI控件,True为显示,False为隐藏

返回值 (Returns):无

异常 (Raises):无

sendUE4RobotExtAct(copterID=1, ActExt=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], windowID=-1)

功能说明:向 UE4 仿真环境发送机器狗(机器人)扩展动作控制指令。通过 TypeMask 位掩码控制各控制项的启用状态,支持动作命令、避障设置、目标位置、姿态控制、速度向量等多种控制模式。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 否 1 机器狗的 CopterID 标识
ActExt list[float] 否 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 扩展动作参数数组,共16个元素:
0.TypeMask(位掩码)
1.机器狗动作命令(1起立,2跳跃等)
2.避障半径
3-5.目的地位置x,y,z
6-8.机器狗自身Roll,Pitch,Yaw
9-11.机器狗前进向量X,Y,Z
12.机器狗速度设置
13.使用的坐标系(1:NED,2:FRD)
windowID int 否 -1 目标窗口ID,-1表示发送到所有窗口

返回值 (Returns):无

异常 (Raises):无


sendUE4MassMovement(robotDogID, childUAVID, isCombined)

功能说明:发送机器狗与无人机的组合/分离控制指令,用于实现机器狗搭载无人机的协同运动控制。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
robotDogID int 是 - 机器狗的ID标识
childUAVID int 是 - 子无人机(被搭载)的ID标识
isCombined bool/int 是 - 是否组合状态,True/1表示组合,False/0表示分离

返回值 (Returns):无

异常 (Raises):无


sendDogPosENoAltYaw(copterID, pos_x, pos_y, yaw)

功能说明:发送机器狗的水平位置(XY平面)和偏航角控制指令,高度保持不变。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 - 机器狗的CopterID
pos_x float 是 - 目标位置X坐标(ENU坐标系,单位:米)
pos_y float 是 - 目标位置Y坐标(ENU坐标系,单位:米)
yaw float 是 - 目标偏航角(单位:弧度)

返回值 (Returns):无

异常 (Raises):无


sendDogPosENoAlt(copterID, pos_x, pos_y)

功能说明:发送机器狗的水平位置(XY平面)控制指令,高度和偏航角保持不变。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 - 机器狗的CopterID
pos_x float 是 - 目标位置X坐标(ENU坐标系,单位:米)
pos_y float 是 - 目标位置Y坐标(ENU坐标系,单位:米)

返回值 (Returns):无

异常 (Raises):无


sendDogRateNoAltYaw(copterID, yaw_rate, speed_x, speed_y, axis)

功能说明:发送机器狗的速率控制指令(偏航角速率 + 水平速度),高度保持不变。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 - 机器狗的CopterID
yaw_rate float 是 - 偏航角速率(单位:弧度/秒)
speed_x float 是 - X方向速度(单位:米/秒)
speed_y float 是 - Y方向速度(单位:米/秒)
axis int 是 - 坐标系选择(1: NED, 2: FRD/机体坐标系)

返回值 (Returns):无

异常 (Raises):无


sendDogVelENoAltYaw(copterID, yaw, speed_x, speed_y, axis)

功能说明:发送机器狗的速度和前馈偏航角控制指令,高度保持不变。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 - 机器狗的CopterID
yaw float 是 - 目标偏航角(单位:弧度)
speed_x float 是 - X方向速度(单位:米/秒)
speed_y float 是 - Y方向速度(单位:米/秒)
axis int 是 - 坐标系选择(1: NED, 2: FRD/机体坐标系)

返回值 (Returns):无

异常 (Raises):无


sendDogVelENoAlt(copterID, speed_x, speed_y, axis)

功能说明:发送机器狗的水平速度控制指令,高度和偏航角保持不变。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 - 机器狗的CopterID
speed_x float 是 - X方向速度(单位:米/秒)
speed_y float 是 - Y方向速度(单位:米/秒)
axis int 是 - 坐标系选择(1: NED, 2: FRD/机体坐标系)

返回值 (Returns):无

异常 (Raises):无


sendUE4DogSpeed(copterID, speed)

功能说明:发送机器狗的运动速度标量设置指令。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 - 机器狗的CopterID
speed float 是 - 目标速度值(单位:米/秒)

返回值 (Returns):无

异常 (Raises):无


sendUE4DogObstacleAvoidance(copterID, radius)

功能说明:发送机器狗的避障半径设置指令,启用或禁用自主避障功能。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 - 机器狗的CopterID
radius float 是 - 避障半径(单位:米),小于0时关闭避障,默认0.05

返回值 (Returns):无

异常 (Raises):无


sendUE4DogPlayAction(copterID, actionNum)

功能说明:发送机器狗的预设动作播放指令,触发特定的行为动作。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
copterID int 是 - 机器狗的CopterID
actionNum int 是 - 动作编号,可选值:
1:Damp, 2:BalanceStand, 3:StopMove, 4:PStandUp, 5:StandDown,
6:RecoveryStand, 7:Sit, 8:RiseSit, 9:SwitchGait, 10:BodyHeight,
11:FootRaiseHeight, 12:SpeedLevel, 13:Hello, 14:Stretch, 15:SwitchJoystick,
16:ContinuousGait, 17:Wallow, 18:Pose, 19:Scrape, 20:FrontFlip,
21:FrontJump, 22:FrontPounce, 23:Dance

返回值 (Returns):无

异常 (Raises):无


startMulticastListener()

功能说明:启动组播监听器,用于接收来自 UE4 仿真环境的组播数据。

参数列表 (Args):无参数

返回值 (Returns):无

异常 (Raises):无


stopMulticastListener()

功能说明:停止组播监听器,终止接收来自 UE4 仿真环境的组播数据。

参数列表 (Args):无参数

返回值 (Returns):无

异常 (Raises):无


getRflyStatusMap()

功能说明:获取 RflySim 仿真状态映射表,包含当前仿真的运行状态和相关信息。

参数列表 (Args):无参数

返回值 (Returns):返回仿真状态映射字典,键值对形式存储各类状态信息。

异常 (Raises):无


getRflyIP(user)

功能说明:获取指定用户的 RflySim 仿真 IP 地址信息。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
user str 是 - 用户名标识

返回值 (Returns):返回指定用户对应的 IP 地址字符串。

异常 (Raises):无


getRflyStartTime(user)

功能说明:获取指定用户的 RflySim 仿真启动时间。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
user str 是 - 用户名标识

返回值 (Returns):返回仿真启动时间戳(单位:秒)。

异常 (Raises):无

getRflyMapName(user)

功能说明:获取指定用户的RflySim地图名称。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
user Any 是 - 目标用户标识

返回值 (Returns):地图名称 异常 (Raises):无


getRflyHeartbeat(user)

功能说明:获取指定用户的RflySim心跳状态。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
user Any 是 - 目标用户标识

返回值 (Returns):心跳状态 异常 (Raises):无


getLocalUserName()

功能说明:获取本地用户名。 参数列表 (Args):无参数 返回值 (Returns):本地用户名 异常 (Raises):无


getCurIP()

功能说明:获取当前IP地址。 参数列表 (Args):无参数 返回值 (Returns):当前IP地址 异常 (Raises):无


getCurMapName()

功能说明:获取当前地图名称。 参数列表 (Args):无参数 返回值 (Returns):当前地图名称 异常 (Raises):无


waitForMapLoaded(target_map, timeout_s=60, poll_s=0.5, stable_count=3)

功能说明:轮询本机最新组播状态,等待 CurrentMap 等于目标地图且 UdpRecvState == 4。只有收到不同心跳计数的连续就绪状态才累加稳定次数,达到 stable_count 后返回。

参数名 类型 默认值 说明
target_map str - 期望加载完成的地图名称。
timeout_s float 60 最长等待时间,单位为秒。
poll_s float 0.5 轮询间隔,单位为秒。
stable_count int 3 连续不同心跳满足地图和 UDP 就绪条件的次数。

返回值 (Returns):加载稳定后返回 True。

异常 (Raises):超时时抛出 TimeoutError,异常文本包含最后地图和 UDP 状态。


wait_for_map_loaded(target_map, timeout_s=60, poll_s=0.5, stable_count=3)

功能说明:waitForMapLoaded() 的蛇形命名别名,参数、返回值和异常行为完全相同。


getCurStartTime()

功能说明:获取当前启动时间。 参数列表 (Args):无参数 返回值 (Returns):当前启动时间 异常 (Raises):无


getCurHeartbeat()

功能说明:获取当前心跳状态。 参数列表 (Args):无参数 返回值 (Returns):当前心跳状态 异常 (Raises):无


getAllIPAndUserName()

功能说明:获取所有IP地址和对应的用户名。 参数列表 (Args):无参数 返回值 (Returns):所有IP地址和用户名的映射 异常 (Raises):无


getAllUEMaps(is_ue5=False, sort_by_custom=True)

功能说明:获取指定 UE 项目 Content 目录下所有有效的地图名称(.umap 文件)。自动排除首字母为 '_' 以及名称中包含 'LogicMap' 的地图。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
is_ue5 bool 否 False 是否为UE5项目
sort_by_custom bool 否 True 为 True 时按内置地图顺序排列,否则按地图名称排序

返回值 (Returns):有效地图名称列表 异常 (Raises):无


getAllUECopters(is_ue5=False, sort_by_custom=True)

功能说明:获取当前 UE/UE5 项目中所有可放置的 Copter 条目。该接口遍历项目 Content 和插件 Content 下的 XML 资源,提取 MeshClass、Name 等字段,并按规则处理后返回。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
is_ue5 bool 否 False 是否按 UE5 项目路径和资源规则读取
sort_by_custom bool 否 True 是否按定制规则排序;为 False 时按 ClassID 排序

返回值 (Returns):可放置 Copter 条目列表,元素通常为包含名称、类别、类 ID 等信息的字典。

异常 (Raises):无


getAllUEVehicles(is_ue5=False, sort_by_custom=True)

功能说明:获取当前 UE/UE5 项目中的所有载具条目。该接口会先读取载具名称列表,再从原始资源列表中过滤出载具相关 XML 项。

参数列表 (Args):

参数名 类型 是否必填 默认值 说明
is_ue5 bool 否 False 是否按 UE5 项目路径和资源规则读取
sort_by_custom bool 否 True 是否按定制规则排序;为 False 时按 ClassID 排序

返回值 (Returns):载具条目列表,元素通常为包含名称、类别、类 ID 等信息的字典。

异常 (Raises):无


getAllUEItems(is_ue5=False, sort_by_custom=True)

功能说明:获取当前 UE/UE5 项目中载具外的其他可放置物品。该接口遍历项目 Content 及插件 Content 下的 .xml 文件,排除载具名称列表中的项目,再根据预定义规则处理类别和排序。 参数列表 (Args):

参数名 类型 是否必填 默认值 说明
is_ue5 bool 否 False 是否为UE5项目
sort_by_custom bool 否 True 是否按定制规则排序;为 False 时按 ClassID 排序

返回值 (Returns):载具外可放置物品列表,元素通常为包含名称、类别、类 ID 等信息的字典。 异常 (Raises):无


sendUE4Component(copterID, parentComponentID, componentID, componentTypeID, switchCommand, params=None, windowID=-1, sequence=None)

功能说明:发送 144 字节 2i1d16d 组件协议。params 最多 12 项,不足部分补 0;未指定 sequence 时在线程锁保护下生成递增序列。windowID < 0 时发送到窗口端口 20010 至 20012,否则只发送到 20010 + windowID。

参数名 类型 默认值 说明
copterID int - 绑定组件的飞机 ID。
parentComponentID int - 父组件 ID;直接绑定飞机时填 0。
componentID int - 调用方分配的组件 ID。
componentTypeID int - 蓝图组件类型 ID。
switchCommand int - 0=Off、1=On、2=UpdateOnly。
params Sequence | None None 最多 12 个蓝图扩展参数。
windowID int -1 目标窗口;负数表示前三个窗口。
sequence float | None None 可复用的命令序列号。

返回值 (Returns):本次使用的 sequence。

异常 (Raises):params 超过 12 项时抛出 ValueError。


startUE4CombatFeedback(copterIDs, windowID=0)

功能说明:启动 20006 端口接收线程,清除指定飞机的旧攻防缓存并调用 reqCopt() 请求新数据。等待最多 1 秒后返回各飞机当前快照;输入 ID 会去重但保留顺序。

参数名 类型 默认值 说明
copterIDs int | Iterable[int] - 一个或多个正整数飞机 ID。
windowID int 0 发送请求的 RflySim3D 窗口编号。

返回值 (Returns):dict[int, CombatReqData | None]。

异常 (Raises):列表为空、布尔值、非整数或非正数 ID 会触发 ValueError。


getUE4CombatSnapshot(copterID)

功能说明:在线程锁保护下查找指定飞机最新的攻防数据。

返回值 (Returns):存在时返回 CombatReqData 深拷贝,否则返回 None。

异常 (Raises):飞机 ID 不是正整数时抛出 ValueError。


getUE4CopterHealthRate(copterID)

功能说明:返回 CurrentHealth / MaxHealth。未收到数据或 MaxHealth <= 0 时返回 None。


getUE4CombatComponents(copterID)

功能说明:将有效组件区间 [0, ComponentCount) 转为字典列表。每项包含组件索引、ID、类型、单次伤害、攻击频率、攻击距离、目标飞机和累计实际伤害。

返回值 (Returns):list[dict];没有快照时返回空列表。


getCombatData(CopterID=1)

功能说明:兼容旧接口。必要时启动 UE4 消息接收线程并等待 1 秒,然后返回缓存中的原始 CombatReqData 对象。

返回值 (Returns):找到时返回缓存对象,未找到时返回整数 0。需要隔离调用方修改时优先使用 getUE4CombatSnapshot()。


sendUE4Explosion(copterID, componentID, effectType, isOn=True)

功能说明:以组件类型 100 创建、重播或关闭爆炸特效,effectType 写入首个扩展参数。


sendUE4Fire(copterID, componentID, effectType, isOn=True)

功能说明:以组件类型 101 创建、重播或关闭起火特效。


sendUE4Smoke(copterID, componentID, effectType, isOn=True)

功能说明:以组件类型 102 创建、重播或关闭烟雾特效。

上述三个接口均要求 copterID、componentID、effectType 为正整数;命令使用同一序列号发送三次并间隔 0.01 秒,返回该序列号。


sendUE4LaserForward(copterID, componentID, effectType, attackRange, isOn=True)

功能说明:创建或关闭向前攻击激光。组件类型固定为 103,目标飞机 ID 为 0,线协议中的攻击模式值为 2。


sendUE4LaserToCopter(copterID, componentID, targetCopterID, effectType, attackRange, isOn=True)

功能说明:创建或关闭锁定指定飞机的激光。组件类型固定为 103,线协议中的攻击模式值为 1。

两个激光接口均要求 effectType 为正整数、attackRange 为有限非负数;锁定模式还要求 targetCopterID 为正整数。参数不合法时抛出 ValueError,成功时返回组件命令序列号。

进阶用法示例

以下示例请求 RflySim3D 回传载具数据,创建两个场景物体,并分别通过 getUE4Pos 和 getUE4Data 查询位置及完整状态。

参考例程:[RflySim安装路径]\RflySimAPIs\3.RflySim3DUE\0.ApiExps\e6_RflySim3DCtrlAPI\9.RflySim3DPosGet

import math
import time

import UE4CtrlAPI as UE4CtrlAPI


ue = UE4CtrlAPI.UE4CtrlAPI()

# 请求 RflySim3D 将载具状态回传到组播端口
ue.sendUE4Cmd("RflyReqVehicleData 1")
time.sleep(0.5)
ue.initUE4MsgRec()
time.sleep(2)

# 创建两个场景物体
ue.sendUE4Pos(100, 30, 0, [2.5, 0, -8.086], [0, 0, math.pi])
ue.sendUE4PosScale(
    101,
    200030,
    0,
    [10.5, 0, -8.086],
    [0, 0, math.pi],
    [10, 10, 10],
)
time.sleep(0.5)

# getUE4Pos 返回 [x, y, z, isExist]
for copterID in [1, 100, 101, 102]:
    posWithFlag = ue.getUE4Pos(copterID)
    if posWithFlag[3]:
        print("位置:", copterID, posWithFlag[0:3])
    else:
        print("未收到载具数据:", copterID)

# getUE4Data 返回完整的 reqVeCrashData 状态对象
vehicleState = ue.getUE4Data(1)
if isinstance(vehicleState, UE4CtrlAPI.reqVeCrashData):
    print("完整状态:", vehicleState.copterID, vehicleState.PosE)

注意事项与避坑指南

  • ID 冲突管理:sendUE4Pos、sendUE4Pos2Ground 等方法的 copID 参数必须全局唯一。若重复发送相同 ID 到不同位置会导致 UE4 中对象闪烁或控制异常,建议建立 ID 分配表(如 100-199 多旋翼、200-299 固定翼)。

  • 坐标系混淆:sendUE4Pos 使用 NED(北东下)坐标系,而 sendUE4Pos2Ground 会将高度强制归零到地面。若在 circle_traj 中混合使用两者,会出现高度计算错误,建议全程统一使用 sendUE4Pos 并手动处理地面碰撞检测。

  • 异步数据竞争:VisionSensorReqNew.CopyData() 和 CameraData.CopyData() 非线程安全,若在多线程中同时调用会导致内存对齐错误。必须使用互斥锁保护,或改用 CopyDataOld 获取上一帧缓存数据作为降级方案。

  • 对象生命周期失控:sendUE4Destroy 仅销毁 UE4 视觉对象,不会清理 Python 端残留的 CoptReqData 或 ObjReqData 实例。长期运行仿真后会出现内存泄漏,建议建立对象池并显式调用 del 或重建 UE4CtrlAPI 实例。

  • 网络超时盲区:sendUE4CmdNet 依赖 UDP 发送无确认机制,若 UE4 端未启动或防火墙拦截,调用会静默失败。生产环境必须配合 reqVeCrashData 或自定义心跳检测,超时后触发重连逻辑而非继续堆积指令。

更新日志

  • 2026-08-28: 组件加载和攻防消息相关例程接口
  • 2026-04-10: 增加获取UE地图和可放置物品列表的接口
  • 2026-03-06: 添加覆盖创建管道的接口
  • 2026-03-03: feat:SDK增加IP处理机制,兼容本地版上云
  • 2026-03-02: 添加根据ID删除对应的Copter的接口
  • 2026-02-28: 增加显示隐藏点位编号UI的API
  • 2026-01-20: UE4CtrlAPI组播接口和WSL环境下bug修复
  • 2026-01-14: 修改组播端口
  • 2026-01-06: 新增组播获取IP和RflySim打开的地图等接口
  • 2025-12-18: 新增UE控制接口
  • 2025-09-11: fix: 增加Linux端口复用的支持
  • 2025-08-19: fix: 更新视觉和UE接口
  • 2025-07-14: fix
  • 2025-07-11: fix
  • 2024-07-30: 补充了吊舱接口内容
  • 2024-07-10: 融合吊舱程序所用接口内容