RflySimSDK v3.05
RflySimSDK说明文档
载入中...
搜索中...
未找到
UE4CtrlAPI类 参考

RflySim3D控制接口类. 更多...

class  Radiation
 此类用于定义和处理给定场景中各种对象的辐射属性。 更多...
 

Public 成员函数

 __init__ (self, ip="127.0.0.1")
 UE4CtrlAPI的构造函数
 
 sendUE4Cmd (self, cmd, windowID=-1)
 发送RflySim3D控制台命令的方法
 
 fillList (self, data, inLen)
 
 sendUE4CmdNet (self, cmd)
 向同一局域网内所有RflySim3D发送RflySim3D控制台命令的方法
 
 sendUE4LabelID (self, CopterID=0, Txt="", fontSize=30, RGB=[255, 0, 0], windowID=-1)
 设置一个自行创建物体的头顶ID位置的显示内容
 
 sendUE4LabelMsg (self, CopterID=0, Txt="", fontSize=30, RGB=[255, 0, 0], dispTime=0, dispFlag=-1, windowID=-1)
 设置一个自行创建物体的头顶各行Message标签显示内容
 
 sendUE4Attatch (self, CopterIDs, AttatchIDs, AttatchTypes, windowID=-1)
 设置在UE4中将一个或多个自建物体附加到其他物体上
 
 sendUE4Pos (self, copterID=1, vehicleType=3, MotorRPMSMean=0, PosE=[0, 0, 0], AngEuler=[0, 0, 0], windowID=-1)
 在指定位置创建/更新模型
 
 sendUE4Pos2Ground (self, copterID=1, vehicleType=3, MotorRPMSMean=0, PosE=[0, 0, 0], AngEuler=[0, 0, 0], windowID=-1)
 在指定位置创建/更新模型
 
 sendUE4PosScale (self, copterID=1, vehicleType=3, MotorRPMSMean=0, PosE=[0, 0, 0], AngEuler=[0, 0, 0], Scale=[1, 1, 1], windowID=-1)
 在指定位置创建/更新模型
 
 sendUE4PosScale2Ground (self, copterID=1, vehicleType=3, MotorRPMSMean=0, PosE=[0, 0, 0], AngEuler=[0, 0, 0], Scale=[1, 1, 1], windowID=-1)
 在指定位置创建/更新模型
 
 sendUE4PosFull (self, copterID, vehicleType, MotorRPMS=[0] *8, VelE=[0, 0, 0], PosE=[0, 0, 0], RateB=[0, 0, 0], AngEuler=[0, 0, 0], windowID=-1)
 在指定位置创建/更新模型
 
 sendUE4ExtAct (self, copterID=1, ActExt=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], windowID=-1)
 触发扩展蓝图接口
 
 sendUE4PosSimple (self, copterID, vehicleType, PWMs, VelE, PosE, AngEuler, runnedTime=-1, windowID=-1)
 创建/更新模型
 
 sendUE4PosNew (self, copterID=1, vehicleType=3, PosE=[0, 0, 0], AngEuler=[0, 0, 0], VelE=[0, 0, 0], PWMs=[0] *8, runnedTime=-1, windowID=-1)
 创建/更新模型
 
 sendUE4PosScale100 (self, copterID, vehicleType, PosE, AngEuler, MotorRPMSMean, Scale, isFitGround=False, windowID=-1)
 创建100个Copter
 
 sendUE4PosScalePwm20 (self, copterID, vehicleType, PosE, AngEuler, Scale, PWMs, isFitGround=False, windowID=-1)
 创建20个Copter
 
 getUE4Pos (self, CopterID=1)
 获取Copter位置
 
 getUE4Data (self, CopterID=1)
 获取Copter数据
 
 initUE4MsgRec (self)
 启用监听
 
 endUE4MsgRec (self)
 终止监听
 
 UE4MsgRecLoop (self)
 监听循环
 
 getCamCoptObj (self, type_id=1, objName=1)
 获取场景内指定物体数据
 
 reqCamCoptObj (self, type_id=1, objName=1, windowID=0)
 请求场景内指定物体数据回传
 
 reqCam (self, SeqIDList=[0], windowID=0)
 
 reqCopt (self, CopterIDList=[0], windowID=0)
 
 reqObj (self, ObjNameList=[''], windowID=0)
 
 SetUE4RadianceValue (self, UEObjectName, windows=-1)
 Radiation 类计算得到目标的辐射值设置给UE(只要名字中某段能匹配就会设置)
 
 SetUE4RadianceValue__All (self, windows=-1)
 设置 tempEmissivity 数组中所有物体的辐射值给UE4
 
 sendUE4SetStencilValueByActorName (self, Actorname, StencilValue, is_name_regex=False, windowID=-1)
 将物体的模板值发送给UE(由Actor)
 
 sendUE4SetStencilValueByMeshComponentName (self, Meshname, StencilValue, is_name_regex=False, windowID=-1)
 将物体的模板值发送给UE(由mesh)
 
 sendUE4SetStencilValueByCopterID (self, CopterID, StencilValue, windowID=-1)
 将物体的模板值发送给UE(由CopterID)
 

