巨桥触觉手套

数据收集

记录接触压力以及机器人关节状态和摄像机视频。 手套增加了一种触觉方式,可以捕捉 有多难 机器人的抓手正在施压——仅靠视觉无法看到的信息。

手套会添加到您的数据集中的内容 标准远程操作数据集捕获关节位置、速度和相机图像。 添加聚桥手套会记录 64 节点、200 Hz 的压力图,显示每次抓握期间接触力的空间分布。 根据这些数据训练的策略可以学习调节握力——这对于易碎或可变形的物体至关重要。
硬件设置

系统连接

在启动任何软件之前连接所有设备。 该手套严格采用 USB 有线连接,没有无线模式。

机械臂+手

Orca Hand(推荐)或其他末端执行器。 通过 Feetech USB 适配器或 CAN 连接,具体取决于手臂。

/dev/ttyUSB0 or CAN0

巨桥手套

USB-C 连接至主机 PC。 显示为 CDC-ACM 系列。 1.5 m 电缆; 如果需要自由移动,请使用 USB 扩展。

/dev/ttyACM0

腕式相机

USB 或 GigE 摄像头安装在机器人的手腕上,为训练提供以对象为中心的视图。

/dev/video0 or GigE IP

俯视摄像机

修复了场景上下文的工作空间相机。 与腕式相机配对以获得多视图数据集。

/dev/video2 or GigE IP

遥控装置

引导臂(S​​​​​​​​​​O-101/OpenArm 引导臂)、VR 控制器或驱动跟随机器人的 SpaceMouse。

领导端口/HID
录音工作流程

逐步记录

1

调出机器人手臂和手

在单独的终端中启动臂驱动程序(以及 Orca Hand 驱动程序,如果适用)。 在继续之前验证 joint_states 是否正在发布。

# Terminal 1: Robot arm (example: OpenArm) ros2 启动 openarm_ros2 openarm.launch.py​​​​​​​​​​ 端口:=/dev/ttyUSB0 # Terminal 2: Orca Hand (if using Orca Hand end-effector) ros2启动orca_ros2 orca_hand.launch.py​​​​​​​​​​端口:=/dev/ttyUSB1 # Verify ros2 主题 hz /joint_states # Should be ~100 Hz ros2 主题 hz /orca_hand/joint_states # Should be ~100 Hz
2

启动Juqiao Glove驱动

启动手套 ROS2 节点。 在开始任何记录会话之前验证 200 Hz 数据是否正在流动。

# Terminal 3: Juqiao Glove ros2启动 juqiao_glove_ros2 glove.launch.py​​​​​​​​​​ 端口:=/dev/ttyACM0 # Verify pressure data is live ros2 HZ /juqiao_glove/tactile_array # Should be ~200 Hz ros2 主题 echo /juqiao_glove/grasp_region # Should print region strings
3

启动相机

启动相机节点以获取手腕视图和俯视图。 确认图像主题以目标帧速率(通常为 30 fps)发布。

# Wrist camera (USB) ros2运行usb_cam usb_cam_node_exe --ros-args -p video_device:=/dev/video0 -p 帧率:=30.0 # Overhead camera (GigE example) ros2启动camera_ros2 gige_camera.launch.py​​​​​​​​​​ ip:=192.168.1.100 # Verify ros2 主题 hz /wrist_camera/image_raw ros2 主题 hz /overhead_camera/image_raw
4

验证所有流是否同步

使用 ros2主题列表 确认所有必需的主题都存在。 在记录任何事件之前,检查各种模式的时间戳是否在 20 毫秒内。

ros2 主题列表 | grep -E“关节|触觉|图像|抓握” # Expected topics: # /joint_states (arm, ~100 Hz) # /orca_hand/joint_states (hand, ~100 Hz) # /juqiao_glove/tactile_array (glove, ~200 Hz) # /juqiao_glove/grasp_region (glove, ~200 Hz) # /wrist_camera/image_raw (camera, 30 Hz) # /overhead_camera/image_raw (camera, 30 Hz)
5

使用乐机器人记录数据集

使用乐机器人的录音脚本。 这 --触觉主题 flag 将手套压力流添加为数据集列以及关节状态和图像。

# Record 50 episodes; press Enter to start each, Space to stop python -m lerobot.scripts.record \ --robot-path lerobot/configs/robot/orca_hand.yaml \ --fps 30 \ --repo-id $HUGGINGFACE_USER/orca_grasp_tactile \ --tags "juqiao-glove,触觉,操控" \ --预热时间-s 2 \ --情节时间-s 30 \ --重置时间-s 5 \ --num-episodes 50 \ --push-to-hub \ --tactile-topic /juqiao_glove/tactile_array \ --tactile-key 触觉压力
还没有 LeRobot --tactile-topic 标志吗? 使用 SVRC 多模式记录器包装器自动处理同步和数据集模式: pip install robotscenter[记录器]
6

推送前查看剧集

在提交到 HuggingFace Hub 之前,使用热图叠加层重播每一集以验证触觉数据质量。

# Replay and overlay heatmap on video python -m robotscenter.scripts.review_episode \ --数据集路径./data/orca_grasp_tactile \ --剧集索引 0 \ --覆盖触觉 \ --tactile-key 触觉压力 # Discard bad episodes python -m lerobot.scripts.delete_episodes \ --数据集路径./data/orca_grasp_tactile \ ——第 3 7 12 集 # episode indices to discard
7

推送至 HuggingFace Hub

上传经过验证的数据集。 数据集卡是自动生成的,其中包含包括触觉在内的模态描述。

