跳转至

DllSimCtrlAPI 接口文档

简介

简述:该文件提供了RflySim仿真平台的底层仿真控制与数据交互接口,封装了多类仿真控制、数据管理与模型加载相关功能类,支撑第三方代码与PX4等飞控的闭环联合仿真。

RflySim平台需要通过动态链接库实现Python环境与仿真核心、飞控固件之间的交互,该模块封装了对接底层仿真控制库的全套接口,可用于不同类型无人机仿真任务的底层控制调度。模块支持三维仿真数据、硬件在环仿真数据的结构化管理,同时提供了RflySim专属的综合模型控制协议实现,能够适配多旋翼动态链接库模型加载、自定义仿真模型调度等多种开发场景,是RflySimSDK中实现闭环仿真控制的核心基础模块。

快速开始

最简可用示例,复制后修改最少配置即可运行。请确保已经正确安装RflySim SDK,且PX4飞控已经启动

from RflySimSDK.ctrl.DllSimCtrlAPI import ModelLoad
import time

# 1. 初始化模型加载对象,加载仿真控制接口,使用默认草地地图,本地IP,第一架无人机
sim_ctrl = ModelLoad(
    dll_name=None,  # 默认使用自带的仿真DLL
    CopterID=1,     # 无人机ID,默认为1
    MapName="Grasslands",  # 使用默认草地地图
    ip="127.0.0.1" # 本地仿真地址
)

# 2. 创建一架无人机,默认初始位置(0, 0),初始偏航0度,不使用GPS
sim_ctrl.CreateVehicle(
    CopterID=1,
    useGPS=False
)

# 3. 启动仿真循环,定时更新3D仿真画面
for i in range(100):
    # 更新无人机状态输出
    sim_ctrl.Updata3Doutput()
    # 发送更新信息到3D可视化界面
    sim_ctrl.SendUpdate3DMap()
    # 控制仿真帧率,约50Hz
    time.sleep(0.02)

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库EarthModelUE4CtrlAPIUEMapServecopyctrl.IpManagerctypescv2mathnumpyospymavlinkpymavlink.dialects.v20shutilsocketstructsysthreadingtime
  • 前置准备:调用此接口前,必须确保RflySimSDK已正确安装并完成环境配置。

核心接口说明

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

全局常量与枚举定义

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

独立常量


全局/独立函数


Data3D

存储无人机三维仿真相关的状态数据,支持从原始数据解析并更新各类无人机状态信息,适用于RflySim仿真中无人机状态数据的管理与维护。

__init__(copter_data=None, CopterID=-1, ClassID=-1)

功能说明:初始化Data3D对象,若提供原始无人机数据则自动调用update方法完成数据解析,否则将所有状态成员初始化为默认值,可存储的状态包括飞行器ID、三维样式、运行时间、速度、位置、姿态(欧拉角和四元数)、电机转速、加速度、角速度、GPS位置以及保留数据。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
copter_data Any None 原始无人机状态数据,传入后会自动解析更新状态
CopterID Any -1 无人机的编号ID
ClassID Any -1 无人机的类别ID

返回值 (Returns)

  • Data3D 实例对象

异常 (Raises): 无


update(copter_data, CopterID=-1, ClassID=-1)

功能说明:根据传入的无人机编号ID、类别ID和原始数据,更新Data3D对象存储的所有无人机状态信息,包括运行时间、速度、位置、姿态、电机转速等各类状态数据。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
copter_data Any - 待解析的原始无人机状态数据
CopterID Any -1 无人机的编号ID
ClassID Any -1 无人机的类别ID

返回值 (Returns): 无 异常 (Raises): 无

示例

# 初始化空Data3D对象
drone_data = Data3D()
# 传入原始数据更新状态
drone_data.update(raw_copter_data, CopterID=1, ClassID=0)

updateUdp(UIV)

功能说明:从UDP接收的数据中更新无人机状态信息。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
UIV Any - 从UDP接收的待解析状态数据

返回值 (Returns): 无 异常 (Raises): 无

示例

drone_data = Data3D()
# 从接收的UDP数据更新状态
udp_packet = receive_udp_data()
drone_data.updateUdp(udp_packet)

DataHIL

用于硬件在环(HIL)仿真的顶层数据管理类,本类当前未定义额外的成员方法与类变量,可作为硬件在环仿真数据交互的基类使用。

__init__()

功能说明:初始化 DataHIL 类实例 参数列表 (Args): 无 返回值 (Returns)

  • DataHIL 实例对象

异常 (Raises): 无


DllSimCtrlAPI

用于通过UDP广播与RflySim仿真环境通信,控制仿真中无人机的工具类。

__init__(self, CopterID=1, ip="127.0.0.1")

功能说明:初始化DllSimCtrlAPI对象,创建支持广播的UDP套接字,存储无人机ID和目标IP地址。 参数列表 (Args)

参数名 类型 默认值 说明
CopterID Any 1 目标控制无人机的ID,用于区分仿真环境中多架无人机
ip Any "127.0.0.1" 仿真环境所在服务端的IP地址,本地仿真默认使用本地回环地址

