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

VisionCaptureApi结构体类,用于从 UE4 请求图像数据,并可以选择使用 ROS 进行传感器数据的发布和接收 更多...

Public 成员函数

 __del__ (self)
 VisionCaptureApi的析构函数
 
 euler2quat (self, r, p, y, str copter, coordinate_frame="global")
 
 __init__ (self, ip="127.0.0.1")
 VisionCaptureApi的构造函数
 
 addVisSensor (self, vsr=VisionSensorReq())
 添加一个新的 VisionSensorReq 结构体到 VisSensor 列表中
 
 addVisSensor (self, vsr=VisionSensorReqNew())
 添加一个新的 VisionSensorReqNew 结构体到 VisSensorNew 列表中
 
 sendReqToCopterSim (self, srcs=SensorReqCopterSim(), copterID=1, IP='127.0.0.1')
 发送一个 SensorReqCopterSim 类的 UDP 消息给 CopterSim 以请求传感器数据
 
 sendImuReqCopterSim (self, copterID=1, IP="127.0.0.1", freq=200)
 发送请求给 CopterSim 以获取 IMU 数据,并初始化一个线程监听 IMU 数据
 
 sendImuReqClient (self, copterID=1, IP="127.0.0.1", freq=200)
 发送命令到 CopterSim 请求IMU数据
 
 sendImuReqServe (self, copterID=1)
 发送命令到 CopterSim 请求IMU数据,并初始化一个线程监听IMU数据
 
 getIMUDataLoop (self, copterID)
 接收来自CopterSim(模拟飞行器)的IMU(惯性测量单元)数据,
 
 get_all_ip (self)
 获取本机所有 IP 地址
 
 isIpLocal (self, IP)
 判断IP地址是否为本地IP
 
 StartTimeStmplisten (self)
 通过UDP套接字监听特定端口(20005端口),以获取CopterID的时间戳信息
 
 getTimeStmp (self, CopterID=1)
 获取指定飞机的时间戳指针,
 
 endTimeStmplisten (self)
 停止时间戳监听功能
 
 TimeStmploop (self)
 用于监听来自特定UDP端口的时间戳消息,并根据接收到的消息更新时间戳信息
 
 sendUpdateUEImage (self, vs=VisionSensorReq(), windID=0, IP="")
 向指定IP地址和端口发送图像更新请求
 
 sendUpdateUEImaged (self, vs=VisionSensorReqNew(), windID=0, IP="")
 向指定IP地址和端口发送图像更新请求
 
 sendUE4Cmd (self, cmd, windowID=-1)
 用于发送命令到UE4应用程序的一个或多个窗口。 它将命令转换成合适的格式,并通过UDP协议发送到指定的IP地址和端口
 
 sendReqToUE4 (self, windID=0, IP="")
 用于将视觉传感器列表发送到 RflySim3D 以请求图像
 
 img_udp_thrdNew (self, udpSok, idx, typeID)
 定义了一个线程,用于通过 UDP 接收图像数据包,并根据特定协议解析和处理这些数据包
 
 img_mem_thrd (self, idxList)
 从共享内存读取数据并进行处理,以不同的传感器类型来解析数据
 
 startImgCap (self, isRemoteSend=False)
 用于启动图像捕获的循环过程,先是一些初始化,然后根据SendProtocol[0]来判断是内存共享还是UDP传输,分别进行相应的处理函数
 
 sendImgUDPNew (self, idx)
 用于图像数据的UDP发送
 
 sendImgBuffer (self, idx, data)
 用于将图像数据分割为固定大小的数据包,并添加头部信息后发送 -
 
 jsonLoad (self, ChangeMode=-1, jsonPath="")
 用来从配置文件 Config.json 中加载相机配置信息,并根据配置信息创建相机列表 @ChangeMode(默认为-1) 转化模式
 
 stopRun (self)
 