Huggingface-cli 登录 # first time only python -m lerobot.scripts.push_dataset \ --数据集路径./data/orca_grasp_tactile \ --repo-id $HUGGINGFACE_USER/orca_grasp_tactile # Verify upload 蟒蛇-c“ 从数据集导入load_dataset ds = load_dataset('$HUGGINGFACE_USER/orca_grasp_tactile', split='train') 打印(ds.column_names) print(ds.features['tactile_Pressures']) ”
参考

数据集架构

数据集中的每个帧都包含以下列。 所有数组都存储为 float32 Parquet 列; MP4 视频序列的图像。

柱子形状/类型描述
观察状态 浮点数32[6] 机器人手臂关节位置(弧度)。 如果使用 6 自由度臂,则索引 6 是夹具孔径。
观察.hand_state 浮点数32[17] Orca Hand 关节位置(弧度),17 个自由度。 如果没有灵巧的手,则省略。 在元数据中按关节名称进行标记。
观察.触觉压力 浮动32[64] Juqiao Glove 每个节点标准化压力,0.0(无接触)至 1.0(满量程)。 200 Hz 下采样以匹配机器人帧速率。
观察.tactile_Pressures_raw uint16[64] 原始 16 位 ADC 值。 保留以供重新校准后重新标准化。 选修的; 省略减少数据集大小。
观察.grasp_region 斯特 主动接触区域启发式: “棕榈”, “拇指”, “指数”, “中间”, “戒指”, “小指”, 或者 "" (没有联系)。
观察.图像.手腕 uint8[H,W,3] 腕式相机 RGB 帧速率为 30 fps,存储为 MP4 视频序列。
观察.图像.开销 uint8[H,W,3] 俯视摄像头 RGB 帧速率为 30 fps。
行动 float32[6 或 23] 手臂 (6) 和可选的手 (17) 的目标关节位置。 形状取决于是否有灵巧的手。
语言指令 斯特 任务描述,例如 “把鸡蛋捡起来,不要打破它”。 启用以语言为条件的政策培训。
剧集索引 整数 数据集中的剧集编号。
帧索引 整数 剧集内的帧编号(0 索引)。
时间戳 浮动64 自剧集开始以来已过去几秒。

触觉下采样

手套的传输频率为 200 Hz; 机器人和摄像头通常以 30-100 Hz 的频率运行。 记录器使用最近邻时间戳匹配来对齐帧。 要将完整的 200 Hz 触觉流保留为单独的数组:

# Store full-rate tactile as a variable-length array per frame python -m robotscenter.scripts.record \ --触觉模式 full_rate # default is "matched" (one per robot frame) # This produces a ragged column: observation.tactile_sequence # shape per row: float32[N, 64] where N varies (typically 6-7 frames at 200Hz/30fps)
质量

剧集质量检查表

在将每个剧集添加到数据集中之前,请根据这些标准对其进行审查。 一次糟糕的事件可能会引入虚假的触觉模式,从而降低政策培训的效果。

  • 触觉流是连续的——没有帧间隙 核实 帧序列 递增而不跳过。 丢帧在触觉栏中显示为重复值。
  • 静止时基线接近零 (< 0.03) 在事件开始时(在任何接触之前),最大压力节点读数应低于 0.03。 静止时漂移高于 0.05 表示手套需要重新校准。
  • 接触事件与视频中可见的抓握保持一致 重播与 --覆盖触觉。 压力峰值(最大节点 > 0.4)应与腕式摄像机中可见的夹具闭合一致。
  • 抓握区域在接触阶段保持一致 掌握区域 每次抓握期间应稳定在一个或两个区域(例如 “棕榈” + “指数”)。 快速变化的区域表明手套未对准或噪声信号。
  • 相对于机器人状态,手套延迟 < 20 毫秒 将触觉事件发生与夹具速度峰值进行比较。 延迟 > 20 毫秒表明 USB 集线器拥塞 - 将手套直接连接到主机 USB 端口。
  • 语言教学与演示的任务相匹配 对于语言条件数据集,确保在情节开始时输入的指令准确地描述了操作员实际演示的内容。
  • 无电缆干扰机器人运动 1.5 m USB 电缆不得限制操作员的手部活动或在操作过程中拉掉手套。 在前臂上使用电缆管理夹。
政策培训

触觉观察训练

与仅视觉基线相比,使用触觉输入的策略通常可以在接触敏感任务(易碎物体处理、钉插入、布料折叠)方面提高 15-30%。

# ACT policy with tactile observations (SVRC fork adds tactile encoder) python -m lerobot.scripts.train \ --dataset-repo-id $HUGGINGFACE_USER/orca_grasp_tactile \ ——政策法案\ --policy.observation_keys \ “观察.图像.手腕”\ “观察.图像.开销”\ “观察.状态”\ “观察.hand_state”\ “观察.触觉压力”\ --output-dir 输出/act_tactile # The tactile encoder maps float32[64] → latent via a small MLP # No special architecture changes required for ACT or Diffusion Policy
# Diffusion Policy with tactile (identical --observation_keys, different policy flag) python -m lerobot.scripts.train \ --dataset-repo-id $HUGGINGFACE_USER/orca_grasp_tactile \ ——政策扩散\ --policy.observation_keys \ “观察.图像.手腕”\ “观察.状态”\ “观察.触觉压力”\ --output-dir 输出/diffusion_tactile
提示:在评估时消融触觉 经过 观察.tactile_Pressures = 零(64) 在推断过程中衡量政策对触觉与视觉的依赖程度。 这可以确定您的任务是否需要触觉或视觉是否足够。