返回值 (Returns):无 异常 (Raises):无

fillList(data, inLen)

功能说明:此方法接收数组或列表,根据提供的长度参数进行调整。如果数据长度不足,则填充0;如果数据长度过长,则截断。处理逻辑:若输入为NumPy数组则先转换为Python列表;若输入已经是长度匹配的列表则直接返回;若为列表但长度不匹配则补零或截断;若输入不是列表则将单个数据包装为列表后补零到指定长度,最后返回处理后的数据。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
data 任意 需要调整长度的输入数据,可以是NumPy数组、Python列表或单个数值
inLen int 目标输出列表长度

返回值 (Returns):处理后长度为inLen的列表 异常 (Raises):无


sendCustomData(CopterID=0, data=[0] * 16, checksum=123456, port=50000, IP="127.0.0.1")

功能说明:封装CustomData结构体,将数据打包后通过UDP socket发送到指定IP和端口。结构体包含整型校验和、整型飞行器ID和16个double类型数据,方法会自动将输入数据调整为16长度(不足补零),再按ii16d格式打包发送。调用前需确保已创建并配置好udp_socket对象。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
CopterID int 0 目标飞行器ID
data list [0] * 16 需要发送的16维数据
checksum int 123456 数据校验和
port int 50000 目标UDP端口号
IP str 127.0.0.1 目标IP地址

返回值 (Returns):无 异常 (Raises):无


sendSILIntFloat(inSILInts=[0] * 8, inSILFLoats=[0] * 20, copterID=-1)

功能说明:向DLL模型的inSILIntsinSILFloats输入接口通过UDP发送PX4SILIntFloat结构体数据。结构体包含校验和、飞行器ID、8维整型数组、16维单精度浮点数组,方法会对输入数据做长度校正,按10i20f格式打包后通过30100+(copterID-1)*2端口发送;若输入copterID大于0则使用输入ID,否则使用对象自身的CopterID。调用前需确保已创建并配置好udp_socket对象且self.ip属性已设定。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
inSILInts list [0] * 8 输入的8维整型数据
inSILFLoats list [0] * 20 输入的20维单精度浮点数据
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


sendSILIntDouble(inSILInts=[0] * 8, inSILDoubs=[0] * 20, copterID=-1)

功能说明:向DLL模型的inDoubCtrls输入接口通过UDP发送数据,兼容前8维整型后20维双精度的输入格式,最终以28维双精度格式发送。结构体为DllInDoubCtrls,包含校验和、飞行器ID、28维双精度数组,方法会对输入数据做长度校正,将输入的整型和双精度数据拼接后按2i28d格式打包,通过30100+(copterID-1)*2端口发送;若输入copterID大于0则使用输入ID,否则使用对象自身的CopterID。调用前需确保已创建并配置好udp_socket对象且self.ip属性已设定。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
inSILInts list [0] * 8 输入的前8维整型数据
inSILDoubs list [0] * 20 输入的后20维双精度数据
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


sendInDoubCtrls(inDoubsCtrls=[0] * 28, copterID=-1)

功能说明:向DLL模型的inDoubCtrls输入接口通过UDP发送28维双精度数据,结构体为DllInDoubCtrls,包含校验和、飞行器ID、28维双精度数组。方法会对输入数据做长度校正,按2i28d格式打包后通过30100+(copterID-1)*2端口发送;若输入copterID大于0则使用输入ID,否则使用对象自身的CopterID。调用前需确保已创建并配置好udp_socket对象且self.ip属性已设定。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
inDoubsCtrls list [0] * 28 需要发送的28维双精度输入数据
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


sendInCtrlExt(inSILInts=[0] * 8, inSILFLoats=[0] * 20, iDxNum=1, copterID=-1)

功能说明:向DLL模型的inCtrlExt 1~5系列指定接口通过UDP发送数据,接口编号由iDxNum指定,输入格式为8维整型+20维单精度浮点,最终转换为28维double格式发送给DLL。校验和为1234567800 + iDxNum,方法对输入做长度校正后按10i20f格式打包,通过30100+(copterID-1)*2端口发送;若输入copterID大于0则使用输入ID,否则使用对象自身的CopterID。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
inSILInts list [0] * 8 输入的8维整型数据
inSILFLoats list [0] * 20 输入的20维单精度浮点数据
iDxNum int 1 目标inCtrlExt接口编号,范围1~5
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


sendInCtrlExtDoub(inDoubsCtrls=[0] * 28, iDxNum=1, copterID=-1, update=True)

功能说明:向DLL模型的inCtrlExt 1~5系列指定接口通过UDP发送28维双精度数据,接口编号由iDxNum指定。校验和为1234567800 + iDxNum,方法对输入做长度校正后按2i28d格式打包,通过30100+(copterID-1)*2端口发送;若输入copterID大于0则使用输入ID,否则使用对象自身的CopterID。注意:DLL模型inCtrlExt接口默认是float类型,使用本方法需要修改接口类型为double后重新生成DLL才会生效。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
inDoubsCtrls list [0] * 28 需要发送的28维双精度输入数据
iDxNum int 1 目标inCtrlExt接口编号,范围1~5
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID
update bool True 是否立即更新数据,在批量分段发送时仅最后一段设为True

