类集成了调用受控模型的DLL接口的方法。 更多...
Public 成员函数 | |
| __init__ (self, CopterID=1, ip='127.0.0.1') | |
| 构造函数初始化无人机控制接口。 | |
| fillList (self, data, inLen) | |
| 根据需要的长度调整数据列表,以确保其长度符合要求。 | |
| sendCustomData (self, CopterID=0, data=[0] *16, checksum=123456, port=50000, IP='127.0.0.1') | |
| 发送一个包含16维double型数据的自定义数据结构到指定的IP和端口,可用于与Simulink通信。 | |
| sendSILIntFloat (self, inSILInts=[0] *8, inSILFLoats=[0] *20, copterID=-1) | |
| 向 DLL 模型的inSILInts and inSILFLoats接口发送包含整数和浮点数组的数据。 | |
| sendSILIntDouble (self, inSILInts=[0] *8, inSILDoubs=[0] *20, copterID=-1) | |
| 向 DLL 模型的inDoubCtrls接口发送包含整数和双精度浮点数组的数据。 | |
| sendInDoubCtrls (self, inDoubsCtrls=[0] *28, copterID=-1) | |
| 发送一个包含双精度浮点数数组的数据包到模型inDoubCtrls接口,通过UDP。 | |
| sendInCtrlExt (self, inSILInts=[0] *8, inSILFLoats=[0] *20, iDxNum=1, copterID=-1) | |
| 通过UDP发送控制信号到指定无人机的模拟器。 | |
| sendInCtrlExtDoub (self, inDoubsCtrls=[0] *28, iDxNum=1, copterID=-1, update=True) | |
| 通过UDP发送double型控制信号到指定无人机的模拟器端口。 | |
| sendInCtrlExtAll (self, inDoubsCtrls=[0] *140, copterID=-1) | |
| 将一个较长的浮点数向量分段并通过UDP发送到多个控制端口。 | |
| sendModelInParams (self, Bitmask, InParams, copterID=-1) | |
| 通过UDP向CopterSim模型发送仿真参数。 | |
| sendInitInParams (self, Bitmask=0, InParams=[0] *32, copterID=-1) | |
| 发送初始化参数至CopterSim | |
| sendDynModiParams (self, Bitmask=0, InParams=[0] *64, copterID=-1) | |
| 发送动态参数修改至指定CopterSim模拟器 | |
| sendUE2Coptersim (self, inFromUE=None, copterID=-1) | |
| 用于处理UE(三维环境)和CopterSim DLL模型之间的通信。 | |
| InitTrueDataLoop (self, TargetCopter=-1) | |
| 初始化真实数据接收机制 | |
| EndTrueDataLoop (self) | |
| 结束真实数据接收的循环 | |
| getTrueDataMsg (self) | |
| 从30100串口监听真是数据,更新Pixhawk状态 | |
| sendFloatsColl (self, size=0, velE=[0, 0, 0], ray=[0, 0, 0, 0, 0, 0], posE=[0, 0, 0], copterID=-1) | |
| 发送与无人机碰撞相关的浮点数据到CopterSim DLL模型的inFloatsCollision接口。 | |
| sendColl20d (self, Coll20d=[0] *20, copterID=-1) | |
| 向CopterSim DLL模型的inCollision20d接口发送20维碰撞数据。 | |
| sendTerrIn15d (self, TerrIn15d=[0] *15, copterID=-1) | |
| 向CopterSim DLL模型的TerrainIn15d接口发送15维地形数据。 | |
Public 属性 | |
| ip = ip | |
| udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
| CopterID = CopterID | |
| out3Ddata = Data3D() | |
| list | outCopterVect = [0]*32 |
| udp_socketTrue = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
| bool | stopFlagTrueData = False |
| tTrue = threading.Thread(target=self.getTrueDataMsg, args=()) | |
类集成了调用受控模型的DLL接口的方法。
此类通过UDP协议与无人机模拟器进行通信,控制模拟器的操作。
| __init__ | ( | self, | |
| CopterID = 1, | |||
| ip = '127.0.0.1' ) |
构造函数初始化无人机控制接口。
| CopterID | 初始化时设置的无人机ID,默认值为1。 |
| ip | 控制器连接的目标IP地址,默认值为'127.0.0.1'。 |
解析
self.ip = ip:
这行代码将ip参数赋值给self.ip。self指的是对象本身,ip是传入的参数。这表示该对象有一个属性ip,用于存储IP地址。
self.udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM):
这行代码创建了一个套接字对象,并将其赋值给self.udp_socket。socket.socket(socket.AF_INET, socket.SOCK_DGRAM)用于创建一个基于IPv4和UDP协议的套接字。
self.udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1):
这行代码设置了套接字对象的一个选项。它允许套接字发送广播消息。
self.CopterID = CopterID:
这行代码将CopterID参数赋值给self.CopterID。这表示该对象有一个属性CopterID,用于存储无人机的ID。
| fillList | ( | self, | |
| data, | |||
| inLen ) |
根据需要的长度调整数据列表,以确保其长度符合要求。
| data | 输入的原始数据,可以是numpy数组或列表(维度不定)。 |
| inLen | 期望的数据列表维度。 |
此方法接收数组或列表,根据提供的长度参数进行调整。如果数据长度不足,则填充0;如果数据长度过长,则截断。
解析
if isinstance(data, np.ndarray):
首先检查输入的数据data是否为NumPy数组。如果是,将其转换为Python列表。
if isinstance(data, list) and len(data)==inLen
接下来检查数据的类型和长度。如果数据是列表且长度与预期的inLen相等,则直接返回数据。
if isinstance(data, list):
如果数据是列表,则进一步检查数据的长度。如果列表的长度小于inLen,则在列表末尾添加足够的零,使其长度等于inLen。如果列表的长度大于inLen,则仅保留列表的前inLen个元素。
else:
如果数据不是列表,说明数据可能是其他类型(例如整数、浮点数等)。此时将该数据包装成一个列表,并在列表中添加足够的零,使其长度等于inLen。
return data
最后返回处理后的数据。
| getTrueDataMsg | ( | self | ) |
| InitTrueDataLoop | ( | self, | |
| TargetCopter = -1 ) |
| sendColl20d | ( | self, | |
| Coll20d = [0]*20, | |||
| copterID = -1 ) |
向CopterSim DLL模型的inCollision20d接口发送20维碰撞数据。
| Coll20d | (list or numpy array, optional): 1到20维的碰撞double数据,默认为20个0。 |
| copterID | (int, optional): 指定发送数据的无人机ID。若为非正数,则使用初始化时的无人机ID。 |
此方法封装了无人机的20维碰撞数据,并通过UDP发送到指定的模拟器端口。
struct Ue4Coll20d {
int checksum; //校验码1234567880
int CopterID;
float inCollision20d[20];
}
struct.pack ii20f
功能:
根据提供的碰撞数据和无人机ID,封装数据并通过UDP发送。数据格式化为'ii20f',即两个整数和二十个浮点数。
示例
dll = DllSimCtrlAPI.DllSimCtrlAPI()
dll.sendColl20d([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],1)
| sendCustomData | ( | self, | |
| CopterID = 0, | |||
| data = [0]*16, | |||
| checksum = 123456, | |||
| port = 50000, | |||
| IP = '127.0.0.1' ) |
发送一个包含16维double型数据的自定义数据结构到指定的IP和端口,可用于与Simulink通信。
| CopterID | (int): 飞行器的标识ID,默认为0。 |
| data | (list or numpy.array): 可以是1到16维的向量,自定要发送的数据,默认为16个0。 |
| checksum | (int): 用于校验的检验和,默认为123456。 |
| port | (int): 目标端口号,默认为50000。 |
| IP | (str): 目标IP地址,默认为'127.0.0.1'。 |
Description:
本方法封装了一个结构体 CustomData,该结构体包含一个整型校验和,一个整型飞行器ID和一个包含16个double类型数据的数组。
方法首先确保提供的数据向量长度为16,不足时自动补零。
使用 struct.pack 方法按照 "ii16d" 的格式打包数据,其中 'ii' 表示两个整型数据,'16d' 表示16个双精度浮点数。
然后通过 UDP socket 发送打包后的数据到指定的 IP 地址和端口。
Note:
调用此方法前需确保已创建并配置好 udp_socket 对象。
| sendDynModiParams | ( | self, | |
| Bitmask = 0, | |||
| InParams = [0]*64, | |||
| copterID = -1 ) |
发送动态参数修改至指定CopterSim模拟器
| Bitmask | (int): 一个32位整数,决定InParams中的哪些参数将被修改。每个位代表一个不同的参数,如果一个位被设置为1,那么对应的参数将被修改。 |
| InParams | (list): 64维包含double的列表,代表要修改的参数。 |
| copterID | (int): 发送参数至哪个CopterSim。如果copterID小于或等于0,参数将被发送到与DLLSimCtrlAPI实例关联的Copter。 |
描述:
该函数作用为向DLL模型FaultParamAPI.DynModiParams接口传入数据,其中,参数InParams为使用者需要传入DLL模型FaultInParams接口的参数,
数据类型为double;参数Bitmask为64位无符号的位掩码,用来指定传入到DLL模型DynModiParams接口参数生效的位数,比如当Bitmask为0b01时,
传入到DLL模型的DynModiParams参数仅第1位有效。
该函数调用的结构体如下,checksum要求为1234567893。函数预留copterID参数传入位,当函数传入的CopterID大于0时,函数采用传入的
CopterID,否则取对象本身的CopterID。通过30100+(copterID-1)*2 UDP端口号通讯(copterID从1开始计数)。将函数传入的InParams进行
长度校正后将结构体相关数据按iiQ64d的格式打包,并通过UDP的方式发出,其中 'ii' 表示2个整型数据(校验位),'Q'表示无符号双长整型,'64d'
表示64个双精度浮点数。
struct PX4DynModiParams{
int checksum;//1234567893
int CopterID;
uint64_t Bitmask;
double InParams[64];
};
| sendFloatsColl | ( | self, | |
| size = 0, | |||
| velE = [0, 0, 0], | |||
| ray = [0, 0, 0, 0, 0, 0], | |||
| posE = [0, 0, 0], | |||
| copterID = -1 ) |
发送与无人机碰撞相关的浮点数据到CopterSim DLL模型的inFloatsCollision接口。
| size | (float): 无人机的尺寸。 |
| velE | (list of float): 3维列表,无人机在东北天坐标系中的速度,格式为[x, y, z]。 |
| ray | (list of float): 6维列表,表示无人机各方向的射线数据,格式为[前, 后, 左, 右, 上, 下]。 |
| posE | (list of float): 3维列表,无人机在东北天坐标系中的位置,格式为[x, y, z]。 |
| copterID | (int): 指定发送数据的无人机ID。若为非正数,则使用初始化时的无人机ID。 |
此方法封装了与无人机的碰撞相关数据,并通过UDP发送到指定的模拟器端口。
struct Ue4RayTraceDrone {
int checksum;//校验码1234567890
int CopterID;
float size;
float velE[3];
float ray[6];//前后左右上下
float posE[3];
}struct.pack ii13f
功能:
根据提供的参数,封装数据并通过UDP发送。使用struct.pack格式化数据为'ii13f',即两个整数和十三个浮点数。
示例:
dll = DllSimCtrlAPI.DllSimCtrlAPI()
dll.sendFloatsColl(1,[0,0,0],[0,0,0,0,0,0],[0,0,0])
| sendInCtrlExt | ( | self, | |
| inSILInts = [0]*8, | |||
| inSILFLoats = [0]*20, | |||
| iDxNum = 1, | |||
| copterID = -1 ) |
通过UDP发送控制信号到指定无人机的模拟器。
| inSILInts | (list 或 numpy.array): 1到8维包含整数的向量。 |
| inSILFLoats | (list 或 numpy.array): 1到20维包含浮点数的向量。 |
| iDxNum | (int): 指定使用哪一个InCtrlExt端口(1到5之间)。 |
| copterID | (int): 目标无人机ID。如果为-1,则发送到自身ID。 |
描述:
该函数作用为向DLL模型inCtrlExt 1-5系列接口中的指定接口传入数据,接口由iDxNum决定,iDxNum=1时表示向DLL模型
inCtrlExt 1接口传入数据,以此类推,数据类型为8维整型+20维单精度浮点型。
原理上,该函数调用的结构体格式与DllInDoubCtrls一致,区别在于结构体中的checksum,inCtrlExt 1-5接口对应结构体的checksum
为1234567800 + iDxNum,另外传入的数据精度及格式也存在区别,该函数传入参数中数据类型为8维整型+20维单精度浮点型,实际发给
DLL模型为28维double型(注意,DLL模型inCtrlExt系列接口默认设置为float型)。
函数内容包括,以1234567800 + iDxNum作为校验和传入checksum,函数预留copterID参数传入位,当函数传入的CopterID
大于0时,函数采用传入的CopterID,否则取对象本身的CopterID。在RflySim平台中,该结构体通过
30100+(copterID-1)*2 UDP端口号通讯(copterID从1开始计数)。将函数传入的inSILInts和inSILFLoats进行长度
校正后将结构体相关数据按10i20f的格式打包,并通过UDP的方式发出,其中 '10i' 表示10个整型数据(包括校验和和ID),'20f' 表示
20个单精度浮点数。
| sendInCtrlExtAll | ( | self, | |
| inDoubsCtrls = [0]*140, | |||
| copterID = -1 ) |
将一个较长的浮点数向量分段并通过UDP发送到多个控制端口。
| inDoubsCtrls | (list 或 numpy.array): 1到140维包含double的向量。 |
| copterID | (int): 目标无人机ID。如果为-1,则发送到self里的ID。 |
描述:
该函数基于sendInCtrlExtDoub()实现,作用为支持DLL模型inCtrlExt 1-5接口数据输入,会将传入的inDoubsCtrls参数按照
长度分段通过inCtrlExt 1-5接口传入到DLL模型,每段最多28个元素,从inCtrlExt 1 接口开始发送。最后一个端口发送时,
设置update为True以立即更新,其他端口设置为False。
具体原理见sendInCtrlExtDoub()函数描述。
| sendInCtrlExtDoub | ( | self, | |
| inDoubsCtrls = [0]*28, | |||
| iDxNum = 1, | |||
| copterID = -1, | |||
| update = True ) |
通过UDP发送double型控制信号到指定无人机的模拟器端口。
| inDoubsCtrls | (list 或 numpy.array): 1到28维包含double的向量。 |
| iDxNum | (int): 指定使用哪一个InCtrlExt端口(1到5之间)。 |
| copterID | (int): 目标无人机ID。如果为-1,则发送到自身ID。 |
| update | (bool): 是否立即更新 |
描述:
该函数作用为向DLL模型inCtrlExt 1-5系列接口中的指定接口传入数据,接口由iDxNum决定,iDxNum=1时表示向DLL模型
inCtrlExt 1接口传入数据,以此类推,数据类型为28维双精度浮点型。该函数与sendInCtrlExt()的主要区别在于传入DLL模型
数据精度与数据格式。
原理上,该函数调用的结构体格式与DllInDoubCtrls一致,区别在于结构体中的checksum,inCtrlExt 1-5接口对应结构体的checksum
为1234567800 + iDxNum,传入inDoubsCtrls参数数据类型为28维double型,该数据会传入到DLL模型的inCtrlExt接口。(注意,
DLL模型inCtrlExt系列接口默认设置为float型,在使用该函数给DLL模型传入数据时,需要将DLL模型inCtrlExt接口数据类型修改为double后重新
生成DLL函数才会生效)。
函数内容包括,以1234567800 + iDxNum作为校验和传入checksum,函数预留copterID参数传入位,当函数传入的CopterID
大于0时,函数采用传入的CopterID,否则取对象本身的CopterID。在RflySim平台中,该结构体通过
30100+(copterID-1)*2 UDP端口号通讯(copterID从1开始计数)。将函数传入的inDoubsCtrls进行长度
校正后将结构体相关数据按2i28d的格式打包,并通过UDP的方式发出,其中 '2i' 表示2个整型数据(校验和和ID),'28d' 表示28个双精度浮点数。
| sendInDoubCtrls | ( | self, | |
| inDoubsCtrls = [0]*28, | |||
| copterID = -1 ) |
发送一个包含双精度浮点数数组的数据包到模型inDoubCtrls接口,通过UDP。
| inDoubsCtrls | (list 或 numpy.array): 1-28维包含双精度浮点数的numpy或list向量。默认为28个零。 |
| copterID | (int): 要发送数据的无人机ID。如果为-1,则默认使用当前实例的无人机ID。 |
Description:
该函数作用为向DLL模型的inDoubCtrls传入数据,数据格式为28维double型。
原理上,该函数封装了一个DllInDoubCtrls结构体的调用方法,结构体定义见下方,该结构体对应了DLL模型的inDoubCtrls输入接口。
结构体中包含了整形校验和checksum、飞行器序号CopterID、双精度浮点型数组inDoubCtrls[28]。
函数内容包括:以DllInDoubCtrls结构体的校验和传入checksum,函数预留copterID参数传入位,当函数传入的CopterID大于0时,
函数采用传入的CopterID,否则取对象本身的CopterID。在RflySim平台中,DllInDoubCtrls结构体通过30100+(copterID-1)*2 UDP
端口号通讯(copterID从1开始计数)。将函数传入的inSILDoubs进行长度校正后将结构体相关数据按2i28d的格式打包,并通过UDP的方式发出,
其中 '2i' 表示2个整型数据(校验和和ID),'28d' 表示28个双精度浮点数。
结构体定义:
struct DllInDoubCtrls{
int checksum;//校验码1234567897
int CopterID; // 飞机的ID
double inDoubCtrls[28];//28维的double型输入
};
注意:
确保在调用此方法前已创建并适当配置了udp_socket对象,并且设置了self.ip属性。
| sendInitInParams | ( | self, | |
| Bitmask = 0, | |||
| InParams = [0]*32, | |||
| copterID = -1 ) |
发送初始化参数至CopterSim
| Bitmask | (int, 可选): 一个32位整数,表示要修改的参数。默认值为0。 |
| InParams | (list, 可选): 32维包含double的列表,代表初始化参数。默认值为[0]*32。 |
| copterID | (int, 可选): 要发送参数的CopterSim的ID。默认值为-1,这意味着参数将发送至存储在实例变量CopterID中的CopterSimID。 |
描述:
该函数作用为向DLL模型FaultParamAPI.InitInParams接口传入数据,其中,参数InParams为使用者需要传入DLL模型FaultInParams接口的参数,
数据类型为double;参数Bitmask为32位无符号的位掩码,用来指定传入到DLL模型InitInParams接口参数生效的位数,比如当Bitmask为0b01时,
传入到DLL模型的InitInParams参数仅第1位有效。
该函数调用的结构体如下,checksum要求为1234567892。函数预留copterID参数传入位,当函数传入的CopterID大于0时,函数采用传入的
CopterID,否则取对象本身的CopterID。通过30100+(copterID-1)*2 UDP端口号通讯(copterID从1开始计数)。将函数传入的InParams进行
长度校正后将结构体相关数据按iI32d的格式打包,并通过UDP的方式发出,其中 'i' 表示1个整型数据(校验位),'I'表示无符号整型,'32d'
表示32个双精度浮点数。
struct PX4ModelInParams{
int checksum;//1234567891 for PX4ModelInParams, and 1234567892 for PX4InitInParams
uint32_t Bitmask;
double InParams[32];
};
注意:
- 在此实现中,`checkSum` 参数被设置为1234567892。
- `PortNum` 基于`copterID`计算。
- 使用`struct.pack`方法创建`buf`参数。
- 使用`udp_socket.sendto`方法发送数据。
| sendModelInParams | ( | self, | |
| Bitmask, | |||
| InParams, | |||
| copterID = -1 ) |
通过UDP向CopterSim模型发送仿真参数。
| Bitmask | (uint32): 一个32位无符号的位掩码,指定各种标志或设置。 |
| InParams | (list或numpy.array): 32维包含双精度浮点数的列表或数组。 |
| copterID | (int): 可选;指定目标无人机ID。如果为-1或未提供,则默认为self.CopterID。 |
描述:
该函数作用为向DLL模型FaultParamAPI.FaultInParams接口传入数据,其中,参数InParams为使用者需要传入DLL模型FaultInParams接口的参数,
数据类型为double;参数Bitmask为32位无符号的位掩码,用来指定传入到DLL模型FaultInParams接口参数生效的位数,比如当Bitmask为0b01时,
传入到DLL模型的FaultInParams参数仅第1位有效。
该函数调用的结构体如下,checksum要求为1234567891。函数预留copterID参数传入位,当函数传入的CopterID大于0时,函数采用传入的
CopterID,否则取对象本身的CopterID。通过30100+(copterID-1)*2 UDP端口号通讯(copterID从1开始计数)。将函数传入的InParams进行
长度校正后将结构体相关数据按iI32d的格式打包,并通过UDP的方式发出,其中 'i' 表示1个整型数据(校验位),'I'表示无符号整型,'32d'
表示32个双精度浮点数。
struct PX4ModelInParams{
int checksum;//1234567891 for PX4ModelInParams, and 1234567892 for PX4InitInParams
uint32_t Bitmask;
double InParams[32];
};
| sendSILIntDouble | ( | self, | |
| inSILInts = [0]*8, | |||
| inSILDoubs = [0]*20, | |||
| copterID = -1 ) |
向 DLL 模型的inDoubCtrls接口发送包含整数和双精度浮点数组的数据。
| inSILInts | (list): 支持1-8维的numpy或list向量 |
| inSILDoubs | (list): 支持1-20维的numpy或list向量 |
| copterID | (int): 指定要发送数据的飞行器ID,默认为-1。 |
Description:
该函数作用为向DLL模型的inDoubCtrls接口传入数据,数据格式为前8维整型,后8维双精度浮点型。
原理上,该函数封装了一个DllInDoubCtrls结构体的调用方法,结构体定义见下方,该结构体对应了DLL模型的inDoubCtrls输入接口。
结构体中包含了整形校验和checksum、飞行器序号CopterID、双精度浮点型数组inDoubCtrls[28]。
函数内容包括:以DllInDoubCtrls结构体的校验和传入checksum,函数预留copterID参数传入位,当函数传入的CopterID大于0时,
函数采用传入的CopterID,否则取对象本身的CopterID。在RflySim平台中,DllInDoubCtrls结构体通过
30100+(copterID-1)*2 UDP端口号通讯(copterID从1开始计数)。将函数传入的inSILInts和inSILDoubs进行长度
校正后将结构体相关数据按2i28d的格式打包,并通过UDP的方式发出,其中 '2i' 表示2个整型数据(校验和和ID),'28d' 表示28个双精度浮点数。
这里以整型+双精度浮点型数据传入参数实际发出的还是28维double型,这样做的目的是为了兼容PX4SILIntFloat结构体前8维整型后20维
浮点型的数据格式。
结构体定义:
struct DllInDoubCtrls{
int checksum;//校验码1234567897
int CopterID; // 飞机的ID
double inDoubCtrls[28];//28维的double型输入
};
Note:
调用此方法前需确保已创建并配置好 udp_socket 对象及 self.ip 属性已被设定。
| sendSILIntFloat | ( | self, | |
| inSILInts = [0]*8, | |||
| inSILFLoats = [0]*20, | |||
| copterID = -1 ) |
向 DLL 模型的inSILInts and inSILFLoats接口发送包含整数和浮点数组的数据。
| inSILInts | (list or numpy.array): 1到8维整数数组,自定数据,默认为8个0。 |
| inSILFLoats | (list or numpy.array): 1到20维浮点数数组,自定数据,默认为20个0。 |
| copterID | (int): 指定要发送数据的飞行器ID,默认为-1。 |
Description:
该函数作用为向DLL模型的inSILInts和inSILFloats接口传入数据。
原理上,该函数封装了一个PX4SILIntFloat结构体的调用方法,结构体定义见下方,该结构体对应了DLL模型的inSILInts
和inSILFloats输入接口。结构体中包含了整形校验和checksum、飞行器序号CopterID、整型数组inSILInts[8]
和浮点型数组inSILFLoats[16]。
函数内容包括:以PX4SILIntFloat结构体的校验和传入checksum,函数预留copterID参数传入位,当函数传入的CopterID
大于0时,函数采用传入的CopterID,否则取对象本身的CopterID。在RflySim平台中,PX4SILIntFloat结构体通过
30100+(copterID-1)*2 UDP端口号通讯(copterID从1开始计数)。将函数传入的inSILInts和inSILFLoats进行长度
校正后将结构体相关数据按10i20f的格式打包,并通过UDP的方式发出,其中 '10i' 表示10个整型数据(包括校验和和ID),'20f' 表示
20个单精度浮点数。
结构体定义:
struct PX4SILIntFloat{
int checksum;//1234567897
int CopterID;
int inSILInts[8];
float inSILFLoats[16];
};
Note:
调用此方法前需确保已创建并配置好 udp_socket 对象及 self.ip 属性已被设定。
| sendTerrIn15d | ( | self, | |
| TerrIn15d = [0]*15, | |||
| copterID = -1 ) |
向CopterSim DLL模型的TerrainIn15d接口发送15维地形数据。
| TerrIn15d | (list or numpy array, optional): 1到15维地形浮点数据,默认为15个0。 |
| copterID | (int, optional): 指定发送数据的无人机ID。若为非正数,则使用初始化时的无人机ID。 |
此方法封装了无人机的15维地形数据,并通过UDP发送到指定的模拟器端口。 功能: 根据提供的地形数据和无人机ID,封装数据并通过UDP发送。数据格式化为'ii15f',即两个整数和十五个浮点数。 示例 dll = DllSimCtrlAPI.DllSimCtrlAPI() dll.sendTerrIn15d([0,0,0,0,0,0,0,0,0,0,0,0,0],1)
| sendUE2Coptersim | ( | self, | |
| inFromUE = None, | |||
| copterID = -1 ) |
用于处理UE(三维环境)和CopterSim DLL模型之间的通信。
| inFromUE | (list of float, optional): 32维双精度浮点数列表。RflySim3D发送到CopterSim的数据 |
| copterID | (int, optional): 将数据发送到的无人机的ID。如果小于或等于零,则发送到初始化时设置的无人机ID。 |
根据无人机ID通过UDP将结构化数据打包并发送到dll模型。
struct UEToCopterDataD{
int checksum; //1234567899为校验ID
int CopterID; //发出本消息的飞机ID
double inFromUE[32]; //通过蓝图发出的数据
}
struct.pack ii32d
示例:
dll = DllSimCtrlAPI.DllSimCtrlAPI()
dll.sendUE2Coptersim([0.1]*32,1)