Public 属性

 ip
 
 startTime
 
 udp_socket
 
 udp_socketUE4
 
 inSilVect
 
 inReqVect
 
# 如果没有启用监听程序 stopFlagUE4
 
 CoptDataVect
 
 ObjDataVect
 
 CamDataVect
 
 CamDataVect1
 
 hasMsgEvent
 
 trueMsgEvent
 
 inReqUpdateVect
 
 t4
 
 isVehicleCrash
 
 isVehicleCrashID
 
 radiation
 

详细描述

RflySim3D控制接口类.

UE4CtrlAPI 类包含在指定IP和端口上监听RflySim3D消息并控制RflySim3D的方法。

 

构造及析构函数说明

◆ __init__()

__init__ ( self,
ip = "127.0.0.1" )

UE4CtrlAPI的构造函数

参数
ip要连接的PC的IP地址,默认为"127.0.0.1"
返回
UE4CtrlAPI对象
参数初始化:

ip:要连接的PC的IP地址,默认为"127.0.0.1"。
self.startTime:使用当前时间初始化 startTime 属性,用于记录对象创建时间。
创建UDP套接字:

self.udp_socket:创建一个UDP套接字用于通信。
self.udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1):设置套接字选项以允许广播。
self.udp_socketUE4:创建另一个UDP套接字用于与UE4通信。
self.udp_socketUE4.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1):设置套接字选项以允许地址重用。
初始化向量:

self.inSilVect:用于存储传入的Sil数据的向量(列表)。
self.inReqVect:用于存储传入请求数据的向量(列表)。
初始化控制UE4的标志和向量:

self.stopFlagUE4:用于控制UE4停止状态的标志,初始值为 True。
self.CoptDataVect:用于存储飞行器数据的向量。
self.ObjDataVect:用于存储对象数据的向量。
self.CamDataVect:用于存储相机数据的向量。
初始化线程事件:

self.hasMsgEvent:用于处理消息存在的事件。
self.trueMsgEvent:用于处理真实消息状态的事件。
通过这些步骤,UE4CtrlAPI 类的构造函数创建并初始化了一个可以与RflySim3D进行通信和控制的实例。

成员函数说明

◆ endUE4MsgRec()

endUE4MsgRec ( self)

终止监听

End UE4 message listening

◆ getCamCoptObj()

getCamCoptObj ( self,
type_id = 1,
objName = 1 )

获取场景内指定物体数据

  • 参数
    type_id
    objName
    返回
    • 0表示未找到,返回0
    • 1表示找到,返回对应的对象
    type=0表示相机,1表示手动创建带copter_id的目标,2表示场景中自带的物体
    相机时,objName对应相机seqID;指定copterid目标时,objName对应CopterID,请求场景中自带的物体时,objName对应物体名字(字符串)
    

◆ getUE4Data()

getUE4Data ( self,
CopterID = 1 )

获取Copter数据

  • 参数
    CopterID
+ 函数调用图:

◆ getUE4Pos()

getUE4Pos ( self,
CopterID = 1 )

获取Copter位置

  • 参数
+ 函数调用图:

◆ initUE4MsgRec()

initUE4MsgRec ( self)

启用监听

Initialize the UDP data linsening from UE4,
currently, the crash data is listened
+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ reqCam()

reqCam ( self,
SeqIDList = [0],
windowID = 0 )
请求相机数据。

参数:
    SeqIDList (list): 相机的序列ID列表。默认值为[0]。
    windowID (int): 发送消息的RflySim3D窗口ID,默认是0号窗口。
+ 函数调用图:

◆ reqCamCoptObj()

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

请求场景内指定物体数据回传

  • 参数
    type_id
    objName
    windowID
    返回
    • 0表示未找到,返回0
    • 1表示找到,返回对应的对象
    type=0表示相机,1表示手动创建带copter_id的目标,2表示场景中自带的物体
    相机时,objName对应相机seqID;指定copterid目标时,objName对应CopterID,请求场景中自带的物体时,objName对应物体名字(字符串)
    windowID 表示想往哪个RflySim3D发送消息,默认是0号窗口
    
    RflyReqObjData(int opFlag, FString objName, FString colorflag)函数命令
    opFlag 0创建相机,1创建copter_id对应的目标,2创建物体
    
+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ reqCopt()

reqCopt ( self,
CopterIDList = [0],
windowID = 0 )
请求带copter_id的目标数据。

参数:
    CopterIDList (list): copter_id的ID列表。默认值为[0]。
    windowID (int): 发送消息的RflySim3D窗口ID,默认是0号窗口。
+ 函数调用图:

◆ reqObj()

reqObj ( self,
ObjNameList = [''],
windowID = 0 )
请求场景中自带的物体数据。

参数:
    ObjNameList (list): 物体名称的列表。默认值为['']。
    windowID (int): 发送消息的RflySim3D窗口ID,默认是0号窗口。
+ 函数调用图:

◆ sendUE4Attatch()

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