返回值 (Returns):无 异常 (Raises):无


sendInCtrlExtAll(inDoubsCtrls=[0] * 140, copterID=-1)

功能说明:批量向DLL模型的inCtrlExt 1~5共5个接口发送数据,基于sendInCtrlExtDoub实现。将输入的最多140维数据按每28个元素分段,依次从inCtrlExt 1inCtrlExt 5接口发送,仅最后一段发送时设置update=True立即更新。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
inDoubsCtrls list [0] * 140 需要发送的总数据,最多支持5个接口×28维=140维
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


sendModelInParams(Bitmask, InParams, copterID=-1)

功能说明:向DLL模型FaultParamAPI.FaultInParams接口注入参数,通过PX4ModelInParams结构体打包发送。使用32位无符号位掩码指定哪些参数生效,对输入参数做长度校正后按iI32d格式打包,通过30100+(copterID-1)*2端口发送;若输入copterID大于0则使用输入ID,否则使用对象自身的CopterID,固定校验和为1234567891。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
Bitmask int 32位无符号位掩码,指定输入参数中哪些位生效,例如0b01表示仅第1位有效
InParams list 需要注入的最多32维double型参数
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


sendInitInParams(Bitmask=0, InParams=[0] * 32, copterID=-1)

功能说明:向DLL模型FaultParamAPI.InitInParams接口注入初始化参数,通过PX4ModelInParams结构体打包发送。使用32位无符号位掩码指定哪些参数生效,对输入参数做长度校正后按iI32d格式打包,通过30100+(copterID-1)*2端口发送;若输入copterID大于0则使用输入ID,否则使用对象自身的CopterID,固定校验和为1234567892。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
Bitmask int 0 32位无符号位掩码,指定输入参数中哪些位生效,例如0b01表示仅第1位有效
InParams list [0] * 32 需要注入的最多32维double型初始化参数
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


sendDynModiParams(Bitmask=0, InParams=[0] * 64, copterID=-1)

功能说明:向DLL模型FaultParamAPI.DynModiParams接口注入动态修改参数,通过PX4DynModiParams结构体打包发送。使用64位无符号位掩码指定哪些参数生效,对输入参数做长度校正后按iiQ64d格式打包,通过30100+(copterID-1)*2端口发送;若输入copterID大于0则使用输入ID,否则使用对象自身的CopterID,固定校验和为1234567893。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
Bitmask int 0 64位无符号位掩码,指定输入参数中哪些位生效,例如0b01表示仅第1位有效
InParams list [0] * 64 需要注入的最多64维double型动态参数
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


sendUE2Coptersim(inFromUE=None, copterID=-1)

功能说明:根据无人机ID将UE侧发来的数据打包为UEToCopterDataD结构体,通过UDP发送给DLL模型。结构体包含固定校验和1234567899、飞行器ID、32维double数据,按ii32d格式打包发送。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
inFromUE list None UE发出的32维double数据,默认生成全0的32维数据
copterID int -1 目标飞行器ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


InitTrueDataLoop(TargetCopter=-1)

功能说明:初始化UDP监听循环,用于从CopterSim的30100系列端口接收真实数据。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
TargetCopter int -1 目标监听的无人机ID,小于等于0时使用对象自身的CopterID

返回值 (Returns):无 异常 (Raises):无


EndTrueDataLoop()

功能说明:结束真实数据接收模式,停止监听循环。 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


getTrueDataMsg()

功能说明:启动循环监听30100系列端口发来的真实数据,获取真实数据消息。 参数列表 (Args):无参数 返回值 (Returns):接收到的真实数据消息 异常 (Raises):无

sendFloatsColl(size, velE=[0, 0, 0], ray=[0, 0, 0, 0, 0, 0], posE=[0, 0, 0], copterID=-1)

功能说明:此方法封装与无人机的碰撞相关数据,并通过UDP发送到指定的模拟器端口。根据提供的参数封装数据后,使用struct.pack以格式ii13f(两个整数和十三个浮点数)格式化数据后发送。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
size None 0 无人机碰撞体积大小
velE List[float] [0, 0, 0] 无人机东东北北下坐标系下的速度,长度为3
ray List[float] [0, 0, 0, 0, 0, 0] 六个方向(前后左右上下)的射线检测距离,长度为6
posE List[float] [0, 0, 0] 无人机东北下坐标系下的位置,长度为3
copterID int -1 目标无人机的ID,-1表示对所有无人机生效

返回值 (Returns):无返回值 异常 (Raises):无


sendColl20d(Coll20d=[0] * 20, copterID=-1)

