Zurück zu Paxini Gen3 Path

Verständnis für taktile Daten

Lernen Sie die Druckmassestruktur, kalibrieren Sie die Kontaktdetektionsschwellen, implementieren Sie die Logik der Greifendetektion und visualisieren Sie Kontaktereignisse im Laufe der Zeit mit dem Paxini Gen3.

Einheit 2 von 5 · Datenverständnis · ~ 1,5 Stunden

In dieser Einheit lernen Sie die räumliche Struktur des Druckschranks, kalibrieren Sie die Kontaktdetektionsschwellen für Ihren Griff, implementieren Sie die Logik der Greifdetektion und visualisieren Sie Kontaktereignisse im Laufe der Zeit.

Konzept Druck-Array-Struktur

Die Raumdruckkarte

Das Feld frame.pressure_map ist ein 2D NumPy-Array, in dem jedes Element einen Taxel (Taktylpixel) darstellt. Für die Fingerspitzevariante ist das Array 8×8, das das 14×14 mm Sensorgebiet bei 1,75 mm Spitze abdeckt. Jeder Wert ist in Kilopascals (kPa).

Druck (kPa)

Kraft pro Einheit Fläche. Reichweite: 0600 kPa. Normaler Fingerkontakt beträgt 10150 kPa je nach Griffkraft.

Kontaktbereich (mm2)

Summe der Flächen, auf denen der Druck die Schwelle übersteigt.

Gesamtkraft (N)

Integral des Drucks über den Kontaktbereich. Proportional zur Schließkraft des Griffes. Typischer Griff: 120 N.

Zentroid (Rei, Kol)

Massenzentrum des Kontaktgebiets in der Taxel-Koordinate.

# Erforschen Sie die Druckkartenstruktur import paxini import numpy als np Sensor = paxini.Sensor() Sensor.start.Sensor.kalibrieren() # Null-Offset ohne Kontaktrahmen = Sensor.latest() Print("Array Form:", Frame.Pressure_Map.Form) # (8, 8) "Max Druck:", Frame.Pressure_Map.max(), "kPa") Print "Total Force:", Frame.total_force_n, "N") Print("Kontaktbereich:", Frame.contact_area_mm2, "mm2") Print "Centroid:", Frame.contact_cent) # (Rei,)

Schritt 1 Schwellenkalibrierung

Kontakt-/Nichtkontakt-Schwelle

Die Standardkontaktschwelle beträgt 5 kPa pro Tassel und 0,05 N Gesamtkraft. Diese Standardfunktionen funktionieren für die meisten Einstellungen, müssen jedoch aufgrund der Vorbelastung des Griffers und der Kabelspannung auf dem Sensor angepasst werden.

Führen Sie dieses Kalibrierungs-Skript aus, um das Rußniveau Ihres Sensors zu messen und eine entsprechende Schwelle festzulegen:

Import paxini Import numpy als np Sensor = paxini.Sensor() Sensor.start.Sensor.kalibrieren() # Null-Offset-erst # Muster 100 Bilder ohne Kontaktbasis_Funktionen = [] für i, Rahmen in enumerate(sensor.stream()): Basis_Funktionen.Append(Frame.total_force_n) wenn i >= 99: Bruch_Basis = np.max(bas_Funktionen) empfohlen_Schwelle = Geräusch_Basis * 3.0(f"Gruch_Basis: {Gruch_Basis4f} N") Printf"Empfehlenswert: {Rekommended_set_threshold4f} N) # Applied threshold.\\\comm_sensor:.threshold4f} N)

Typische Werte Geräuschboden beträgt in der Regel 0,0050,02 N. Eine Schwelle von 0,050,06 N ermöglicht eine zuverlässige Kontaktaufdeckung ohne falsche Positive bei Kabelbewegung.

Schritt 2 Erkennung von Greif

Die Logik der Erkennung

Ein einfacher, aber robuster Greifdetektor verwendet drei Bedingungen gleichzeitig: Kontaktflagge wahr, Kontaktbereich über dem Minimum und stabile Zentroid (Zentroid nicht schnell bewegt).

Import paxini Import numpy als np aus Sammlungen Import Deque Sensor = paxini.Sensor.(() Sensor.start.() Sensor.calibrate() Centroid_history = Deque(maxlen=10) # letzten 10 Bilder def ist_stable_grasp(Frame): wenn nicht Frame.in_contact: zurückkehren Falsch wenn Frame.contact_area_mm2 < 8.0: # mindestens ~3 Taxe zurückkehren Falsch Centroid_history.(appendframe.contact_centroid) wenn lencentroid_history) < 5: Rückkehr von False Centroid = np.ay_centroid_history)

Schritt 3 Visualisierung des Kontaktereignisses

Die Kontakte im Laufe der Zeit im Bild darzustellen

Die Gesamtkraft und der Kontaktzustand über eine 10-Sekunden-Aufzeichnung zu verzeichnen, um die zeitliche Struktur eines Zyklus der Aufnahme und Entlassung zu verstehen:

Import paxini Import numpy als np Import matplotlib.pyplot als plt sensor = paxini.Sensor) sensor.start.() sensor.kalibrieren() Kräfte = [] Kontakte = [] Zeitstempel = [] print("Erfassung von 10 Sekunden greifen und freisetzen des Sensors...") für das Frame in sensor.stream((): Kräfte.append(frame.total_force_n) Kontakte.append(((at Contactframe.in_contact)) Zeitstempel.append(frame.timestamp_time_ns / 1e9) wenn Zeitstempel[-1] - Zeitstempel >[0] break= 10.0: ttt =setztag-timelabestamps) - Zeitstempel (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

Für die in diesem Bereich verwendete Kraft-Torks-Terminologie siehe Robotik-Glossar.

Einheit 2 ist fertig, wenn...

Sie können die Form der Druckkarte drucken und bestätigen, dass sie (8, 8) für die Fingerspitzevariante ist. Ihre kalibrierte Kontakt Schwelle erzeugt keine falschen Positiven, wenn Sie das Sensorkabel sanft schütteln. Der Greifdetektor druckt "STABLE GRASP" innerhalb von 0,5 Sekunden nach festem Greifen an der Sensoroberfläche.

[← Zurück zum Wegüberblick]