设置在UE4中将一个或多个自建物体附加到其他物体上

  • 参数
    CopterIDs要附加的飞机的ID列表,最大长度为25
    AttatchIDs被附加的物体的ID列表,最大长度为25
    AttatchTypes附加类型的列表,最大长度为25。附加类型包括:
    • 0:正常模式
    • 1:相对位置但不相对姿态
    • 2:相对位置+偏航(不相对俯仰和滚转)
    • 3:相对位置+全姿态(俯仰、滚转、偏航)
    windowID要显示的RflySim3D窗口ID。默认为-1,表示所有窗口。
    返回

    发送消息到UE4,将一个或多个飞机附加到其他物体上(最多25个飞机);
    CopterIDs、AttatchIDs、AttatchTypes可以是长度为25的列表Send msg to UE4 to attach a vehicle to another (25 vehicles);
    CopterIDs,AttatchIDs,AttatchTypes can be a list with max len 25
    
    struct VehicleAttatch25 {
        int checksum;//1234567892
        int CopterIDs[25];
        int AttatchIDs[25];
        int AttatchTypes[25];//0:正常模式,1:相对位置不相对姿态,2:相对位置+偏航(不相对俯仰和滚转),3:相对位置+全姿态(俯仰滚转偏航)
    }i25i25i25i
+ 函数调用图:

◆ sendUE4Cmd()

sendUE4Cmd ( self,
cmd,
windowID = -1 )

发送RflySim3D控制台命令的方法

  • 参数
    cmd要发送给RflySim3D的控制台命令
    windowID要发送给指定UE4窗口的ID,默认为-1,表示发送给所有窗口
    返回
    发送命令以控制 RflySim3D 的显示样式
    可用的命令如下,命令字符串形如'RflyShowTextTime txt time'
    RflyShowTextTime(String txt, float time)\\ let UE4 show txt with time second
    RflyShowText(String txt)\\  let UE4 show txt 5 second
    RflyChangeMapbyID(int id)\\ Change the map to ID (int number)
    RflyChangeMapbyName(String txt)\\ Change to map with name txt
    RflyChangeViewKeyCmd(String key, int num) \\ the same as press key + num on UE4
    RflyCameraPosAngAdd(float x, float y, float z,float roll,float pitch,float yaw) \\ move the camera with x-y-z(m) and roll-pitch-yaw(degree) related to current pos
    RflyCameraPosAng(float x, float y, float z, float roll, float pitch, float yaw) \\ set the camera with x-y-z(m) and roll-pitch-yaw(degree) related to UE origin
    RflyCameraFovDegrees(float degrees) \\ change the cameras fov (degree)
    RflyChange3DModel(int CopterID, int veTypes=0) \\ change the vehicle 3D model to ID
    RflyChangeVehicleSize(int CopterID, float size=0) \\change vhielce's size
    RflyMoveVehiclePosAng(int CopterID, int isFitGround, float x, float y, float z, float roll, float pitch, float yaw) \\ move the vehicle's  x-y-z(m) and roll-pitch-yaw(degree) related to current pos
    RflySetVehiclePosAng(int CopterID, int isFitGround, float x, float y, float z, float roll, float pitch, float yaw) \\ set the vehilce's x-y-z(m) and roll-pitch-yaw(degree) related to UE origin
    RflyScanTerrainH(float xLeftBottom(m), float yLeftBottom(m), float xRightTop(m), float yRightTop(m), float scanHeight(m), float scanInterval(m)) \\ send command to let UE4 scan the map to generate png and txt files
    RflyCesiumOriPos(double lat, double lon, double Alt) \\ change the lat, lon, Alt (degrees) of the Cesium map origin
    RflyClearCapture \\ clear the image capture unit
    struct Ue4CMD0{
        int checksum;
        char data[52];
    } i52s
    struct Ue4CMD{
        int checksum;
        char data[252];
    } i252s
+ 这是这个函数的调用关系图:

◆ sendUE4CmdNet()

sendUE4CmdNet ( self,
cmd )

向同一局域网内所有RflySim3D发送RflySim3D控制台命令的方法

  • 参数
    cmd要发送给RflySim3D的控制台命令
    返回
    send command to control all RflySim3D in LAN
    struct Ue4CMDNet { //总长度为96
        int checksum; //校验位,这里应该是1234567897
        char data[92];
    } i92s
    
    命令类型检查与转换:
    
    首先检查 cmd 是否为字符串类型。如果是,使用 encode() 方法将其转换为字节串,因为网络通信要求数据以字节串形式发送。
    命令长度和打包:
    
    检查命令长度是否超过91字节。因为结构 Ue4CMDNet 的 data 字段设计为92字节,其中最后一个字节通常留给空终止符(如果使用C风格字符串)。
    使用 struct.pack("i92s", 1234567897, cmd) 对命令进行打包。这里 i92s 表示传输数据格式,其中 i 是一个整型的校验位,值为 1234567897;后面的 92s 是92字节的字符串。这样打包确保数据按照指定的格式发送,前四个字节为整型校验位,紧随其后的是命令数据。
    发送命令:
    
    使用 self.udp_socket.sendto(buf, ("224.0.0.10", 20009)) 将打包后的数据发送到多播地址 224.0.0.10 和端口 20009。所选的多播地址和端口应该与接收端一致,以便所有的 RflySim3D 实例都能接收到这条消息。
    额外操作-命令效果等待:
    
    如果发送的命令是 "RflyChangeMap",该命令可能涉及到仿真环境的重大变更(例如,场景切换)。为了确保场景切换能顺利完成,在命令发送后,函数暂停0.5秒,以便给RflySim3D足够的响应时间。