功能说明:此方法封装无人机的20维碰撞数据,并通过UDP发送到指定的模拟器端口。根据提供的碰撞数据和无人机ID,封装数据后使用struct.pack以格式ii20f(两个整数和二十个浮点数)格式化数据后发送。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
Coll20d List[float] [0] * 20 20维碰撞数据,长度为20
copterID int -1 目标无人机的ID,-1表示对所有无人机生效

返回值 (Returns):无返回值 异常 (Raises):无


sendTerrIn15d(TerrIn15d=[0] * 15, copterID=-1)

功能说明:此方法封装无人机的15维地形数据,并通过UDP发送到指定的模拟器端口。根据提供的地形数据和无人机ID,封装数据后使用struct.pack以格式ii15f(两个整数和十五个浮点数)格式化数据后发送。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
TerrIn15d List[float] [0] * 15 15维地形数据,长度为15
copterID int -1 目标无人机的ID,-1表示对所有无人机生效

返回值 (Returns):无返回值 异常 (Raises):无


sendDllTakeoff(takeoffHeight=-10)

功能说明:发送起飞指令到PX4仿真,指定目标起飞高度。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
takeoffHeight float -10 目标起飞高度,单位为米

返回值 (Returns):无返回值 异常 (Raises):无


sendDllPosNeD(x=0, y=0, z=0, yaw=0)

功能说明:发送东北下坐标系下的位置期望与期望偏航角到飞控,用于位置控制。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
x float 0 东北下坐标系下x方向(东向)位置,单位为米
y float 0 东北下坐标系下y方向(北向)位置,单位为米
z float 0 东北下坐标系下z方向(向下)位置,单位为米
yaw float 0 期望偏航角,单位为弧度

返回值 (Returns):无返回值 异常 (Raises):无


sendDllPosNedNoYaw(x=0, y=0, z=0)

功能说明:发送东北下坐标系下的位置期望到飞控,不指定期望偏航角,保持当前偏航角,用于位置控制。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
x float 0 东北下坐标系下x方向(东向)位置,单位为米
y float 0 东北下坐标系下y方向(北向)位置,单位为米
z float 0 东北下坐标系下z方向(向下)位置,单位为米

返回值 (Returns):无返回值 异常 (Raises):无


sendDllVelFRD(vx=0, vy=0, vz=0, yawRate=0)

功能说明:发送前右下机体坐标系下的速度期望与期望偏航角速率到飞控,用于速度控制。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
vx float 0 前右下机体坐标系下x方向(前向)速度,单位为m/s
vy float 0 前右下机体坐标系下y方向(右向)速度,单位为m/s
vz float 0 前右下机体坐标系下z方向(向下)速度,单位为m/s
yawRate float 0 期望偏航角速率,单位为rad/s

返回值 (Returns):无返回值 异常 (Raises):无


sendDllVelNEDNoYaw(vx=0, vy=0, vz=0)

功能说明:发送东北下坐标系下的速度期望到飞控,不指定偏航速率,保持当前偏航角,用于速度控制。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
vx float 0 东北下坐标系下x方向(东向)速度,单位为m/s
vy float 0 东北下坐标系下y方向(北向)速度,单位为m/s
vz float 0 东北下坐标系下z方向(向下)速度,单位为m/s

返回值 (Returns):无返回值 异常 (Raises):无

RflySimCP

RflySim 综合模型控制协议,定义了RflySim控制通信协议的各类参数常量。

__init__()

功能说明:初始化RflySim综合模型控制协议实例 参数列表 (Args):无 返回值 (Returns):无 异常 (Raises):无

IsBitSet(num, bit)

功能说明:检查指定位是否被置位 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
num int 需要检查的整数
bit int 指定的位

返回值 (Returns):bool: 如果指定位被置位,则返回True,否则返回False。 异常 (Raises):无


IsPosSet(num)

功能说明:检查是否启用了位置控制 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
num int 需要检查的整数

返回值 (Returns):bool: 如果启用了位置控制,则返回True,否则返回False。 异常 (Raises):无


getPosNED(x=0, y=0, z=0, yaw=0)

功能说明:生成北东地坐标系下的期望位置与偏航组合控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
x float 0 北方向位置(NED坐标系原点为原点)
y float 0 东方向位置
z float 0 下方向位置
yaw float 0 期望偏航角,单位弧度,北为0,顺时针增加

返回值 (Returns):打包完成的控制指令数值 异常 (Raises):无


getPosLocal(x=0, y=0, z=0, yaw=0)

功能说明:生成局部坐标系下的期望位置与偏航组合控制指令 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | :--- | | x | float | 否 | 0 | X方向位置(ENU坐标系原点为起飞点) | | y | float | 否 | 0 | Y方向位置 | | z | float | 否 | 0 | 下方向位置 | | yaw | float | 否 | 0 | 期望偏航角,单位弧度,北为0,顺时针增加 |

返回值 (Returns):打包完成的控制指令数值 异常 (Raises):无


getVelNedNoYaw(northvel=0, eastvel=0, downvel=0)