Public 属性

 stopFlag
 
 ros_node
 
 time_record
 
 rostime
 
 udp_socket
 用于UDP通信的套接字
 
 udp_imu
 用于IMU数据的UDP套接字
 
 hostIp
 用于获取并存储本机电脑的IP地址
 
 VisSensor
 用于存储视觉传感器的列表
 
 VisSensorNew
 用于存储新添加的视觉传感器的列表
 
 Img
 用于存储从视觉传感器获取的图像数据的列表
 
 initPose
 
 Img_lock
 用于实现类似多线程的数据同步,防止多个线程同时访问图像数据
 
 ImgData
 用于存储图像数据的实际内容
 
 hasData
 用于存储布尔值列表,表示是否有新数据
 
 timeStmp
 用于存储时间戳的列表,用于记录每个传感器数据的时间
 
 imgStmp
 用于存储图像数据的时间戳列表
 
 rflyStartStmp
 用于存储 Rfly 仿真开始的时间戳列表
 
 IpList
 用于存储需要通信的目标 IP 地址列表
 
 portList
 用于存储需要通信的目标端口号列表
 
 hasReqUE4
 用于布尔值,表示是否已经向 UE4 请求了数据
 
 sleepCheck
 用于设定数据请求的时间间隔,单位为秒
 
 ip
 用于存储传入的 IP 地址
 
 isRemoteSend
 布尔值,表示是否启用远程发送
 
 RemotSendIP
 用于存储远程发送的目标 IP 地址
 
 isUE4DirectUDP
 布尔值,表示是否直接通过 UDP 与 UE4 进行通信
 
 hasIMUData
 用于布尔值,表示是否有新的 IMU 数据
 
 RflyTimeVect
 存储 Rfly 时间向量的列表,用于记录时间同步信息
 
# 为本机 RflyLocalIPVect
 存储本电脑的所有本地IP地址,用于判断数据是否来着本机
 
# 使用新版协议发送 isNewJson
 布尔值,表示是否使用新的 JSON 数据格式
 
 tTimeStmpFlag
 布尔值,表示时间戳标志位,用于时间同步的控制
 
 DistanceSensor
 
 startTime
 用于记录类实例化时的起始时间,用于计算运行时间
 
 isPrintTime
 布尔值,表示是否打印时间信息
 
 lastIMUTime
 记录最后一次接收到的 IMU 数据的时间
 
 sensors_num
 存储传感器的数量
 
 sensors_frame_id
 
 imu_frame_id
 
 imu_topic_name
 
 sensor_pub
 
 sensor_data
 
 cv_bridge
 
 topic_name
 
 imu
 
 tIMU
 
 udp_time
 
 tTimeStmp
 
 t_menRec
 

详细描述

VisionCaptureApi结构体类,用于从 UE4 请求图像数据,并可以选择使用 ROS 进行传感器数据的发布和接收

This is the API class for python to request image from UE4

构造及析构函数说明

◆ __del__()

__del__ ( self)

VisionCaptureApi的析构函数

用于清理ROS资源。在对象销毁时调用。如果启用了ROS且使用的是ROS2,则销毁ROS节点并关闭rclpy

◆ __init__()

__init__ ( self,
ip = "127.0.0.1" )

VisionCaptureApi的构造函数

参数
初始化各种类属性和套接字,用于与UE4和ROS进行通信

成员函数说明

◆ addVisSensor() [1/2]

addVisSensor ( self,
vsr = VisionSensorReq() )

添加一个新的 VisionSensorReq 结构体到 VisSensor 列表中

Add a new VisionSensorReq struct to the list

◆ addVisSensor() [2/2]

addVisSensor ( self,
vsr = VisionSensorReqNew() )

添加一个新的 VisionSensorReqNew 结构体到 VisSensorNew 列表中

和前一个析构函数名称一样,这个会替代掉上一个

Add a new VisionSensorReq struct to the list

◆ endTimeStmplisten()

endTimeStmplisten ( self)

停止时间戳监听功能

+ 这是这个函数的调用关系图:

◆ get_all_ip()

get_all_ip ( self)

获取本机所有 IP 地址

  • 返回
    返回本地IP地址列表。

◆ getIMUDataLoop()

getIMUDataLoop ( self,
copterID )

接收来自CopterSim(模拟飞行器)的IMU(惯性测量单元)数据,

并根据需要将其转换并发布到ROS(机器人操作系统)

+ 这是这个函数的调用关系图:

◆ getTimeStmp()

getTimeStmp ( self,
CopterID = 1 )

获取指定飞机的时间戳指针,

◆ img_mem_thrd()

img_mem_thrd ( self,
idxList )

从共享内存读取数据并进行处理,以不同的传感器类型来解析数据

参数
mmList一个存储内存映射对象 (mmap) 的列表,用于管理多个传感器的共享内存映射
dim表示数据的维度
dimSize表示每个维度的数据大小
otherSize表示除主要数据外的额外数据大小(以字节为单位)

与上面的img_udp_thrdNew析构函数主要区别就在与,这个析构函数是mm作为数据流,img_udp_thrdNew是data_total

值得注意的是,mm的获取通过共享内存,通过mm = mmap.mmap()函数实现

而data_total数据来源于buf, addr = udpSok.recvfrom()得到的buf(也就是通过UDP传输)

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ img_udp_thrdNew()

img_udp_thrdNew ( self,
udpSok,
idx,
typeID )

定义了一个线程,用于通过 UDP 接收图像数据包,并根据特定协议解析和处理这些数据包

参数
CheckSum用于存储校验和
CheckSumSize校验和的大小(字节数)
fhead_len数据包头的长度
imgPackUnit图像数据包的单位大小
Frameid帧 ID,用于区分不同帧的数据包
seqList存储数据包的序号
dataList存储数据包的书局
timeList存储数据包的时间戳
recPackNum记录接收到的包数量
timeStmpStore存储时间戳
no_fid_len不包含帧 ID 的包头长度
fid_len包含帧 ID 的包头长度
dd临时存储解析后的数据

整个函数处理的过程主要为一下部分:先是数据对齐,也就是会按照数据包的形式接收数据,需要对数据包进行校验, 对不符合的数据丢弃,对乱序的数据正确排序等等,也就是尽可能恢复成可用的有效的数据包

其次,当数据包校验后,开始对齐数据的时间戳,主要分为两部分,一是图片类型的,二是点云类型的 特别说明的是,点云类型处理中,还对数据进行了归一化,然后乘上配置系数,从而得到正确的数值 (需要理解的是,传感器获得的数据并不是对应仿真或者现实世界的,需要转化为需要的坐标系下的数据)

接着是测距传感器和深度转点云的传感器处理,都是从数据中提出相应的数值进行赋值,深度转点云后面还有上述点云归一化后的处理

再到后面就是给话题名赋值,每一个typeid对应的话题名称是什么,进行赋值

最后就是对点云数据进行赋值,设置了一个pointcloud2类型的msg,进行赋值。然后区分ros版本,把数据发布出去

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ isIpLocal()

isIpLocal ( self,
IP )

判断IP地址是否为本地IP

  • 返回
    返回本地IP地址列表。
+ 这是这个函数的调用关系图:

◆ jsonLoad()

jsonLoad ( self,
ChangeMode = -1,
jsonPath = "" )

用来从配置文件 Config.json 中加载相机配置信息,并根据配置信息创建相机列表 @ChangeMode(默认为-1) 转化模式

  • -1表示默认不切换模式
    • >=0表示将SendProtocol[0]设置为转化模式
      参数
      jsonPath(默认为空)配置文件的路径 先选中json文件,然后读取文件内容,检查内容是否符合格式(是否为int类型等等),最后赋值
      load config.json file to create camera list for image capture,
      if ChangeMode>=0, then the SendProtocol[0] will be set to ChangeMode to change the transfer style
      
+ 函数调用图:

◆ sendImgBuffer()