◆ sendUE4ExtAct()

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

触发扩展蓝图接口

  • 参数
    copterID(默认值为1):飞行器的ID,用于指定要执行外部动作的飞行器。
    ActExt(默认值为[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]):外部动作信息,用于指定飞行器执行的外部动作。这是一个包含 16 个元素的列表,每个元素表示一个外部动作的值。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,外部动作信息将仅应用于指定的窗口。如果 windowID 为负数,则外部动作信息将应用于所有窗口。
    struct Ue4ExtMsg {
        int checksum;//1234567894
        int CopterID;
        double runnedTime; //Current  stamp (s)
        double ExtToUE4[16];
    }
    struct.pack 2i1d16f
    
+ 函数调用图:

◆ sendUE4LabelID()

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

设置一个自行创建物体的头顶ID位置的显示内容

  • 参数
    CopterID要设置 ID 位置内容的 自行创建物体ID
    Txt要在 ID 位置显示的文本内容
    fontSize文本的字体大小
    RGB文本的 RGB 颜色。可以用表示颜色值的字符串进行指定,例如 "FF0000" 表示红色,"00FF00" 表示绿色。
    windowID要显示标签的RflySim3D窗口 ID
    返回
+ 函数调用图:

◆ sendUE4LabelMsg()

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

设置一个自行创建物体的头顶各行Message标签显示内容

  • 参数
    CopterID要设置 Message 显示内容的自行创建物体ID
    Txt要在 Message 位置显示的文本内容
    fontSize文本的字体大小
    RGB文本的 RGB 颜色。可以用表示颜色值的字符串进行指定,例如 "FF0000" 表示红色,"00FF00" 表示绿色。
    dispTime显示持续时间,单位为秒。如果设置为0,则表示永久显示;如果设置为大于0的数,则表示显示指定秒数后消失;如果设置为小于0的数,则立刻消失。
    dispFlag显示标志。根据不同的值,有不同的显示效果:
    • 如果 dispFlag < 0,则消息依次累加,显示最多5条。
    • 如果 dispFlag = 0,则清除所有消息。
    • 如果 dispFlag > 0,则更新特定消息行(索引从1开始)。如果更新的行号大于当前消息总数,则切换到累加模式。
    windowID要显示标签的RflySim3D窗口 ID
    返回
    struct CopterMsg {
        int checksum; //校验位,这里必须设定为1234567899
        int CopterID; //飞机的ID号,具体显示哪一个飞机。注意,如果CopterID<=0,则所有飞机都显示消息;如果CopterID大于0,则对应飞机显示消息
        int dispFlag;//显示需要,如果flag<0,则消息会逐层累加,最多显示5条消息;如果flag=0,会清理所有消息;如果flag>0,则会更新对应的消息;如果flag大于当前消息总数,则消息顺延在末尾。
        int RGB[3];//RGB的颜色,0~255,分别表示红、绿、蓝
        float dispTime;//消失时间(单位秒)。如果<0,则立刻消失;如果=0,则永远显示;如果>0,则设定秒数后消失
        float fontSize;//字体大小;默认是20;
        char data[120];//显示的文字。
    };6i2f120s
    dispFlag <0 且 dispTime>=0 表示依次累加的方式添加消息
    dispFlag <0 且 dispTime<0 表示清空所有消息
    dispFlag =0 且 dispTime>=0 表示更新ID行(第0行数据)
    dispFlag >=1 and <5 表示更新1到5行的消息,注意此时dispTime<0会删除本消息,若>=0会更新消息
    dispFlag>当前消息数,则切换到累加模式
    
+ 这是这个函数的调用关系图:

◆ sendUE4Pos()

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

在指定位置创建/更新模型

  • 参数
    copterID(默认值为1):飞行器的ID,指定要创建或更新状态的飞行器。
    vehicleType(默认值为3):飞行器的类型。根据实际情况,可以指定不同的类型来创建或更新不同类型的飞行器模型。
    MotorRPMSMean(默认值为0):电机转速的均值。这个参数用于控制电机的转速,可以影响模型的运动状态。
    PosE(默认值为[0, 0, 0]):位置信息,表示飞行器当前的位置。这是一个包含三个元素的列表,分别表示飞行器在 x、y、z 坐标轴上的位置。
    AngEuler(默认值为[0, 0, 0]):欧拉角信息,表示飞行器当前的姿态。这是一个包含三个元素的列表,分别表示飞行器的俯仰、滚转和偏航角度。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,位置和角度信息将仅应用于指定的窗口。如果 windowID 为负数,则位置和角度信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create a new 3D model or update the old model's states
    
+ 函数调用图:

◆ sendUE4Pos2Ground()

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

