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__ | ( | self | ) |
VisionCaptureApi的析构函数
用于清理ROS资源。在对象销毁时调用。如果启用了ROS且使用的是ROS2,则销毁ROS节点并关闭rclpy
__init__ | ( | self, | |
ip = "127.0.0.1" ) |
VisionCaptureApi的构造函数
初始化各种类属性和套接字,用于与UE4和ROS进行通信 |
addVisSensor | ( | self, | |
vsr = VisionSensorReq() ) |
添加一个新的 VisionSensorReq 结构体到 VisSensor 列表中
Add a new VisionSensorReq struct to the list
addVisSensor | ( | self, | |
vsr = VisionSensorReqNew() ) |
添加一个新的 VisionSensorReqNew 结构体到 VisSensorNew 列表中
和前一个析构函数名称一样,这个会替代掉上一个
Add a new VisionSensorReq struct to the list
endTimeStmplisten | ( | self | ) |
停止时间戳监听功能
getIMUDataLoop | ( | self, | |
copterID ) |
接收来自CopterSim(模拟飞行器)的IMU(惯性测量单元)数据,
并根据需要将其转换并发布到ROS(机器人操作系统)
getTimeStmp | ( | self, | |
CopterID = 1 ) |
获取指定飞机的时间戳指针,
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 | ( | 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版本,把数据发布出去
jsonLoad | ( | self, | |
ChangeMode = -1, | |||
jsonPath = "" ) |
用来从配置文件 Config.json 中加载相机配置信息,并根据配置信息创建相机列表 @ChangeMode(默认为-1) 转化模式
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 | ( | self, | |
idx, | |||
data ) |
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 | ( | 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 | ( | 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 | ( | 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 | ( | self, | |
windID = 0, | |||
IP = "" ) |
sendUE4Cmd | ( | self, | |
cmd, | |||
windowID = -1 ) |
用于发送命令到UE4应用程序的一个或多个窗口。 它将命令转换成合适的格式,并通过UDP协议发送到指定的IP地址和端口
sendUpdateUEImage | ( | self, | |
vs = VisionSensorReq(), | |||
windID = 0, | |||
IP = "" ) |
sendUpdateUEImaged | ( | self, | |
vs = VisionSensorReqNew(), | |||
windID = 0, | |||
IP = "" ) |
startImgCap | ( | self, | |
isRemoteSend = False ) |
用于启动图像捕获的循环过程,先是一些初始化,然后根据SendProtocol[0]来判断是内存共享还是UDP传输,分别进行相应的处理函数
memList 存储需要从内存接收图像的传感器索引列表
udpList 存储需要从UDP接收图像的传感器索引列表
isRemoteSend(默认为False) | 是否将图像从共享内存转发到UDP端口
|
start loop to receive image from UE4, isRemoteSend=true will forward image from memory to UDP port
StartTimeStmplisten | ( | self | ) |
通过UDP套接字监听特定端口(20005端口),以获取CopterID的时间戳信息
Start to listen to 20005 port to get RflyTimeStmp of CopterID
TimeStmploop | ( | self | ) |
用于监听来自特定UDP端口的时间戳消息,并根据接收到的消息更新时间戳信息
hasData |
用于存储布尔值列表,表示是否有新数据
hasIMUData |
用于布尔值,表示是否有新的 IMU 数据
hasReqUE4 |
用于布尔值,表示是否已经向 UE4 请求了数据
hostIp |
用于获取并存储本机电脑的IP地址
Img |
用于存储从视觉传感器获取的图像数据的列表
Img_lock |
用于实现类似多线程的数据同步,防止多个线程同时访问图像数据
ImgData |
用于存储图像数据的实际内容
imgStmp |
用于存储图像数据的时间戳列表
ip |
用于存储传入的 IP 地址
IpList |
用于存储需要通信的目标 IP 地址列表
# 使用新版协议发送 isNewJson |
布尔值,表示是否使用新的 JSON 数据格式
isPrintTime |
布尔值,表示是否打印时间信息
isRemoteSend |
布尔值,表示是否启用远程发送
isUE4DirectUDP |
布尔值,表示是否直接通过 UDP 与 UE4 进行通信
lastIMUTime |
记录最后一次接收到的 IMU 数据的时间
portList |
用于存储需要通信的目标端口号列表
RemotSendIP |
用于存储远程发送的目标 IP 地址
# 为本机 RflyLocalIPVect |
存储本电脑的所有本地IP地址,用于判断数据是否来着本机
rflyStartStmp |
用于存储 Rfly 仿真开始的时间戳列表
RflyTimeVect |
存储 Rfly 时间向量的列表,用于记录时间同步信息
sensors_num |
存储传感器的数量
sleepCheck |
用于设定数据请求的时间间隔,单位为秒
startTime |
用于记录类实例化时的起始时间,用于计算运行时间
timeStmp |
用于存储时间戳的列表,用于记录每个传感器数据的时间
tTimeStmpFlag |
布尔值,表示时间戳标志位,用于时间同步的控制
udp_imu |
用于IMU数据的UDP套接字
udp_socket |
用于UDP通信的套接字
VisSensor |
用于存储视觉传感器的列表
VisSensorNew |
用于存储新添加的视觉传感器的列表