![]() |
RflySimSDK v3.05
RflySimSDK说明文档
|
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) | |
__init__ | ( | self, | |
ip = "127.0.0.1" ) |
UE4CtrlAPI的构造函数
ip | 要连接的PC的IP地址,默认为"127.0.0.1" |
参数初始化: 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进行通信和控制的实例。
getCamCoptObj | ( | self, | |
type_id = 1, | |||
objName = 1 ) |
initUE4MsgRec | ( | self | ) |
reqCam | ( | self, | |
SeqIDList = [0], | |||
windowID = 0 ) |
请求相机数据。 参数: SeqIDList (list): 相机的序列ID列表。默认值为[0]。 windowID (int): 发送消息的RflySim3D窗口ID,默认是0号窗口。
reqCamCoptObj | ( | self, | |
type_id = 1, | |||
objName = 1, | |||
windowID = 0 ) |
请求场景内指定物体数据回传
type_id | |
objName | |
windowID |
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 | ( | self, | |
CopterIDList = [0], | |||
windowID = 0 ) |
请求带copter_id的目标数据。 参数: CopterIDList (list): copter_id的ID列表。默认值为[0]。 windowID (int): 发送消息的RflySim3D窗口ID,默认是0号窗口。
reqObj | ( | self, | |
ObjNameList = [''], | |||
windowID = 0 ) |
请求场景中自带的物体数据。 参数: ObjNameList (list): 物体名称的列表。默认值为['']。 windowID (int): 发送消息的RflySim3D窗口ID,默认是0号窗口。
sendUE4Attatch | ( | self, | |
CopterIDs, | |||
AttatchIDs, | |||
AttatchTypes, | |||
windowID = -1 ) |
设置在UE4中将一个或多个自建物体附加到其他物体上
CopterIDs | 要附加的飞机的ID列表,最大长度为25 |
AttatchIDs | 被附加的物体的ID列表,最大长度为25 |
AttatchTypes | 附加类型的列表,最大长度为25。附加类型包括:
|
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 | ( | 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 | ( | 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 | ( | 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 | ( | self, | |
CopterID = 0, | |||
Txt = "", | |||
fontSize = 30, | |||
RGB = [255, 0, 0], | |||
windowID = -1 ) |
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 | 显示标志。根据不同的值,有不同的显示效果:
|
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 | ( | 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 | ( | 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 | ( | 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 | ( | 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 | ( | 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 | ( | 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 | ( | 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 | ( | 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 | ( | 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 | ( | self, | |
Actorname, | |||
StencilValue, | |||
is_name_regex = False, | |||
windowID = -1 ) |
sendUE4SetStencilValueByCopterID | ( | self, | |
CopterID, | |||
StencilValue, | |||
windowID = -1 ) |
sendUE4SetStencilValueByMeshComponentName | ( | self, | |
Meshname, | |||
StencilValue, | |||
is_name_regex = False, | |||
windowID = -1 ) |
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给出一个灰度图(如果是红外图)。 |
每个颜色占用4个像素,所以一共是256种颜色,对应0~255的ID,ID与颜色的映射关系就是简单的从左到右的顺序对应:Color= palette[0, (ID+1)*4-1]。
SetUE4RadianceValue__All | ( | self, | |
windows = -1 ) |
设置 tempEmissivity 数组中所有物体的辐射值给UE4
windows | 与 SetUE4RadianceValue 一样,但它设置 Radiation.tempEmissivity 中所有物体的辐射值 |
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函数进行获取。