在指定位置创建/更新模型

  • 参数
    copterID(默认值为1):飞行器的ID,指定要创建或更新状态的飞行器。
    vehicleType(默认值为3):飞行器的类型。根据实际情况,可以指定不同的类型来创建或更新不同类型的飞行器模型。
    MotorRPMSMean(默认值为0):电机转速的均值。这个参数用于控制电机的转速,可以影响模型在地面上的状态。
    PosE(默认值为[0, 0, 0]):位置信息,表示飞行器当前在地面上的位置。这是一个包含三个元素的列表,分别表示飞行器在 x、y、z 坐标轴上的位置。
    AngEuler(默认值为[0, 0, 0]):欧拉角信息,表示飞行器当前的姿态。这是一个包含三个元素的列表,分别表示飞行器的俯仰、滚转和偏航角度。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,位置和角度信息将仅应用于指定的窗口。如果 windowID 为负数,则位置和角度信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create a new 3D model or update the old model's states on the ground
    checksum =1234567891 is adopted here to tell UE4 to genearete a object always fit the ground
    struct SOut2SimulatorSimple {
        int checkSum; //1234567890 for normal object, 1234567891 for fit ground object
        int copterID;  //Vehicle ID
        int vehicleType;  //Vehicle type
        float MotorRPMSMean; // mean motor speed
        float PosE[3];   //NED vehicle position in earth frame (m)
        float AngEuler[3];  //Vehicle Euler angle roll pitch yaw (rad) in x y z
    }  3i7f
    
+ 函数调用图:

◆ sendUE4PosFull()

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

在指定位置创建/更新模型

  • 参数
    copterID:飞行器的ID,用于指定要创建或更新状态的飞行器。
    vehicleType:飞行器的类型,根据实际情况可以指定不同的类型来创建或更新不同类型的飞行器模型。
    MotorRPMS(默认值为[0,0,0,0,0,0,0,0] ):电机转速信息,用于控制飞行器的电机转速。
    VelE:速度信息,表示飞行器当前水平面坐标系(NED)的速度。
    PosE:位置信息,表示飞行器当前水平面坐标系(NED)的位置。
    RateB:角速度信息,表示飞行器当前机体坐标系的角速度。
    AngEuler:欧拉角信息,表示飞行器当前的姿态。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,上述信息将仅应用于指定的窗口。如果 windowID 为负数,则这些信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create a new 3D model or update the old model's states
    # //输出到模拟器的数据
    # struct SOut2Simulator {
    #     int checksum; // 123456789
    #     int copterID;  //Vehicle ID
    #     int vehicleType;  //Vehicle type
    #     int reserv; //备用标志位
    #     float VelE[3];   //NED vehicle velocity in earth frame (m/s)
    #     float AngEuler[3];  //Vehicle Euler angle roll pitch yaw (rad) in x y z
    #     float AngQuatern[4]; //Vehicle attitude in Quaternion
    #     float MotorRPMS[8];  //Motor rotation speed (RPM)
    #     float AccB[3];       //Vehicle acceleration in body frame x y z (m/s/s)
    #     float RateB[3];      //Vehicle angular speed in body frame x y z (rad/s)
    #     double runnedTime; //Current  stamp (s)
    #     double PosE[3];   //NED vehicle position in earth frame (m)
    #     double PosGPS[3];    //vehicle longitude, latitude and altitude (degree,degree,m)
    # } 4i24f7d
    
+ 函数调用图:

◆ sendUE4PosNew()

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

创建/更新模型

  • 参数
    copterID(默认值为1):飞行器的ID,用于指定要创建或更新状态的飞行器。
    vehicleType(默认值为3):飞行器的类型,根据实际情况可以指定不同的类型来创建或更新不同类型的飞行器模型。
    PosE(默认值为[0, 0, 0]):位置信息,表示飞行器当前的位置。这是一个包含三个元素的列表,分别表示飞行器在 x、y、z 坐标轴上的位置。
    AngEuler(默认值为[0, 0, 0]):欧拉角信息,表示飞行器当前的姿态。这是一个包含三个元素的列表,分别表示飞行器的俯仰、滚转和偏航角度。
    VelE(默认值为[0, 0, 0]):速度信息,表示飞行器当前的速度。这是一个包含三个元素的列表,分别表示飞行器在 x、y、z 轴上的速度。
    PWMs(默认值为[0,0,0,0,0,0,0,0] ):PWM(脉宽调制)信息,表示飞行器的电机控制信号。这是一个包含八个元素的列表,用于控制飞行器电机的转速或推力。
    runnedTime(默认值为-1):运行时间,以毫秒为单位,表示飞行器的运行时间。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,位置、姿态、速度等信息将仅应用于指定的窗口。如果 windowID 为负数,则这些信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create a new 3D model or update the old model's states
    # //输出到模拟器的数据
    # struct SOut2SimulatorSimpleTime {
    #     int checkSum; //1234567891
    #     int copterID;  //Vehicle ID
    #     int vehicleType;  //Vehicle type
    #     int PosGpsInt[3];   //lat*10^7,lon*10^7,alt*10^3,int型发放节省空间
    #     float MotorRPMS[8];
    #     float VelE[3];
    #     float AngEuler[3];  //Vehicle Euler angle roll pitch yaw (rad) in x y z
    #     double PosE[3];   //NED vehicle position in earth frame (m)
    #     double runnedTime; //Current Time stamp (s)
    # }6i14f4d
    
