Smart/T-Vis 视触觉电子皮肤
**Smart/T-Vis 是戴盟推出的视触觉电子皮肤产品,由深圳市玄雅科技有限公司独家代理。**玄雅科技为用户提供产品咨询、选型对接与技术支持。
产品概述
Smart/T-Vis 让机器人不仅能够“看到”接触,还能进一步理解接触过程中发生了什么。
当物体与传感器接触时,Smart/T-Vis 会采集有效感知区域内的图像变化,并通过 dmrobotics 软件平台将这些变化转换为可直接使用的触觉数据。用户既可以查看接触图像,也可以获取接触位置的形变方向、按压深度、切向滑动趋势、受力分布、整体六维力和接触面积。
简单来说,普通相机记录的是物体外观,Smart/T-Vis 关注的则是物体接触传感器表面之后产生的细微变化。这些信息可以帮助机器人判断是否已经接触物体、接触发生在哪里、按压程度如何,以及接触过程中是否存在切向位移。
能感知哪些信息
| 感知结果 | 用户可以怎样理解 | SDK 接口与返回值 |
|---|---|---|
| 接触图像 | 查看传感器有效感知区域内的实时画面 | getInferImg() → (fid, DMTacImage) |
| 原始灰度图像 | 保留未经特征解算的原始数据,适合调试、记录和状态检查 | getRawImg() → (fid, DMTacImage) |
| 二维形变 | 观察传感器表面在图像平面内向哪个方向发生了位移,单位为 mm | getDeformation2D() → (fid, ndarray[H, W, 2]) |
| 法向形变 | 反映垂直于传感器表面的按压形变量,可理解为按压深度,单位为 mm | getDepth() → (fid, ndarray[H, W]) |
| 切向形变 | 反映沿传感器表面方向的形变,可用于分析横向移动或滑动趋势,单位为 mm | getShear() → (fid, ndarray[H, W, 2]) |
| 分布力 | 获取感知区域内各位置的三方向受力分布 | getDistributeForce() → (fid, ndarray[H, W, 3]) |
| 六维力 | 获取整体的三轴力与三轴力矩结果 | getForce() → (fid, ndarray[1, 6]) |
| 接触面积 | 获取物体与传感器表面的接触面积,单位为 mm² | getContactArea() → float |
其中,fid 是单调递增的帧号,用来判断当前是否为新数据;H 和 W 分别表示感知结果的高度和宽度。DMTacImage.img 保存 uint8 图像,形变与力场数据使用 float32 数组。
二维形变、法向形变和切向形变描述的是传感器表面的形变情况;分布力、六维力和接触面积则从受力与接触范围的角度描述同一次接触。实际项目可根据任务需要,只启用所需输出,以减少计算资源占用。
SDK 快速入门
Smart/T-Vis 的 PC 端 Python SDK 包名为 dmrobotics。它主要提供以下几类能力:
SensorOptions:配置目标设备、计算后端、运行模式、最大帧率和输出通道;Sensor:连接传感器,并读取图像、形变、力和设备状态;listConnectedDevIDs():枚举当前已连接的传感器;dmrobotics.utils:提供可视化、HDF5 数据记录与回放等示例工具。
SDK 同时支持在线推理和离线推理。在线推理直接处理传感器实时采集的数据;离线推理则对已经保存的原始帧再次处理,适合数据集制作和算法复现。
安装 SDK
推荐使用 Python 3.8~3.11,并在虚拟环境中安装。进入 SDK 安装包所在目录后,根据计算平台选择一种安装方式。
仅使用 CPU:
pip install .
使用本地 NVIDIA GPU:
pip install .[gpu]
GPU 模式要求 NVIDIA 驱动、CUDA、cuDNN 和 SDK 依赖版本相互兼容。安装完成后,推荐构建一次 TensorRT 推理引擎:
dmrobotics trt rebuild
如果只是验证设备连接和基础功能,建议先使用 CPU 模式。确认采集、状态读取和各项输出正常后,再切换到 CUDA 或 Flux。
初始化参数
最常用的配置如下:
from dmrobotics import Mode, Sensor, SensorOptions
options = SensorOptions(
dev_id="X25480024", # 设备识别码;快速测试也可填写设备索引 0
backend="cpu", # "cpu"、"cuda" 或 "Flux"
mode=Mode.HIGH, # STANDARD 资源占用较少;HIGH 解算更精确
max_fps=120, # 最大处理帧率,可在运行时修改
show_fps=False,
enable_raw=True,
enable_deformation=True,
enable_depth=True,
enable_shear=True,
enable_force=True,
)
sensor = Sensor(options)
dev_id 可以使用设备索引或设备识别码:
- 设备索引,例如
0:填写方便,适合单设备快速测试; - 设备识别码,例如
"X25480024":设备插拔或多设备并行时更加稳定,正式项目推荐使用。
backend 决定触觉数据在哪里计算:
"cpu":在本机 CPU 上计算;"cuda":在本机 NVIDIA GPU 上计算;"Flux":连接专用 Flux 边缘计算设备进行计算。
Mode.STANDARD 占用资源较少,Mode.HIGH 占用更多资源但解算结果更精确;该设置在 CPU 后端下不生效。
使用 Flux 时还需设置远端地址和 PC 端监听参数:
options = SensorOptions(
dev_id="X25480024",
backend="Flux",
remote_addr="192.168.127.10:50051",
pc_host="192.168.127.2", # 示例:替换为 Flux 能访问的 PC 地址
pc_port=60000,
)
其中,remote_addr 是 Flux 的 IP:端口,pc_host 应设置为 Flux 能够访问的 PC 地址,pc_port 是 PC 端监听端口。
enable_* 参数用于控制是否生成对应结果。关闭不需要的输出,可以减少计算负载;关闭后,对应的 get*() 接口可能返回 None 或保留旧值,因此程序不应继续使用该通道的数据。
最小实时读取示例
下面的示例完成设备枚举、初始化、状态检查、等待新帧、读取接触图像和法向形变,并在退出时释放资源:
import time
from dmrobotics import Mode, Sensor, SensorOptions, listConnectedDevIDs
print("已连接设备:", listConnectedDevIDs())
options = SensorOptions(
dev_id="X25480024", # 请替换为实际设备识别码,也可临时使用 0
backend="cpu",
mode=Mode.HIGH,
max_fps=120,
enable_depth=True,
)
sensor = Sensor(options)
last_fid = -1
try:
while True:
status = sensor.getDevStatus()
if status == 2:
raise RuntimeError("传感器已断开")
if status == 1:
# 设备正在重置,保持表面无接触并等待恢复
time.sleep(0.01)
continue
# 等待新帧,避免反复读取和处理同一帧
if not sensor.wait_for_new(last_fid, timeout_ms=1000):
continue
fid, image = sensor.getInferImg()
depth_fid, depth = sensor.getDepth()
last_fid = fid
print(
f"图像帧={fid}, 图像尺寸={image.img.shape}, "
f"深度帧={depth_fid}, 深度尺寸={depth.shape}"
)
finally:
sensor.disconnect()
大多数实时数据接口都返回 (fid, data)。如果同一次循环要联合使用图像、形变和力数据,可比较各接口返回的 fid,确认它们来自所需的数据帧。
设备状态与资源释放
getDevStatus() 返回以下状态:
| 返回值 | 状态 | 程序应怎样处理 |
|---|---|---|
0 | 正常 | 可以读取数据 |
1 | 正在重置 | 暂停读取,保持传感器表面无接触 |
2 | 已断开 | 停止当前读取流程,并检查设备连接 |
读取循环中推荐调用 wait_for_new(last_fid, timeout_ms) 等待新数据,避免反复读取同一帧并占用 CPU。程序结束时应调用 disconnect(),以停止内部线程并释放相机、日志等资源。
它是怎样工作的
一次完整的感知过程可以理解为以下四步:
- 采集接触画面:传感器持续获取有效感知区域内的图像。
- 提取形变特征:软件平台比较当前画面与基准帧,计算二维、法向和切向形变。
- 解算触觉结果:根据启用的功能进一步输出分布力、六维力和接触面积。
- 交给上层程序使用:机器人控制程序、数据采集程序或算法模型通过 Python SDK 获取结果。
dmrobotics SDK 为不同类型的数据采用统一的帧号机制。大多数实时接口都会返回“帧号 + 数据”,便于用户判断数据是否已经更新,并在多路数据之间进行同步。
主要特点
多维触觉信息
Smart/T-Vis 将图像、形变、力和接触面积集中在同一套感知链路中。与只给出单个压力数值的传感器相比,它能呈现接触区域内部更丰富的空间信息。
实时处理与离线处理
SDK 同时支持两种使用方式:
- 实时处理:传感器在线采集,程序持续读取最新的触觉结果,适合机器人在线控制与实时展示。
- 离线处理:先保存原始数据,再对历史帧提取形变、深度、切向形变和受力特征,适合数据集制作、算法验证与结果复现。
灵活的计算方式
软件平台可根据现场算力条件选择不同后端:
| 运行方式 | 适用情况 |
|---|---|
| CPU | 无 NVIDIA GPU,或处于功能验证、开发调试阶段 |
| CUDA GPU | 需要在本地使用 GPU 加速推理 |
| Flux | 配合专用 Flux 边缘计算设备,将感知计算放在远端执行 |
在 GPU 环境中,SDK 还支持通过 TensorRT 构建并缓存推理引擎,以提高后续运行效率。
面向工程使用的设备管理
SDK 支持通过设备索引或设备识别码连接传感器。对于经常插拔设备或同时使用多个传感器的场景,推荐使用设备识别码,以便程序稳定找到目标设备。
运行过程中还可以:
- 查询设备处于正常、重置中还是已断开状态;
- 等待新帧到达,避免重复处理旧数据;
- 重置传感器并重新建立基准状态;
- 动态调整最大处理帧率;
- 按需开启或关闭不同输出通道;
- 显式断开设备并释放计算与相机资源。
典型应用方向
Smart/T-Vis 可用于需要观察接触细节的机器人任务,例如:
- 机械手抓取过程中的接触确认与状态分析;
- 精细操作中的按压深度、切向形变和受力变化观测;
- 物体接触面积与受力分布的可视化;
- 多传感器触觉数据的同步采集;
- 机器人触觉数据集构建、离线特征生成与算法研究。
具体方案应结合传感器安装方式、被测物体、动作速度、计算平台及控制周期进行选型和验证。
配套软件能力
除核心 Python API 外,dmrobotics 软件平台还提供了一组用于快速搭建验证流程的参考工具:
- 将二维形变或切向形变绘制为箭头图,直观查看形变方向;
- 将采集结果保存为 HDF5 文件,并支持后续读取和回放;
- 运行单传感器或多传感器示例;
- 对采集数据离线生成触觉特征;
- 构建或重建 TensorRT 推理引擎;
- 记录和清理运行日志,辅助定位断流、重连或初始化失败等问题。
这些工具提供了从“连接设备、查看结果”到“保存数据、离线处理”的基础闭环。用户可直接用于功能验证,也可以根据自己的机器人系统、数据管线和界面需求进行二次开发。
使用前需要了解
- PC 端 SDK 推荐使用 Python 3.8~3.11。
- 初次验证可先使用 CPU 模式;需要更高推理性能时,再配置匹配的 NVIDIA 驱动、CUDA、cuDNN 与 TensorRT 环境。
- 传感器执行重置时,应保持感知表面无接触,待设备恢复正常状态后再继续读取。
- 原始灰度图更适合调试、记录和状态检查;用于算法开发时,通常优先选择二维形变、法向形变、切向形变等已解算特征。
如需确认产品规格、安装适配、计算平台配置或项目集成方式,请联系玄雅科技进行选型与技术对接。