功能说明:生成北东地坐标系下的期望速度控制指令,不指定偏航,保持当前偏航 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
northvel float 0 北方向期望速度
eastvel float 0 东方向期望速度
downvel float 0 下方向期望速度

返回值 (Returns):打包完成的控制指令数值 异常 (Raises):无


getVelNED(vx=0, vy=0, vz=0, yawRate=0)

功能说明:生成北东地坐标系下的期望速度与偏航速率组合控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
vx float 0 北方向期望速度
vy float 0 东方向期望速度
vz float 0 下方向期望速度
yawRate float 0 期望偏航速率

返回值 (Returns):打包完成的控制指令数值 异常 (Raises):无


getVelFRD(vx=0, vy=0, vz=0, yawRate=0)

功能说明:生成前右下机体坐标系下的期望速度与偏航速率组合控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
vx float 0 前方向期望速度(机体FRD坐标系)
vy float 0 右方向期望速度
vz
yawRate float 0 期望偏航速率

返回值 (Returns):打包完成的控制指令数值 异常 (Raises):无


SendSynAcc(ax, ay, az)

功能说明:同步发送加速度期望指令,无延迟发送 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | :--- | | ax | float | 是 | 无 | X方向期望加速度 | | ay | float | 是 | 无 | Y方向期望加速度 | | az | float | 是 | 无 | Z方向期望加速度 |

返回值 (Returns):无 异常 (Raises):无


SendSynFull(x, y, z, vx, vy, vz, ax, ay, az, yawRate)

功能说明:同步发送完整包含位置、速度、加速度和偏航速率期望指令,无延迟发送 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | :--- | | x | float | 是 | 无 | 期望位置X分量 | | y | float | 是 | 无 | 期望位置Y分量 | | z | float | 是 | 无 | 期望位置Z分量 | | vx | float | 是 | 无 | 期望速度X分量 | | vy | float | 是 | 无 | 期望速度Y分量 | | vz | float | 是 | 无 | 我期望速度Z分量 | | ax | float | 是 | 无 | 期望加速度X分量 | | ay | float | 是 | 无 | 期望加速度Y分量 | | az | float | 是 | 无 | 期望加速度Z分量 | | yawRate | float | 是 | 无 | 期望偏航速率 |

返回值 (Returns):无 异常 (Raises):无


SendSynAttThrust(roll, pitch, yaw, thrust)

功能说明:同步发送期望姿态与总推力指令,无延迟发送 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | :--- | | roll | float | 是 | 无 | 期望滚转角,单位弧度 | | pitch | float | 是 | 无 | 期望俯仰角,单位弧度 | | yaw | float | 是 | 无 | 期望偏航角,单位弧度 | | thrust | float | 是 | 无 | 期望总推力 |

返回值 (Returns):无 异常 (Raises):无


SendSynAtt(roll, pitch, yaw)

功能说明:同步发送期望姿态指令,无延迟发送 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | :--- | | roll | float | 是 | 无 | 期望滚转角,单位弧度 | | pitch | float | 是 | 无 | 期望俯仰角,单位弧度 | | yaw | 是 | 无 | 期望偏航角,单位弧度 |

返回值 (Returns):无 异常 (Raises):无


TakeoffSyn(height)

功能说明:同步发送起飞指令,指令不能有延迟,起飞到指定高度 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | 无 | 起飞目标高度 | | height | float | 是 | 无 | 起飞目标高度 |

返回值 (Returns):无 异常 (Raises):无


ReturnHomeSyn(height)

功能说明:同步发送返航指令,指令不能有延迟,先飞到返航点,保持指定高度 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | :--- | | height | float | 是 | 无 | 返航过程保持的飞行高度 |

返回值 (Returns):无 异常 (Raises):无


LandSyn(height=0)

功能说明:同步发送降落指令,指令不能有延迟,降落至指定高度 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | :--- | | height | float | 否 | 0 | 降落目标高度 |

返回值 (Returns):无 异常 (Raises):无


SendPosSpeedFWSyn(x, y, z, speed)

功能说明:为固定翼综合模型同步发送位置与速度指令,同时指定期望位置和期望飞行速度,指令无延迟 参数列表 (Args)

| 参数名 | 类型 | 是否必填 | 默认值 | 说明 | | :--- | :---: | :--- | :--- | | x | float | 是 | 无 | 期望位置X坐标 | | y | float | 是 | 无 | 期望位置Y坐标 | | z | float | 是 | 无 | 期望位置Z坐标 | | speed | float | 是 | 无 | 期望飞行速度大小 |

返回值 (Returns):无 异常 (Raises):无

ResetSynCmd()

功能说明:重置同步命令状态 参数列表 (Args): 无参数 返回值 (Returns):无 异常 (Raises):无

ModelLoad

用于向RflySim仿真环境中加载自定义飞行器模型的工具类。

__init__(dll_name, CopterID=1, ClassID=-1, MapName="Grasslands", ip="127.0.0.1", LocX=0, LocY=0, Yaw=0, UdpMode=0, useGPS=False, GpsOrin=[0, 0, 0])

