Juqiao Taktiler Handschuh

Datenerfassung

Zeichnen Sie den Kontaktdruck zusammen mit dem Zustand der Robotergelenke und dem Kameravideo auf. Der Handschuh bietet eine taktile Modalität, die einfängt wie schwer Der Robotergreifer drückt – Informationen, die für das bloße Sehen unsichtbar sind.

Was der Handschuh zu Ihrem Datensatz hinzufügt Standard-Teleoperationsdatensätze erfassen Gelenkpositionen, Geschwindigkeiten und Kamerabilder. Durch Hinzufügen des Juqiao-Handschuhs wird eine Druckkarte mit 64 Knoten und 200 Hz aufgezeichnet, die die räumliche Verteilung der Kontaktkraft bei jedem Griff zeigt. Anhand dieser Daten geschulte Richtlinien können lernen, die Griffkraft zu modulieren – entscheidend für zerbrechliche oder verformbare Objekte.
Hardware-Setup

Systemverbindungen

Schließen Sie alle Geräte an, bevor Sie eine Software starten. Der Handschuh ist ausschließlich über USB verkabelt – es gibt keinen Wireless-Modus.

Roboterarm + Hand

Orca Hand (empfohlen) oder anderer Endeffektor. Anschluss je nach Arm über Feetech USB-Adapter oder CAN.

/dev/ttyUSB0 or CAN0

Juqiao-Handschuh

USB-C zum Host-PC. Erscheint als CDC-ACM-Seriennummer. 1,5 m Kabel; Verwenden Sie bei Bedarf eine USB-Verlängerung, um Bewegungsfreiheit zu gewährleisten.

/dev/ttyACM0

Handkamera

Am Handgelenk des Roboters montierte USB- oder GigE-Kamera, die eine objektzentrierte Ansicht für das Training bietet.

/dev/video0 or GigE IP

Overhead-Kamera

Arbeitsbereichskamera für Szenenkontext korrigiert. Koppeln Sie es mit der Handgelenkkamera, um Datensätze mit mehreren Ansichten zu erhalten.

/dev/video2 or GigE IP

Teleoperationsgerät

Führungsarm (SO-101 / OpenArm-Anführer), VR-Controller oder SpaceMouse, die den Folgeroboter steuern.

Leader-Port / HID
Aufnahme-Workflow

Schritt-für-Schritt-Aufnahme

1

Bringen Sie den Roboterarm und die Hand hoch

Starten Sie den Armtreiber (und ggf. den Orca-Handtreiber) in separaten Terminals. Überprüfen Sie, ob joint_states veröffentlicht werden, bevor Sie fortfahren.

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

Starten Sie den Juqiao Glove-Treiber

Starten Sie den Handschuh-ROS2-Knoten. Stellen Sie sicher, dass 200-Hz-Daten übertragen werden, bevor Sie eine Aufzeichnungssitzung starten.

# Terminal 3: Juqiao Glove ros2 startet juqiao_glove_ros2 handschuh.launch.py ​​port:=/dev/ttyACM0 # Verify pressure data is live ros2 Thema hz /juqiao_glove/tactile_array # Should be ~200 Hz ros2-Thema echo /juqiao_glove/grasp_region # Should print region strings
3

Kameras starten

Starten Sie Kameraknoten für Handgelenk- und Draufsichten. Bestätigen Sie, dass Bildthemen mit der Zielbildrate (normalerweise 30 fps) veröffentlicht werden.

# Wrist camera (USB) ros2 führt usb_cam usb_cam_node_exe --ros-args -p video_device:=/dev/video0 -p framerate:=30.0 aus # Overhead camera (GigE example) ros2 startete camera_ros2 gige_camera.launch.py ​​​​ip:=192.168.1.100 # Verify ros2 Thema hz /wrist_camera/image_raw ros2 Thema hz /overhead_camera/image_raw
4

Stellen Sie sicher, dass alle Streams synchronisiert sind

Verwenden Ros2-Themenliste um zu bestätigen, dass alle erforderlichen Themen vorhanden sind. Überprüfen Sie, ob die Zeitstempel aller Modalitäten innerhalb von 20 ms liegen, bevor Sie Episoden aufzeichnen.

ros2-Themenliste | grep -E "joint|tactile|image|grasp" # 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

Zeichnen Sie einen Datensatz mit LeRobot auf