sendImgBuffer ( self,
idx,
data )

用于将图像数据分割为固定大小的数据包,并添加头部信息后发送 -

参数
idx图像的索引
data图像数据
  • imgPackUnit 定义了每个数据包的最大大小
  • imgLen 表示整个图像数据的长度,即数据流的总字节数
  • imgpackNum 表示将图像数据分割成的数据包数量
  • CheckSum 用作校验和,确保数据在传输过程中的完整性
  • timeStmpSend 表示发送图像数据时的时间戳
返回
+ 这是这个函数的调用关系图:

◆ sendImgUDPNew()

sendImgUDPNew ( self,
idx )

用于图像数据的UDP发送

  • 参数
    idx图像的索引
    返回
+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ sendImuReqClient()

sendImuReqClient ( self,
copterID = 1,
IP = "127.0.0.1",
freq = 200 )

发送命令到 CopterSim 请求IMU数据

send command to CopterSim to request IMU data
copterID is the CopterID
IP is the IP of the PC to send request to
port is the base port that CopterSim send to
(Actual port for a vehicle = baseport + copterID -1)
freq is the frequency of the send data
+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ sendImuReqCopterSim()

sendImuReqCopterSim ( self,
copterID = 1,
IP = "127.0.0.1",
freq = 200 )

发送请求给 CopterSim 以获取 IMU 数据,并初始化一个线程监听 IMU 数据

send command to CopterSim to request IMU data
copterID is the CopterID
IP is the IP of the PC to send request to
port is the base port that CopterSim send to
(Actual port for a vehicle = baseport + copterID -1)
freq is the frequency of the send data
This function will init a thread to listen IMU data
+ 函数调用图:

◆ sendImuReqServe()

sendImuReqServe ( self,
copterID = 1 )

发送命令到 CopterSim 请求IMU数据,并初始化一个线程监听IMU数据

send command to CopterSim to request IMU data
copterID is the CopterID
port is the base port that CopterSim send to
(Actual port for a vehicle = baseport + copterID -1)
This function will init a thread to listen IMU data
+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ sendReqToCopterSim()

sendReqToCopterSim ( self,
srcs = SensorReqCopterSim(),
copterID = 1,
IP = '127.0.0.1' )

发送一个 SensorReqCopterSim 类的 UDP 消息给 CopterSim 以请求传感器数据

send UDP message SensorReqCopterSim to CopterSim to request a sensor data
the copterID specify the index of CopterSim to request
+ 这是这个函数的调用关系图:

◆ sendReqToUE4()

sendReqToUE4 ( self,
windID = 0,
IP = "" )

用于将视觉传感器列表发送到 RflySim3D 以请求图像

  • 参数
    windID(默认为0) 窗口号
    IP(默认为空)目标IP地址
    返回
    send VisSensor list to RflySim3D to request image
    windID specify the index of RflySim3D window to send image
    
+ 函数调用图:

◆ sendUE4Cmd()

sendUE4Cmd ( self,
cmd,
windowID = -1 )

用于发送命令到UE4应用程序的一个或多个窗口。 它将命令转换成合适的格式,并通过UDP协议发送到指定的IP地址和端口

+ 这是这个函数的调用关系图:

◆ sendUpdateUEImage()

sendUpdateUEImage ( self,
vs = VisionSensorReq(),
windID = 0,
IP = "" )

向指定IP地址和端口发送图像更新请求

  • 参数
    vs视觉传感器请求对象,用于初始化各种与摄像机和传感器相关的参数
    windID(默认为0) 视觉传感器ID
    IP(默认为空)目标IP地址
    返回

◆ sendUpdateUEImaged()

sendUpdateUEImaged ( self,
vs = VisionSensorReqNew(),
windID = 0,
IP = "" )

向指定IP地址和端口发送图像更新请求

  • 参数
    vs视觉传感器请求对象,用于初始化各种与摄像机和传感器相关的参数
    windID(默认为0) 视觉传感器ID
    IP(默认为空)目标IP地址
    返回

