跳到主要内容

API 参考

from xenseglovesdk import XenseGlove, get_glove_layout

使用 XenseGlove.open() 或 XenseGlove.open_ble() 创建连接。读取接口返回 Frame,设备信息等记录支持属性和字典两种访问方式,例如 info.serial_number 与 info["serial_number"]。

除另有说明外,timeout 的单位均为秒。设置类方法成功返回 None。

发现与连接​

方法说明
XenseGlove.list_ports(probe=True, timeout=0.5)返回串口记录列表。默认识别手套,通过 is_glove 筛选;timeout 为每个端口的查询等待时间。probe=False 时仅列出端口
XenseGlove.scan_ble(timeout=5.0)扫描 BLE 设备并返回记录列表;timeout 范围为大于 0、至多 120 秒
XenseGlove.is_bluetooth_enabled(timeout=2.0)查询系统第一个蓝牙适配器是否开启,返回 bool;timeout 范围为大于 0、至多 120 秒
XenseGlove.open(port)通过串口名连接,如 COM5 或 /dev/ttyACM0,返回已连接的 XenseGlove
XenseGlove.open_ble(address, timeout=10.0)使用扫描结果中的 address 连接 BLE;timeout 范围为大于 0、至多 120 秒

list_ports() 返回所有串口。每条记录的字段如下:

字段说明
port串口名,用于 open()
description设备描述,可能为空
hardware_idUSB 设备标识,可能为空
is_glove是否已成功识别为手套
info已识别手套的设备信息,否则为 None
error连接或查询失败的原因;无错误时为 None

端口被占用或查询超时时也可能无法识别。probe=False 时,is_glove=False 表示未执行识别。

BLE 扫描记录包含 name(设备名称)、address(连接地址)、serial_number(扫描时的设备标识)和 rssi(信号强度,单位 dBm,可能为 None)。准确序列号通过连接后的 info() 获取。

设备信息与设置​

方法参数与返回值
info(timeout=1.0)查询设备信息和当前设置,返回记录
query_version(timeout=1.0)返回固件版本字符串
query_battery(timeout=1.0)返回电池电压整数,单位 mV
set_output_mode(mode, timeout=1.0)mode 为 "adc"、"raw" 或 "tare_adc",含义见输出模式
set_frequency(hz, target=None, timeout=1.0)hz 为 10~120 的整数;target 为 "serial" 或 "ble",省略时设置当前连接通道的帧率;设备会保存该设置
set_channel(channel, timeout=1.0)channel 为 "serial" 或 "ble",选择设备输出通道
tare(timeout=2.0)在无负载状态下执行去皮并切换至 tare_adc;仅串口支持
set_config_mode(enabled, timeout=1.0)True 进入配置模式并暂停设备采样,False 退出;仅串口支持

BLE 操作的可用性取决于设备和固件支持。query_battery() 返回电压,例如 3900 表示 3.9 V。

tare() 返回后,设备可能仍在执行去皮。请保持无负载,待读数稳定后再开始测量。

设备信息字段​

字段含义
serial_number设备序列号,设备未提供时可能为空
version固件版本;SDK 版本通过 xenseglovesdk.__version__ 获取
rows / cols压力矩阵尺寸,63 / 39
hand0 右手、1 左手、None 未提供
frequency / ble_frequency串口 / BLE 输出帧率,单位 Hz;不支持 BLE 时其帧率可能为 0
output_mode / output_mode_name模式编号及名称:0 / adc、1 / raw、3 / tare_adc
channel当前输出通道:0 串口、1 BLE
with_ble是否支持 BLE
board_kind设备类型标识:ble 或 mcu

切换连接方式​

set_channel() 选择手套发送数据的通道。需要从 USB 改为 BLE 连接时,应停止当前读取、关闭原连接,再通过 open_ble() 建立新连接并设置 set_channel("ble");反向切换时使用 open() 和 set_channel("serial")。

打开连接和调用 reload() 都会保留设备当前的数据模式、帧率和输出通道。请按应用需要显式设置这些参数。

读取与连接管理​