Verwenden Sie das Aufnahmeskript von LeRobot. Der --tactile-topic Flag fügt den Handschuhdruckstrom als Datensatzspalte neben Gelenkzuständen und Bildern hinzu.

# 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-handschuh,taktil,manipulation" \ --warmup-time-s 2 \ --episode-time-s 30 \ --reset-time-s 5 \ --num-episodes 50 \ --push-to-hub \ --tactile-topic /juqiao_glove/tactile_array \ --tactile-key tactile_pressions
Noch keine LeRobot --tactile-topic-Flagge? Verwenden Sie den multimodalen Recorder-Wrapper SVRC, der die Synchronisierung und das Datensatzschema automatisch verwaltet: pip install roboticscenter[recorder]
6

Überprüfen Sie die Episoden, bevor Sie sie veröffentlichen

Spielen Sie jede Episode mit dem Heatmap-Overlay noch einmal ab, um die Qualität der taktilen Daten zu überprüfen, bevor Sie sich an den HuggingFace Hub wenden.

# Replay and overlay heatmap on video python -m roboticscenter.scripts.review_episode \ --dataset-path ./data/orca_grasp_tactile \ --episode-index 0 \ --overlay-tactile \ --tactile-key tactile_pressions # Discard bad episodes python -m lerobot.scripts.delete_episodes \ --dataset-path ./data/orca_grasp_tactile \ --Folgen 3 7 12 # episode indices to discard
7

Drücken Sie auf HuggingFace Hub

Laden Sie den validierten Datensatz hoch. Die Datensatzkarte wird automatisch mit Modalitätsbeschreibungen einschließlich taktiler Beschreibungen generiert.

Huggingface-Cli-Anmeldung # first time only python -m lerobot.scripts.push_dataset \ --dataset-path ./data/orca_grasp_tactile \ --repo-id $HUGGINGFACE_USER/orca_grasp_tactile # Verify upload python -c " aus Datensätzen import load_dataset ds = load_dataset('$HUGGINGFACE_USER/orca_grasp_tactile', split='train') print(ds.column_names) print(ds.features['tactile_pressions']) "
Referenz

Datensatzschema

Jeder Frame im Datensatz enthält die folgenden Spalten. Alle Arrays werden als float32-Parquet-Spalten gespeichert; Bilder als MP4-Videosequenzen.

SpalteForm / TypBeschreibung
Beobachtungszustand float32[6] Gelenkpositionen des Roboterarms (Bogenmaß). Index 6 ist die Greiferöffnung bei Verwendung eines 6-DOF-Arms.
Beobachtung.hand_state float32[17] Orca-Handgelenkpositionen (Bogenmaß), 17 DOF. Lassen Sie es weg, wenn Sie keine geschickte Hand haben. In den Metadaten nach gemeinsamem Namen gekennzeichnet.
Beobachtung.taktile_Drucke float32[64] Juqiao Glove normalisierte den Druck pro Knoten von 0,0 (kein Kontakt) bis 1,0 (Vollausschlag). 200 Hz heruntergesampelt, um der Bildrate des Roboters zu entsprechen.
Beobachtung.tactile_pressions_raw uint16[64] Rohe 16-Bit-ADC-Werte. Zur Neunormalisierung nach der Neukalibrierung aufbewahren. Optional; weglassen, um die Größe des Datensatzes zu reduzieren.
Beobachtung.grasp_region str Heuristik des aktiven Kontaktbereichs: „Palme“, "Daumen", "Index", "Nicht", "Ring", „kleiner Finger“, oder "" (kein Kontakt).
Beobachtung.Bilder.Handgelenk uint8[H, W, 3] RGB-Bild der Handgelenkkamera mit 30 fps, gespeichert als MP4-Videosequenz.
Beobachtungsbilder.über Kopf uint8[H, W, 3] Overhead-Kamera-RGB-Rahmen mit 30 fps.
Aktion float32[6 oder 23] Soll-Gelenkpositionen für den Arm (6) und optional die Hand (17). Die Form hängt davon ab, ob eine geschickte Hand vorhanden ist.
language_instruction str Aufgabenbeschreibung, z.B. „Hebe das Ei auf, ohne es zu zerbrechen“. Ermöglicht sprachbedingtes Richtlinientraining.
Episodenindex int Episodennummer innerhalb des Datensatzes.
Frame_Index int Bildnummer innerhalb der Episode (0-indiziert).
Zeitstempel float64 Seit Beginn der Episode sind Sekunden vergangen.