+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ sendUE4PosScale()

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

在指定位置创建/更新模型

  • 参数
    self:表示类的实例对象,用于访问类的成员变量和其他方法。
    copterID(默认值为1):飞行器的ID,用于指定要创建或更新状态的飞行器。
    vehicleType(默认值为3):飞行器的类型,根据实际情况可以指定不同的类型来创建或更新不同类型的飞行器模型。
    MotorRPMSMean(默认值为0):电机转速的均值,用于控制电机的转速,影响模型的运动状态。
    PosE(默认值为[0, 0, 0]):位置信息,表示飞行器当前的位置。这是一个包含三个元素的列表,分别表示飞行器在 x、y、z 坐标轴上的位置。
    AngEuler(默认值为[0, 0, 0]):欧拉角信息,表示飞行器当前的姿态。这是一个包含三个元素的列表,分别表示飞行器的俯仰、滚转和偏航角度。
    Scale(默认值为[1, 1, 1]):比例信息,用于更改模型的比例。这是一个包含三个元素的列表,分别表示飞行器在 x、y、z 轴上的比例。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,位置、姿态和比例信息将仅应用于指定的窗口。如果 windowID 为负数,则位置、姿态和比例信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create a new 3D model or update the old model's states with changing the scale
    struct SOut2SimulatorSimple1 {
        int checkSum; //1234567890 for normal object, 1234567891 for fit ground object
        int copterID;  //Vehicle ID
        int vehicleType;  //Vehicle type
        float MotorRPMSMean; // mean motor speed
        float PosE[3];   //NED vehicle position in earth frame (m)
        float AngEuler[3];  //Vehicle Euler angle roll pitch yaw (rad) in x y z
        float Scale[3];
    }  3i10f
    
+ 函数调用图:

◆ sendUE4PosScale100()

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

创建100个Copter

  • 参数
    copterID:飞行器的ID,用于指定要创建或更新状态的飞行器。这是一个任意类型的参数,表示飞行器的标识。
    vehicleType:飞行器的类型,根据实际情况可以指定不同的类型来创建或更新不同类型的飞行器模型。
    PosE:位置信息,表示飞行器当前的位置。
    AngEuler:欧拉角信息,表示飞行器当前的姿态。
    MotorRPMSMean(默认值为0):电机转速的均值,用于控制电机的转速,影响模型的运动状态。
    Scale:比例信息,用于更改模型的比例。
    isFitGround(默认值为False):是否适应地面。如果设置为 True,则模型会根据地面结构进行调整;如果设置为 False,则不会进行调整。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,上述信息将仅应用于指定的窗口。如果 windowID 为负数,则这些信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create 100 vehicles once
    #struct Multi3DData100New {
    #    int checksum;
    #    uint16 copterID[100];
    #    uint16 vehicleType[100];
    #    float PosE[300];
    #    float AngEuler[300];
    #    uint16 Scale[300];
    #    float MotorRPMSMean[100];
    #}
    #checksum是数据校验位,1234567890表示正常数据,1234567891表示飞机始终贴合地面
    #copterID是100维整型数组,飞机ID,这个从1给到100即可,如果ID给0则不显示次飞机
    #vehicleType是100维整型数组,飞机类型,四旋翼给3即可
    #MotorRPMSMean是100维数组,飞机螺旋桨转速,单位RPM,四旋翼默认给1000即可
    #PosE是300维数组,飞机位置,可以随机生成,单位是m
    #AngEuler是300维数组,飞机姿态角,单位弧度,默认都给0,表示正常放置
    #Scale是300维的数组,数据是xyz显示的尺寸*100,默认都给100表示实际大小即1倍
    
+ 函数调用图:

◆ sendUE4PosScale2Ground()

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

在指定位置创建/更新模型

  • 参数
    copterID(默认值为1):飞行器的ID,用于指定要创建或更新状态的飞行器。
    vehicleType(默认值为3):飞行器的类型,根据实际情况可以指定不同的类型来创建或更新不同类型的飞行器模型。
    MotorRPMSMean(默认值为0):电机转速的均值,用于控制电机的转速,影响模型的运动状态。
    PosE(默认值为[0, 0, 0]):位置信息,表示飞行器当前的位置。这是一个包含三个元素的列表,分别表示飞行器在 x、y、z 坐标轴上的位置。
    AngEuler(默认值为[0, 0, 0]):欧拉角信息,表示飞行器当前的姿态。这是一个包含三个元素的列表,分别表示飞行器的俯仰、滚转和偏航角度。
    Scale(默认值为[1, 1, 1]):比例信息,用于更改模型的比例。这是一个包含三个元素的列表,分别表示飞行器在 x、y、z 轴上的比例。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,位置、姿态和比例信息将仅应用于指定的窗口。如果 windowID 为负数,则位置、姿态和比例信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create a new 3D model or update the old model's states with changing the scale
    checksum =1234567891 is adopted here to tell UE4 to genearete a object always fit the ground
    struct SOut2SimulatorSimple1 {
        int checkSum; //1234567890 for normal object, 1234567891 for fit ground object
        int copterID;  //Vehicle ID
        int vehicleType;  //Vehicle type
        float MotorRPMSMean; // mean motor speed
        float PosE[3];   //NED vehicle position in earth frame (m)
        float AngEuler[3];  //Vehicle Euler angle roll pitch yaw (rad) in x y z
        float Scale[3];
    }  3i10f
    
