跳到主要内容

collect_sensor_data()

实例方法 | GF225 传感器类

📖 方法说明

采集传感器的视触觉数据,包括图像、深度图、Marker 点位移、滑动状态等多维度信息。这是获取传感器数据的核心方法。


📝 语法

data = sensor.collect_sensor_data(*data_types, frame=None)

🔧 参数

参数名类型默认值说明
*data_typesint-一个或多个 GFDataType 枚举值,指定需要采集的数据类型
framenp.ndarray | NoneNone离线数据处理时输入的图像
shape 为 (H, W, 3)
在线模式时设为 None

📤 返回类型

dict - 包含请求的数据类型及其对应数据的字典

可用的数据类型(GFDataType)

枚举值数据类型Shape说明
TIME_STAMPint-毫秒级时间戳
CALIBRATE_IMGnp.ndarray, uint8(H, W, 3)校准图像
RAW_IMGnp.ndarray, uint8(H, W, 3)原始采集图像
WARPED_IMGnp.ndarray, uint8(H, W, 3)畸变校正后的图像
DIFF_IMGnp.ndarray, uint8(H, W, 3)差分图(当前图像与校准图像的差异)
MARKER_IMGnp.ndarray, uint8(H, W, 3)Marker 可视化图像
DEPTH_MAPnp.ndarray, float64(H, W)深度图
MARKER_ORIGIN_VECTORnp.ndarray, float64(N, M, 2)初始 Marker 坐标
MARKER_CURRENT_VECTORnp.ndarray, float64(N, M, 2)当前 Marker 坐标
MARKER_OFFSET_VECTORnp.ndarray, float64(N, M, 2)Marker 位移向量
XYZ_VECTORnp.ndarray, float64(N, M, 3)三维坐标数据
FORCE6D_VECTORnp.ndarray, float64(6,)六维力信息: Fx,Fy,Fz,Mx,My,Mz
SLIP_STATEIntEnum-滑动状态

滑动状态(SLIP_STATE)

枚举值说明
NO_OBJ无物体接触
CONTACT初次接触
STEADY_HOLD稳定保持
INCIPIENT_SLIP初始滑移
PARTIAL_SLIP部分滑移
COMPLETE_SLIP完全滑移

💡 示例代码

采集单个数据类型

from pyvitaisdk import GF225, VTSDeviceFinder, GFDataType

# 初始化传感器
finder = VTSDeviceFinder()
devices = finder.get_devices()
sensor = GF225(devices[0])
sensor.calibrate()

# 采集校正后的图像
data = sensor.collect_sensor_data(GFDataType.WARPED_IMG)
warped_img = data[GFDataType.WARPED_IMG]
print(f"图像尺寸: {warped_img.shape}")

# 释放资源
sensor.release()

采集多种数据类型

from pyvitaisdk import GF225, VTSDeviceFinder, GFDataType
import cv2

finder = VTSDeviceFinder()
devices = finder.get_devices()
sensor = GF225(devices[0])
sensor.calibrate()

datatypes = [
GFDataType.WARPED_IMG,
GFDataType.DEPTH_MAP,
GFDataType.SLIP_STATE,
GFDataType.MARKER_OFFSET_VECTOR
]

# 同时采集多种数据
data = sensor.collect_sensor_data(*datatypes)

# 访问不同的数据
warped_img = data[GFDataType.WARPED_IMG]
depth_map = data[GFDataType.DEPTH_MAP]
slip_state = data[GFDataType.SLIP_STATE]
marker_offset = data[GFDataType.MARKER_OFFSET_VECTOR]


print(f"校正图像尺寸: {warped_img.shape}")
print(f"深度图尺寸: {depth_map.shape}")
print(f"滑动状态: {slip_state.name}")
print(f"Marker偏移向量: {marker_offset.shape}")

# 可视化
cv2.imshow("warped_img", warped_img)
cv2.waitKey(1)

sensor.release()

离线数据处理

import cv2
from pyvitaisdk import GF225, GFDataType

# 离线模式初始化
sensor = GF225(config=None)

# 加载校准图像并校准
calib_img = cv2.imread("calib.jpg")
sensor.calibrate(calib_img=calib_img)

# 加载要处理的图像
frame = cv2.imread("test_frame.jpg")

# 离线处理
data = sensor.collect_sensor_data(
GFDataType.DEPTH_MAP,
GFDataType.MARKER_OFFSET_VECTOR,
frame=frame
)

depth_map = data[GFDataType.DEPTH_MAP]
print(f"深度图已生成: {depth_map.shape}")

sensor.release()

⚠️ 注意事项

前置要求
  • 必须先调用 calibrate() 完成校准
  • 确保传感器已正确初始化
性能优化
  • 只请求需要的数据类型,避免不必要的计算
  • 对于高帧率应用,考虑减少同时请求的数据类型数量
数据说明
  • 深度图:值越大表示形变越大(接触压力越大)
  • Marker 偏移:单位为像素,表示 Marker 点的位移量
  • 滑动状态:实时检测物体的接触和滑动状态
离线模式注意
  • 离线处理时必须提供 frame 参数
  • 确保输入图像与校准图像来自相同的采集条件

🔗 相关方法

  • calibrate - 校准传感器(必须先调用)
  • GF225 - 初始化传感器
  • release - 释放传感器资源