功能说明:构造模型加载对象,连接仿真环境并加载指定的飞行器模型到指定位置。 参数列表 (Args)

参数名 类型 默认值 说明
dll_name - 待加载的模型动态链接库文件名
CopterID - 1 加载后飞行器的ID编号,用于区分多机场景中的不同飞行器
ClassID - -1 飞行器类别ID,-1表示自动分配
MapName - "Grasslands" 目标加载场景的名称
ip - "127.0.0.1" 仿真服务所在的IP地址
LocX - 0 模型加载的初始东北天坐标系X坐标(东向,单位:米)
LocY - 0 模型加载的初始东北天坐标系Y坐标(北向,单位:米)
Yaw - 0 模型加载的初始偏航角,单位:度
UdpMode - 0 UDP通信模式,0为默认模式
useGPS - False 是否为该模型启用GPS仿真
GpsOrin - [0, 0, 0] GPS传感器相对于机体原点的偏移量,顺序为前后、左右、上下

返回值 (Returns):无 异常 (Raises):无

CreateVehicle(CopterID=1, ClassID=-1, MapName="Grasslands", ip="127.0.0.1", LocX=0, LocY=0, Yaw=0, UdpMode=0, useGPS=False, GpsOrin=[0, 0, 0])

功能说明:在三维仿真场景中创建一架无人机载具 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
CopterID 任意 1 无人机的ID编号
ClassID 任意 -1 无人机机型ID,-1表示默认机型
MapName 任意 Grasslands 加载的场景地图名称
ip 任意 127.0.0.1 仿真服务连接的IP地址
LocX 任意 0 无人机初始位置X坐标
LocY 任意 0 无人机初始位置Y坐标
Yaw 任意 0 无人机初始偏航角
UdpMode 任意 0 UDP通信模式,0为默认模式
useGPS 任意 False 是否启用GPS仿真
GpsOrin 任意 [0, 0, 0] GPS初始偏移量

|

返回值 (Returns):无 异常 (Raises):无


Updata3Doutput()

功能说明:更新三维场景的输出数据 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


SendUpdate3DMap(isSetSpeed=False)

功能说明:向三维仿真场景发送地图更新信息,可选择设置仿真速度 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
isSetSpeed 任意 False 是否更新设置仿真运行速度

|

返回值 (Returns):无 异常 (Raises):无


get3DDataBuf()

功能说明:获取三维场景数据缓冲区 参数列表 (Args):无参数 返回值 (Returns):三维场景数据缓冲区对象 异常 (Raises):无


Send3DData()

功能说明:发送三维场景数据到仿真服务 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


SendSimData()

功能说明:发送仿真数据到飞控端 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


SendHILData()

功能说明:发送硬件在环仿真数据 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


SendOutCopter()

功能说明:发送无人机状态数据输出 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


fillList(data, inLen, fill=0)

功能说明:将列表填充至指定长度,填充指定值 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
data 任意 待填充的原始列表
inLen 任意 填充后目标长度
fill 任意 0 用于填充的元素值

|

返回值 (Returns):填充完成后的列表 异常 (Raises):无


StartAutUpdate(UpdateFreq=30, speed=-1)

功能说明:启动三维场景自动更新线程 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
UpdateFreq 任意 30 自动更新频率,单位Hz
speed 任意 -1 仿真运行速度倍率,-1表示不修改原速度

|

返回值 (Returns):无 异常 (Raises):无


StopAutUpdate()

功能说明:停止三维场景自动更新线程 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


AutUpdateLoop()

功能说明:自动更新的循环执行函数,由线程调用 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


StartExtCtrl()

功能说明:启动外部控制接收线程 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


StopExtCtrl()

功能说明:停止外部控制接收线程 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


Recv20100Loop()

功能说明:端口20100的数据接收循环函数,由接收线程调用 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无

Recv30100Loop()

功能说明:无 参数列表 (Args): 无参数 返回值 (Returns):无 异常 (Raises):无


DllDestroyModel()

功能说明:销毁模型 参数列表 (Args): 无参数 返回值 (Returns):无 异常 (Raises):无


DllReInitModel()

功能说明:初始化模型 参数列表 (Args): 无参数 返回值 (Returns):无 异常 (Raises):无


DllInputSILs(in_ints, in_floats)

功能说明:输入SIL数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
in_ints None [0] * 8 输入整型SIL数据
in_floats None [0] * 20 输入浮点型SIL数据

返回值 (Returns):无 异常 (Raises):无


DllInputColls(in_floats_collision)

功能说明:输入Collision数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
in_floats_collision None [0] * 20 碰撞输入浮点型数据

返回值 (Returns):无 异常 (Raises):无


DllTerrainIn15d(terrain15d)

功能说明:输入地形高度数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
terrain15d None [0] * 15 15维地形高度数据

返回值 (Returns):无 异常 (Raises):无


DllInitGpsPos(gps)

功能说明:输入GPS坐标的原点值 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
gps None [0] * 3 GPS原点经纬度、高度数据