方法或属性说明
read_frame(timeout=1.0, data_cmd=None)返回最新压力帧 Frame。data_cmd=None 接受任意模式,也可传入 "adc"、"raw" 或 "tare_adc" 进行筛选;没有匹配帧时等待,超时抛出 TimeoutError
read_gyro(timeout=1.0, latest=True)返回一个 IMU 样本。默认取最新样本并丢弃更早的待取样本;latest=False 按时间顺序取最早样本;超时抛出 TimeoutError
read_available_gyro_samples(limit=None)立即返回当前可取的 IMU 样本列表,按时间从早到晚排列。limit 为非负整数;0 返回空列表,None 最多取 4096 条
is_connected只读 bool 属性,表示当前连接状态
stop_stream() / start_stream()暂停 / 恢复 SDK 数据读取,并清空待取的压力和 IMU 数据;设备继续采样,设备查询和设置仍可使用
reload()无参数。关闭旧连接,按原连接方式和原串口名或 BLE 地址重新连接,恢复数据读取;成功返回 None,失败时抛出异常并保持关闭状态
close()关闭连接并释放资源,可重复调用

压力帧保留最新一帧,重复读取不会移除数据。已返回的帧不随后续采集变化。没有新数据时,read_frame() 仍可能立即返回先前的帧,连续采集的处理方式见快速开始。

压力和 IMU 读取的 timeout=0 表示不等待。独立 IMU 待读列表最多保留 128 条样本,达到容量后最早样本被移除。

切换模式或输出通道、执行去皮、切换配置模式,以及暂停或恢复读取后,需要等待新数据。连接关闭后无法继续读取,但已取得的 Frame 仍可使用。

需要重建连接时,待原端口或蓝牙设备恢复可用后调用 glove.reload(),再重新读取设备信息和数据帧。该方法保留设备设置,使用原连接地址;更换连接方式或地址时,请关闭旧连接并使用 open() 或 open_ble() 建立新连接。

推荐使用上下文管理器关闭连接:

with XenseGlove.open("COM5") as glove:
print(glove.info().serial_number)

示例端口名应替换为扫描到的实际端口。

Frame 属性与方法​

Frame 由 read_frame() 返回。

属性含义
serial_number设备序列号;尚未读取到设备信息时可能为空
timestamp / timestamp_ms / sequence主机时间、设备时间和帧序号,见时间与帧序号
mode当前帧的数据模式:adc、raw 或 tare_adc
rows / cols矩阵行、列数
values / value_map / data_bytes一维列表、二维列表和字节数据,见压力矩阵
gyro当前帧附带的 IMU 样本,没有时为 None
方法返回值与说明
get_point(row, col)指定位置的 ADC 整数或 None;行范围 0~62,列范围 0~38,越界抛出 IndexError
region_values(name)返回区域内有效数据的字典,键为完整矩阵中的一维索引;name 为 thumb、index、middle、ring、little 或 palm
total_value()有效 ADC 总和
max_value()最大有效 ADC,无有效值时返回 0
mean_value()有效 ADC 平均值,无有效值时返回 0.0
valid_points()有效点数,包含读数为 0 的位置
by_region() / by_finger()区域或手指统计字典,字段见区域统计
contacts(threshold=1)满足阈值的接触点列表,ADC 从高到低排列
contact_uv(threshold=1)最大接触点的归一化坐标 [u, v],没有满足阈值的点时返回 None
to_text()返回帧信息和矩阵的文本,无效位置显示为 *
to_dict()返回可用于 JSON 导出的字典,字段见导出数据

布局查询​

XenseGlove.regions() 返回六个区域的记录,每条记录包含 name、row_start、row_end、col_start、col_end。起始索引包含在区域内,结束索引不包含在内,适合直接用于 Python 切片。

get_glove_layout(rows=63, cols=39) 返回完整布局记录,支持的尺寸为 63 × 39:

字段含义
rows / cols / name行数、列数和布局名称
active_indices / empty_indices手部区域 / 空白区域的一维索引列表
palm_indices手掌索引列表
finger_indices从手指名称到索引列表的映射
index_region从索引到 empty、finger 或 palm 的映射
index_finger从索引到手指名称的映射,非手指位置为空字符串

布局描述各区域的位置。单帧数据是否有效,应检查对应读数是否为 None。

异常处理​

异常处理建议
ValueError / TypeError / OverflowError检查参数内容、类型与范围
IndexError检查访问的矩阵坐标是否越界
TimeoutError检查数据输出通道、模式和设备状态;设置操作超时后,应先查询状态再决定是否重试
ConnectionError检查连接、端口占用、驱动和访问权限
NotImplementedError确认当前设备及连接方式支持所调用的功能
RuntimeError根据异常信息检查设备状态与固件支持情况

设置操作超时不代表设置一定失败。恢复连接前,应先确认设备状态,避免反复执行去皮等操作。