◆ startImgCap()

startImgCap ( self,
isRemoteSend = False )

用于启动图像捕获的循环过程,先是一些初始化,然后根据SendProtocol[0]来判断是内存共享还是UDP传输,分别进行相应的处理函数

memList 存储需要从内存接收图像的传感器索引列表

udpList 存储需要从UDP接收图像的传感器索引列表

参数
isRemoteSend(默认为False)是否将图像从共享内存转发到UDP端口
  • False表示将将图像从共享内存转发到UDP端口
  • True表示将将图像从共享内存转发到UDP端口
start loop to receive image from UE4,
isRemoteSend=true will forward image from memory to UDP port
+ 函数调用图:

◆ StartTimeStmplisten()

StartTimeStmplisten ( self)

通过UDP套接字监听特定端口(20005端口),以获取CopterID的时间戳信息

Start to listen to 20005 port to get RflyTimeStmp of CopterID
+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ TimeStmploop()

TimeStmploop ( self)

用于监听来自特定UDP端口的时间戳消息,并根据接收到的消息更新时间戳信息

+ 函数调用图:
+ 这是这个函数的调用关系图:

类成员变量说明

◆ hasData

hasData

用于存储布尔值列表,表示是否有新数据

◆ hasIMUData

hasIMUData

用于布尔值,表示是否有新的 IMU 数据

◆ hasReqUE4

hasReqUE4

用于布尔值,表示是否已经向 UE4 请求了数据

◆ hostIp

hostIp

用于获取并存储本机电脑的IP地址

◆ Img

Img

用于存储从视觉传感器获取的图像数据的列表

◆ Img_lock

Img_lock

用于实现类似多线程的数据同步,防止多个线程同时访问图像数据

◆ ImgData

ImgData

用于存储图像数据的实际内容

◆ imgStmp

imgStmp

用于存储图像数据的时间戳列表

◆ ip

ip

用于存储传入的 IP 地址

◆ IpList

IpList

用于存储需要通信的目标 IP 地址列表

◆ isNewJson

# 使用新版协议发送 isNewJson

布尔值,表示是否使用新的 JSON 数据格式

◆ isPrintTime

isPrintTime

布尔值,表示是否打印时间信息

◆ isRemoteSend

isRemoteSend

布尔值,表示是否启用远程发送

◆ isUE4DirectUDP

isUE4DirectUDP

布尔值,表示是否直接通过 UDP 与 UE4 进行通信

◆ lastIMUTime

lastIMUTime

记录最后一次接收到的 IMU 数据的时间

◆ portList

portList

用于存储需要通信的目标端口号列表

◆ RemotSendIP

RemotSendIP

用于存储远程发送的目标 IP 地址

◆ RflyLocalIPVect

# 为本机 RflyLocalIPVect

存储本电脑的所有本地IP地址,用于判断数据是否来着本机

◆ rflyStartStmp

rflyStartStmp

用于存储 Rfly 仿真开始的时间戳列表

◆ RflyTimeVect

RflyTimeVect

存储 Rfly 时间向量的列表,用于记录时间同步信息

◆ sensors_num

sensors_num

存储传感器的数量

◆ sleepCheck

sleepCheck

用于设定数据请求的时间间隔,单位为秒

◆ startTime

startTime

用于记录类实例化时的起始时间,用于计算运行时间

◆ timeStmp

timeStmp

用于存储时间戳的列表,用于记录每个传感器数据的时间

◆ tTimeStmpFlag

tTimeStmpFlag

布尔值,表示时间戳标志位,用于时间同步的控制

◆ udp_imu

udp_imu

用于IMU数据的UDP套接字

◆ udp_socket

udp_socket

用于UDP通信的套接字

◆ VisSensor

VisSensor

用于存储视觉传感器的列表

◆ VisSensorNew

VisSensorNew

用于存储新添加的视觉传感器的列表


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