返回值 (Returns):无 异常 (Raises):无


DllInitPosAngState(init_pos_offset, init_ang_offset)

功能说明:初始化位置和角度状态 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
init_pos_offset None [0, 0, 0] 初始位置偏移量
init_ang_offset None [0, 0, 0] 初始角度偏移量

返回值 (Returns):无 异常 (Raises):无


DllInputDoubCtrls(in_doub_ctrls)

功能说明:输入控制指令数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
in_doub_ctrls None [0] * 28 28维双精度控制指令数据

返回值 (Returns):无 异常 (Raises):无


DllinSIL28d(in_doub_ctrls)

功能说明:输入控制指令数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
in_doub_ctrls None [0] * 28 28维双精度控制指令数据

返回值 (Returns):无 异常 (Raises):无


DllInCtrlExt(in_ctrl_ext)

功能说明:输入故障注入数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
in_ctrl_ext None [0] * 140 140维扩展控制故障注入数据

返回值 (Returns):无 异常 (Raises):无


DllInFromUE(in_from_ue)

功能说明:输入UE数据给DLL 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
in_from_ue None [0] * 32 来自UE的32维输入数据

返回值 (Returns):无 异常 (Raises):无


DllInputColls(inCll)

功能说明:输入碰撞数据给DLL 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
inCll None [0] * 20 20维碰撞输入数据

返回值 (Returns):无 异常 (Raises):无


DllGetStep0()

功能说明:获取步长 参数列表 (Args): 无参数 返回值 (Returns):仿真步长数值 异常 (Raises):无


Dllstep()

功能说明:执行仿真步骤 参数列表 (Args): 无参数 返回值 (Returns):无 异常 (Raises):无

ModelUpdate(step_time)

功能说明:执行仿真步骤,仿真step_time秒 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
step_time None 需要推进仿真的时间,单位为秒

返回值 (Returns):无 异常 (Raises):无


DlloutVehileInfo60d()

功能说明:导出车辆的60维信息数据 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


DllOutCopterData()

功能说明:导出多旋翼飞行器的仿真数据 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


SendPosNED(x=0, y=0, z=0, yaw=0)

功能说明:发送NED坐标系下的位置和偏航角指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
x None 0 NED坐标系下北方向位置坐标
y None 0 NED坐标系下东方向位置坐标
z None 0 NED坐标系下Down方向位置坐标
yaw None 0 偏航角

返回值 (Returns):无 异常 (Raises):无


SendPosLocal(x=0, y=0, z=0, yaw=0)

功能说明:发送本地坐标系下的位置和偏航角指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
x None 0 本地坐标系下x方向位置坐标
y None 0 本地坐标系下y方向位置坐标
z None 0 本地坐标系下z方向位置坐标
yaw None 0 偏航角

返回值 (Returns):无 异常 (Raises):无


SendVelNED(vx=0, vy=0, vz=0, yawRate=0)

功能说明:发送NED坐标系下的速度和偏航角速度指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
vx None 0 NED坐标系下北方向速度
vy None 0 NED坐标系下东方向速度
vz None 0 NED坐标系下Down方向速度
yawRate None 0 偏航角速度

返回值 (Returns):无 异常 (Raises):无


SendVelFRD(vx=0, vy=0, vz=0, yawRate=0)

功能说明:发送机体FRD坐标系下的速度和偏航角速度指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
vx None 0 FRD坐标系下前方向速度
vy None 0 FRD坐标系下右方向速度
vz None 0 FRD坐标系下下方向速度
yawRate None 0 偏航角速度

返回值 (Returns):无 异常 (Raises):无


SendVelNEDNoYaw(northvel=0, eastvel=0, downvel=0)

功能说明:发送NED坐标系下的速度指令(不包含偏航角速度) 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
northvel None 0 NED坐标系下北方向速度
eastvel None 0 NED坐标系下东方向速度
downvel None 0 NED坐标系下Down方向速度

返回值 (Returns):无 异常 (Raises):无

MultiCopterDll

多旋翼无人机仿真模型加载类,用于在RflySim仿真环境中加载多旋翼无人机模型并完成仿真初始化配置。

__init__(CopterID=1, ClassID=-1, MapName="Grasslands", ip="127.0.0.1", LocX=0, LocY=0, Yaw=0, UdpMode=0, useGPS=False, GpsOrin=[0, 0, 0])

功能说明:初始化多旋翼无人机模型实例,在仿真环境中完成无人机模型加载与基础参数配置 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
CopterID int 1 多旋翼无人机的编号,用于区分同一仿真环境中不同的无人机
ClassID int -1 无人机类别ID,-1表示使用默认类别配置
MapName str "Grasslands" 仿真环境使用的地图名称,默认为Grasslands草地地图
ip str "127.0.0.1" 仿真服务连接的IP地址,本地仿真默认使用本地回环地址
LocX float 0 无人机初始位置的东向坐标(X轴)
LocY float 0 无人机初始位置的北向坐标(Y轴)
Yaw float 0 无人机初始航向角,单位为度
UdpMode int 0 UDP通信模式配置,0为默认模式,可根据通信需求选择不同模式
useGPS bool False 是否开启GPS仿真,True为开启,False为关闭
GpsOrin list[float] [0, 0, 0] GPS传感器相对于无人机机体的偏移量,格式为[x, y, z]