+ 函数调用图:

◆ sendUE4PosScalePwm20()

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

创建20个Copter

  • 参数
    copterID:飞行器的ID,用于指定要创建或更新状态的飞行器。这是一个任意类型的参数,表示飞行器的标识。
    vehicleType:飞行器的类型,根据实际情况可以指定不同的类型来创建或更新不同类型的飞行器模型。
    PosE:位置信息,表示飞行器当前的位置。
    AngEuler:欧拉角信息,表示飞行器当前的姿态。
    Scale:比例信息,用于更改模型的比例。
    PWMs(默认值为0):PWM(脉宽调制)信息,表示飞行器的电机控制信号。
    isFitGround(默认值为False):是否适应地面。如果设置为 True,则模型会根据地面结构进行调整;如果设置为 False,则不会进行调整。
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,上述信息将仅应用于指定的窗口。如果 windowID 为负数,则这些信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create 20 vehicles once
    # struct Multi3DData2New {
    #   int checksum;
    #   uint16 copterID[20];
    #   uint16 vehicleType[20];
    #   float PosE[60];
    #   float AngEuler[60];
    #   uint16 Scale[60];
    #   float PWMs[160];
    # }
    #checksum是数据校验位,1234567890表示正常数据,1234567891表示飞机始终贴合地面
    #copterID是20维整型数组,飞机ID,这个从1给到20即可,如果ID给0则不显示次飞机
    #vehicleType是20维整型数组,飞机类型,四旋翼给3即可
    #PosE是60维数组,飞机位置,可以随机生成,单位是m
    #AngEuler是60维数组,飞机姿态角,单位弧度,默认都给0,表示正常放置
    #Scale是300维的数组,数据是xyz显示的尺寸*100,默认都给100表示实际大小即1倍
    #PWMs是160维数组,对应20个飞机各8个旋翼转速,单位RPM,四旋翼默认给1000即可
    
+ 函数调用图:

◆ sendUE4PosSimple()

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

创建/更新模型

  • 参数
    copterID:飞行器的ID,用于指定要创建或更新状态的飞行器。这是一个任意类型的参数,表示飞行器的标识。
    vehicleType:飞行器的类型,根据实际情况可以指定不同的类型来创建或更新不同类型的飞行器模型。
    PWMs(默认值[0,0,0,0,0,0,0,0]):PWM(脉宽调制)信息,表示飞行器的电机控制信号。
    VelE:速度信息,表示飞行器当前的速度。
    PosE:位置信息,表示飞行器当前的位置。
    AngEuler:欧拉角信息,表示飞行器当前的姿态。
    runnedTime(默认值为-1):时间戳,以毫秒为单位
    windowID(默认值为-1):窗口的ID。如果指定了窗口ID,上述信息将仅应用于指定的窗口。如果 windowID 为负数,则这些信息将应用于所有窗口。
    send the position & angle information to RflySim3D to create a new 3D model or update the old model's states
    //输出到模拟器的数据
    struct SOut2SimulatorSimpleTime {
        int checkSum;
        int copterID;  //Vehicle ID
        int vehicleType;  //Vehicle type
        float PWMs[8];
        float PosE[3];   //NED vehicle position in earth frame (m)
        float VelE[3];
        float AngEuler[3];  //Vehicle Euler angle roll pitch yaw (rad) in x y z
        double runnedTime; //Current Time stamp (s)
    };
    struct.pack 3i17f1d
    
+ 函数调用图:

◆ sendUE4SetStencilValueByActorName()

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

将物体的模板值发送给UE(由Actor)

  • 参数
    ActornameActor名字
    StencilValue物体的模板值
    is_name_regex物体是否是Actor
    windowIDRflySim3D窗口ID
+ 函数调用图:

◆ sendUE4SetStencilValueByCopterID()

sendUE4SetStencilValueByCopterID ( self,
CopterID,
StencilValue,
windowID = -1 )

将物体的模板值发送给UE(由CopterID)

  • 参数
    CopterID
    StencilValue
    windowID
+ 函数调用图:

◆ sendUE4SetStencilValueByMeshComponentName()

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

将物体的模板值发送给UE(由mesh)

  • 参数
    MeshnameMeshComponent名字
    StencilValue物体的模板值
    is_name_regex物体是否是Actor
    windowIDRflySim3D窗口ID
+ 函数调用图:

◆ SetUE4RadianceValue()

SetUE4RadianceValue ( self,
UEObjectName,
windows = -1 )