Taktiles Downsampling

Der Handschuh streamt mit 200 Hz; Der Roboter und die Kameras laufen normalerweise mit 30–100 Hz. Der Rekorder richtet Frames mithilfe des Zeitstempelabgleichs des nächsten Nachbarn aus. So bewahren Sie den gesamten taktilen 200-Hz-Stream als separates Array auf:

# Store full-rate tactile as a variable-length array per frame python -m roboticscenter.scripts.record \ --tactile-mode 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)
Qualität

Checkliste für die Episodenqualität

Überprüfen Sie jede Episode anhand dieser Kriterien, bevor Sie sie in Ihren Datensatz aufnehmen. Eine schlechte Episode kann zu falschen taktilen Mustern führen, die die politische Ausbildung beeinträchtigen.

  • Der taktile Strom ist kontinuierlich – keine Bildlücken Verifizieren Frame.Sequenz Inkremente ohne Sprünge. Frame-Drops erscheinen als wiederholte Werte in der taktilen Spalte.
  • Die Grundlinie im Ruhezustand liegt nahe Null (< 0,03) Zu Beginn der Episode (vor jedem Kontakt) sollte der maximale Druckknoten unter 0,03 liegen. Eine Drift über 0,05 im Ruhezustand weist darauf hin, dass der Handschuh neu kalibriert werden muss.
  • Kontaktereignisse stimmen mit sichtbaren Griffen im Video überein Wiederholen Sie mit --overlay-tactile. Druckspitzen (maximaler Knoten > 0,4) sollten mit dem sichtbaren Schließen des Greifers in der Handgelenkkamera zusammenfallen.
  • Der Griffbereich bleibt während der Kontaktphase konstant erfassen_region sollte sich bei jedem Griff an einer oder zwei Regionen stabilisieren (z. B. „Palme“ + "Index"). Sich schnell ändernde Bereiche weisen auf eine Fehlausrichtung des Handschuhs oder ein verrauschtes Signal hin.
  • Handschuhlatenz < 20 ms relativ zum Roboterstatus Vergleichen Sie den Beginn des taktilen Ereignisses mit der Geschwindigkeitsspitze des Greifers. Eine Latenz von > 20 ms deutet auf eine Überlastung des USB-Hubs hin – schließen Sie den Handschuh direkt an einen Host-USB-Anschluss an.
  • Der Sprachunterricht entspricht der dargestellten Aufgabe Stellen Sie bei sprachkonditionierten Datensätzen sicher, dass die zu Beginn der Episode eingegebene Anweisung genau beschreibt, was der Bediener tatsächlich demonstriert hat.
  • Keine Kabelbeeinträchtigung der Roboterbewegung Das 1,5 m lange USB-Kabel darf die Handbewegungen des Bedieners nicht einschränken oder den Handschuh während der Episode ausziehen. Verwenden Sie einen Kabelführungsclip am Unterarm.
Richtlinienschulung

Training mit taktilen Beobachtungen

Richtlinien, die taktile Eingaben erfordern, verzeichnen in der Regel eine Verbesserung von 15–30 % bei kontaktempfindlichen Aufgaben (Handhabung zerbrechlicher Gegenstände, Einsetzen von Stiften, Falten von Stoffen) im Vergleich zu rein visuellen Basislinien.

# ACT policy with tactile observations (SVRC fork adds tactile encoder) python -m lerobot.scripts.train \ --dataset-repo-id $HUGGINGFACE_USER/orca_grasp_tactile \ --policy act \ --policy.observation_keys \ "observation.images.wrist" \ "observation.images.overhead" \ "observation.state" \ "observation.hand_state" \ "observation.tactile_pressions" \ --output-dir gibt/act_tactile aus # 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 diffusion \ --policy.observation_keys \ "observation.images.wrist" \ "observation.state" \ "observation.tactile_pressions" \ --output-dir gibt/diffusion_tactile aus
Tipp: Zum Testzeitpunkt taktil abtragen Passieren Beobachtung.tactile_pressions = Nullen (64) während der Inferenz, um zu messen, wie sehr die Richtlinie auf Tastgefühl und Sehvermögen beruht. Dadurch wird festgestellt, ob Ihre Aufgabe taktiles Arbeiten erfordert oder ob das Sehen ausreichend ist.