返回值 (Returns)

  • MultiCopterDll 实例对象

异常 (Raises: 无

示例

from RflySimSDK.ctrl import MultiCopterDll
# 加载1号多旋翼无人机,开启GPS,初始位置在原点
copter = MultiCopterDll(CopterID=1, useGPS=True, LocX=0, LocY=0)

进阶用法示例

展示复杂组合场景(如多类协作、异步控制、批量操作)

import RflySimSDK.ctrl as rfly_ctrl
import threading

# 多无人机批量组网异步控制示例
def batch_vehicle_control(vehicle_configs):
    # 1. 批量创建多架无人机
    model_loader = rfly_ctrl.ModelLoad()
    vehicle_list = []
    for config in vehicle_configs:
        veh = model_loader.CreateVehicle(config["model_path"], config["init_pos"])
        vehicle_list.append(veh)
        # 填充模型输入参数列表
        sim_ctrl = rfly_ctrl.DllSimCtrlAPI()
        sim_ctrl.fillList()
        # 发送初始化参数
        sim_ctrl.sendInitInParams(config["init_params"])

    # 2. 异步更新3D场景可视化,不阻塞控制逻辑
    def async_update_visual():
        data_3d = rfly_ctrl.Data3D()
        while True:
            output_buf = model_loader.get3DDataBuf()
            model_loader.Updata3Doutput(output_buf)
            data_3d.updateUdp()
            model_loader.SendUpdate3DMap()

    update_thread = threading.Thread(target=async_update_visual, daemon=True)
    update_thread.start()

    # 3. 多类协作完成异构控制:固定翼+多旋翼同时发送不同格式控制量
    rfly_cp = rfly_ctrl.RflySimCP()
    for idx, veh in enumerate(vehicle_list):
        if veh.type == "multicopter":
            # 发送多旋翼扩展双精度控制量
            sim_ctrl.sendInCtrlExtDoub(idx, veh.thrust, veh.attitude)
        else:
            # 发送固定翼整型+浮点型混合控制量
            sim_ctrl.sendSILIntFloat(idx, veh.mode, veh.aileron, veh.elevator)
        # 同步飞机状态数据
        pos = rfly_cp.getPosNED(veh.id)
        vel = rfly_cp.getVelNED(veh.id)
        rfly_cp.SendSynFull(veh.id, pos, vel, rpy=veh.attitude)

if __name__ == "__main__":
    # 配置3架无人机组网任务
    configs = [
        {"model_path": "copter_x.param", "init_pos": [0,0,0], "init_params": {}},
        {"model_path": "plane_a.param", "init_pos": [5,0,0], "init_params": {}},
        {"model_path": "copter_y.param", "init_pos": [0,5,0], "init_params": {}}
    ]
    batch_vehicle_control(configs)

注意事项与避坑指南

  • 参数填充前置要求:调用DllSimCtrlAPI类的任何控制量发送方法前,必须先调用fillList方法完成参数列表初始化,否则会发送空数据导致仿真异常。
  • 3D可视化更新时序:开启自动更新3D场景需要调用ModelLoad.StartAutUpdate,若自定义异步更新,不要重复调用Send3DDataStartAutUpdate,避免出现数据重复发送导致画面卡顿。
  • 位姿状态读取前提:调用RflySimCP类的getPosNEDgetVelNED等状态读取方法前,需要确保已经完成仿真数据同步,否则会读出全零的错误状态数据。
  • 批量操作内存管理:批量创建多无人机后,若需要重新加载仿真,需要清空原有实例对象并重新调用fillList,否则残留的旧参数会混入新控制量导致控制错误。

更新日志

  • 2026-03-03: feat:SDK增加IP处理机制,兼容本地版上云
  • 2025-12-05: feat: 1.添加综合模型的设置NED位置与速度接口 2.添加distSimCtrlAPI的异步指令执行以及消息缓存区大小
  • 2024-09-12: feat:增加发送相对位置的接口
  • 2024-09-12: feat:新增SendVelFRD接口
  • 2024-09-06: fix:API页面中增加调用关系图
  • 2024-09-06: fix:更新API
  • 2024-08-31: fix:更新DLL控制库
  • 2024-07-26: fix:更新API主页
  • 2024-07-24: fix:重构DLL模型相关函数描述介绍
  • 2024-07-23: fix:修复bug
  • 2024-07-22: fix:修复失效的接口
  • 2024-06-18: fix:API格式调整
  • 2024-06-12: fix:更新接口注释
  • 2024-06-05: fix:更新doxygen生成文档
  • 2024-06-05: fix:更新DLLSimCtrlAPI的注释