Radiation 类计算得到目标的辐射值设置给UE(只要名字中某段能匹配就会设置)

  • 参数
    UEObjectName目标物体的名称(指向mesh或actor)
    windows通过 get_new_temp_emiss_from_radiance 获取物体的ID(0~255),然后这个ID传给UE,作为物体的自定义模板值,然后UE根据ID和颜色的映射表, 给出该物体的颜色(如果是分割图),或者直接由ID给出一个灰度图(如果是红外图)。
    红外图是根据物体的温度和发射率计算出的辐射功率密度的灰度图,它反映了物体在红外波段的辐射特性。分割图是根据物体的ID和颜色的映射表生成的彩色图,它可以区分不同的物体,并提供物体的位置信息。

每个颜色占用4个像素,所以一共是256种颜色,对应0~255的ID,ID与颜色的映射关系就是简单的从左到右的顺序对应:Color= palette[0, (ID+1)*4-1]。

ID与颜色映射表,一共是1×1024个像素


◆ SetUE4RadianceValue__All()

SetUE4RadianceValue__All ( self,
windows = -1 )

设置 tempEmissivity 数组中所有物体的辐射值给UE4

  • 参数
    windowsSetUE4RadianceValue 一样,但它设置 Radiation.tempEmissivity 中所有物体的辐射值

◆ UE4MsgRecLoop()

UE4MsgRecLoop ( self)

监听循环

UE4 message listening dead loop
它是监听224.0.0.10:20006,以及自身的20006端口的处理函数,用于处理RflySim3D或CopterSim返回的消息,一共有6种消息:
1)  长度为12字节的CopterSimCrash:
struct CopterSimCrash {
    int checksum;
    int CopterID;
    int TargetID;
}
由RflySim3D返回的碰撞数据,RflySim3D中按P键时RflySim3D会开启碰撞检测模式,如果发生了碰撞,会传回这个数据,P+数字可以选择发送模式(0本地发送,1局域网发送,2局域网只碰撞时发送),默认为本地发送。
2)  长度为120字节的PX4SILIntFloat:
struct PX4SILIntFloat{
    int checksum;//1234567897
    int CopterID;
    int inSILInts[8];
    float inSILFLoats[20];
};
3)  长度为160字节的reqVeCrashData:
struct reqVeCrashData {
    int checksum; //数据包校验码1234567897
    int copterID; //当前飞机的ID号
    int vehicleType; //当前飞机的样式
    int CrashType;//碰撞物体类型,-2表示地面,-1表示场景静态物体,0表示无碰撞,1以上表示被碰飞机的ID号
    double runnedTime; //当前飞机的时间戳
    float VelE[3]; // 当前飞机的速度
    float PosE[3]; //当前飞机的位置
    float CrashPos[3];//碰撞点的坐标
    float targetPos[3];//被碰物体的中心坐标
    float AngEuler[3]; //当前飞机的欧拉角
    float MotorRPMS[8]; //当前飞机的电机转速
    float ray[6]; //飞机的前后左右上下扫描线
    char CrashedName[20] = {0};//被碰物体的名字
}
前面介绍过这个类了,在开启数据回传的情况下,RflySim3D会为所有Copter发送reqVeCrashData(数据变化时发送,每秒一次)。
4)  长度为56字节的CameraData:
struct CameraData { //56
    int checksum = 0;//1234567891
    int SeqID; //相机序号
    int TypeID;//相机类型
    int DataHeight;//像素高
    int DataWidth;//像素宽
    float CameraFOV;//相机视场角
    float PosUE[3]; //相机中心位置
    float angEuler[3];//相机欧拉角
    double timestmp;//时间戳
};
RflySim3D根据reqCamCoptObj函数发送的命令,定时返回的该结构体,该程序接收到后会存放在self.CamDataVect中。
5)  长度为64字节的CoptReqData:
struct CoptReqData { //64
    int checksum = 0; //1234567891作为校验
    int CopterID;//飞机ID
    float PosUE[3]; //物体中心位置(人为三维建模时指定,姿态坐标轴,不一定在几何中心)
    float angEuler[3];//物体欧拉角
    float boxOrigin[3];//物体几何中心坐标
    float BoxExtent[3];//物体外框长宽高的一半
    double timestmp;//时间戳
};
RflySim3D根据reqCamCoptObj函数发送的命令,定时返回的该结构体,该程序接收到后会存放在self.CoptDataVect中。
6)  长度为96字节的ObjReqData:
struct ObjReqData { //96
    int checksum = 0; //1234567891作为校验
    int seqID = 0;
    float PosUE[3]; //物体中心位置(人为三维建模时指定,姿态坐标轴,不一定在几何中心)
    float angEuler[3];//物体欧拉角
    float boxOrigin[3];//物体几何中心坐标
    float BoxExtent[3];//物体外框长宽高的一半
    double timestmp;//时间戳
    char ObjName[32] = { 0 };//碰物体的名字
};
RflySim3D根据reqCamCoptObj函数发送的命令,定时返回的该结构体,该程序接收到后会存放在self.ObjDataVect中。
收到的数据可以使用getCamCoptObj函数进行获取。
+ 这是这个函数的调用关系图:

该类的文档由以下文件生成: