Zum Haupttext springen

v3.5.0

Dies ist die größte Veröffentlichung seit der Neugestaltung der API vor einem Jahr. Version 3.5.0 führt eine integrierte 3D-Mathematik-Ebene, vollständige Unterstützung für „ Minverse “, typisierte Ereignisströme, eine umfassende Konfigurations-API sowie eine übersichtlichere HTTP-Schnittstelle ein. Darüber hinaus enthält sie die im Laufe des letzten Jahres vorgenommenen Fehlerbehebungen und Verbesserungen der Benutzerfreundlichkeit.

Kernpunkte​

  • Integrierte 3D-Mathematik-Ebene – eine kombinierbare Transformationspipeline mit Primitiven erster Ordnung für Gerätebasis (Frame), Montage-, Arbeitsbereichs- und Navigationstransformationen, die explizite Transformationen zwischen lokalen, Sitzungs-, Anwendungs- und internen Räumen bereitstellt.
  • Bubble Navigation – Ermöglicht die Navigation durch einen umfangreichen virtuellen Arbeitsbereich mithilfe von definierten Formen (SDF-Primitive) und bietet geschwindigkeitsbasierte Geschwindigkeitssteuerung, Kollisionserkennung unter Berücksichtigung von Hysterese sowie wahlweise eine Cursor-Richtungsdrift. Die gesamte Konfiguration erfolgt auf HTTP- und WebSocket-Basis, und es wird die bidirektionale Konvertierung des App-Raums unterstützt.
  • Typisierter Ereignisstrom – ein dedizierter WebSocket-Ereigniskanal für den Lebenszyklus von Geräten, Sicherheitshinweise, Kalibrierungen, Akkus, Warnungen zu Steuerungszyklen und Hinweise zur Einstellung des Supports.
  • Konfigurations-API – Ein umfassendes Schlüssel-Wert-Konfigurationssystem, das HTTP-CRUD, Typhinweise, Bereichseinschränkungen und Beschreibungen unterstützt und die bisherigen verschachtelten Konfigurationsdateien ersetzt.
  • Einheitliche Gerätekonfiguration — Es wird ein einziger Satz von HTTP-Routen für alle Geräte bereitgestellt: basis, mount, preset, transform, filters, handedness, torque_scaling, gravity_compensation, home_return.
  • Synchronisierte „ Minverse “ + Stiftkalibrierung — Gerät und Stift werden nun gemeinsam kalibriert, und der Kalibrierungsstatus bleibt gesperrt, bis der Griff physisch angebracht wird.
  • Verbesserung der Benutzerfreundlichkeit HTTP — Indexbasierter Geräte-Selektor (Geräte werden über einen Index statt über eine ID angegeben), ein einheitliches Anfrage-/Antwortformat, das zwischen WebSockets gemeinsam genutzt wird, sowie optional einsetzbare {ok, error, data} Envelope (?format=json), bietet Wildcard-Sitzungsselektoren.

Neue Funktionen​

Gerät​

  • Minverse — Mit dieser Version werden folgende Funktionen offiziell unterstützt: Geräteerkennung, Bereitschaftsablauf, Sicherheitshinweise und synchronisierte Kalibrierungsabläufe.
  • Ruko und Kingfishergelten als offizielle Griff-Produkttypen.
  • Unterstützung für Gerätesimulatoren — Es können sowohl reale Hardware als auch per Software simulierte Geräte erkannt und mit diesen kommuniziert werden.
  • Schutz vor Verbindungsschleifen — Fehlerhaft funktionierende Ports werden automatisch gesperrt, und POST /ports/{port}/resetauf … zurücksetzen.
  • Herzschlag bei Stiftmontage – Durch den Einsatz von Debounce wird das Anbringen und Abnehmen des Griffs zuverlässig erkannt.

Sitzungen, Befehle und WebSockets​

  • Filterung und Persistenz von Sitzungsprofilen — Eine Sitzung enthält den Profilnamen und die erforderliche SDK-Version, die der Dienst auch nach einer erneuten Verbindung beibehält; Client- und Überwachungstools können Sitzungen anhand dieses Profils filtern und als Ziel festlegen.
  • Befehlspuffer pro Sitzung – Eine langsame Sitzung hält andere Sitzungen nicht mehr auf.
  • Explizit für einmalige Befehle configure Karte — nach Gerät basis, preset, mount, force_gate, dampingund pro Sitzung profile, basisDas ist nun alles configureist darin enthalten. Entsprechend der Ausgabekonfigurationszuordnung stimmen die gesendeten und die gelesenen Werte in beide Richtungen überein.
  • Benutzerdefinierte Geräte einbinden — Integrierte Arbeitsbereichsvoreinstellungen (defaults, arm_front, arm_front_centered, led_front, led_front_centered) können Sie eine der Optionen auswählen oder eine explizite Konvertierung übermitteln. Bei einer manuellen Änderung der Einbindung werden die Voreinstellungen automatisch customwird umgeschaltet.
  • Benannte Befehlsfelder — position, vector, angles, torquesist üblich values Ersetzt das Array.
  • set_angular_torquesga set_angular_torqueersetzt (die Singularform wird nicht mehr unterstützt).
  • Erweiterung des Sitzungsrahmens — Erweiterbar auf die Sitzungsrahmen v3.0 und v3.1 config, state, status Es enthält Objekte. Zu den neuen Ausgabefeldern gehören current_cursor_force, current_cursor_position, current_angular_torques, current_angular_position, control_domain, control_mode, transform, transform_velocity, erweitert config.*, und status.safety(standardmäßig ausgeblendet) gibt es.
  • Aktualisierung der Teilkonvertierung — Mount, Arbeitsbereichswandlung, Unterfelder, die in der Navigationsstruktur geändert werden sollen (position, rotation, scale) müssen Sie nur senden.

HTTP​

  • GET / — Serviceversion.
  • GET/POST/DELETE /settings sowie /settings/* — API für alle Schlüssel-Wert-Einstellungen.
  • GET /sessions/{session} sowie GET/POST/DELETE /sessions/{session}/profile.
  • GET /devices?session=<selector> — Wandelt die Gerätekoodinaten in den Anwendungsraum der angegebenen Sitzung um.
  • Indexbasierter Geräteauswähler — Auch ohne Kenntnis der ID können alle Geräte über den Index angegeben werden (im Fall des ersten Inverse3 /inverse3/0/..., Für alle Geräte der Inverse-Serie /inverse*/*/...).
  • Einheitliches Anfrage-/Antwortformat — Der POST-/GET-Body entspricht dem in WebSocket verwendeten command_data Es wird das JSON-Format verwendet. Code, der für eine bestimmte Übertragungsart geschrieben wurde, funktioniert auch bei anderen Übertragungsarten.
  • Selektive Hüllkurve — auf allen Routen ?format=jsonkann aktiviert werden, und /settings* sowie GET /home_returnist standardmäßig {ok, error, data}wird verwendet. Wenn Sie das ursprüngliche Format wünschen, ?format=plainwird verwendet.
  • Sitzungsselektor-Platzhalter — Aus dem Profilnamen *ist eine beliebige Zeichenfolge, ?bedeutet ein einzelnes Zeichen.
  • Prozentual entschlüsselte Selektoren — %2A, %3A Diese werden vor dem Routing dekodiert.

Veranstaltung​

  • communication/events/portDies ist der dedizierte WebSocket-Ereignisstrom.
  • Es gibt 24 festgelegte Ereigniskategorien, darunter Gerätelebenszyklus, Sicherheit (E-Bremse, Fremdkörpererkennung, Blockieren), Kalibrierungsfehler, Akku-Meldungen, Sitzungswarnungen, niedriger/kritischer Steuerzyklus, Eingabeüberprüfung und Hinweise zur Einstellung des Supports.

Beobachtbarkeit​

  • Beim Profiling werden die Protokollmeldungen zusammen mit den stufenbezogenen Farben an Tracy übermittelt.
  • Für jeden HTTP-Handler wird eine Tracy-Zone eingerichtet.
  • Statistikereignis zum Timing der Hauptschleife.
  • Sie können das Protokollverzeichnis und den Servernamen konfigurieren (Docker-kompatibel).

3.6 Geplante Funktionen​

  • Die auf SDF Haptic Effects (SDF HFX) basierenden Funktionen wurden in Version 3.5 integriert (Module, Lebenszyklus, von den Modulen bereitgestellte Befehls- und Zustandsserialisierung). Die öffentliche API soll zusammen mit der vollständigen Dokumentation in Version 3.6 veröffentlicht werden.

Verbesserungen​

  • Kraft-Schwingungsfilterung – umfasst die Erkennung von Schwingungen pro Achse, eine 8-stufige schrittweise Rückstellung, eine Einstiegsabstimmung mit Hysterese sowie einen asymmetrischen Entkopplungsbereich.
  • Force-Gate-Filter zur Laufzeit — über WebSocket oder HTTP configure.force_gate.gainkann zusammengestellt werden und bietet dauerhaft gespeicherte Standardwerte.
  • Die maximale Frequenz der Hauptschleife wurde auf 32 kHz erhöht (für Präzisionsanwendungen).
  • Kleinere WebSocket-Nutzdaten — Das Unterfeld „Identitätstransformation“ (Standardwert) (position = 0, rotation = identity, scale = 1) wird in der Ausgabe standardmäßig weggelassen. Dadurch wird die Payload-Größe verringert und die Kompatibilität mit älteren Unity-Paketen, die eine Nachrichtenlänge von maximal 4 KB zulassen, wiederhergestellt. Zwei erweiterte Einstellungen (serialization/explicit_fields, serialization/force_complete_transforms) können Sie alle Felder erneut einfügen, um den Bedürfnissen der Verbraucher gerecht zu werden, die dies benötigen.
  • Reduzierung des Jitters in der Hauptschleife — Die Verarbeitung von WebSocket-Nachrichten blockiert auch während des JSON-Parsings und der Netzwerkübertragung nicht die Ticks der Hauptschleife, und die Planung der Session-Ticks wurde vor die Serialisierung der Antworten verlegt.
  • Der Server ist standardmäßig ausschließlich für „localhost“ vorgesehen. — communication/bind_all_interfaces In den Einstellungen können Sie den Netzwerkzugriff aktivieren.
  • Verwendung von Präfixsyntax bei Platzhaltern im Geräteauswahl-Selektor (Beispiel: inverse*(ist mit allen Geräten der Inverse-Serie kompatibel).
  • Dämpfungsbefehldies force_gatezusammen mit configure Es wurde auf die Karte verschoben.
  • Der Rotations-Dateiloggerersetzt den bisherigen Logger und ermöglicht die Einrichtung von Verzeichnissen.
  • Vom Modul bereitgestellte Befehle und Statusangaben — Das Modul kann eigene Befehle einfügen und Felder konfigurieren, ohne das Kernschema zu verändern, und Statusangaben in WebSocket-Frames einfügen.

Änderungen​

Es umfasst Fehlerbehebungen aus einem Jahr; die wichtigsten Punkte sind im Folgenden aufgeführt.

  • Ein Problem, bei dem die Sitzungsgeschwindigkeit unter bestimmten Bedingungen unregelmäßig ausfällt.
  • **GripHook (Verse Grip Stopper)** – Problem, bei dem die Funktion nicht ordnungsgemäß deaktiviert wurde, wenn die Simulation nicht ausgeführt wurde.
  • Inverse3 Ein Problem, bei demdas Timeoutzu kurz eingestellt war und auf Geräten mit langsamer Systemstartzeit zu einer Endlosschleife von Verbindungsabbrüchen führte.
  • Der Dienst wird unter Windows nicht ordnungsgemäß beendet – ein Problem, bei dem der HTTP-Server beim Beenden nicht immer vollständig bereinigt wurde.
  • Eine Wiederverbindungsschleife, die auftrat, wenn der Dienst Befehle sendete, die von der früheren Firmware-Version nicht unterstützt wurden.
  • Ein Problem, bei dem die Auflistung von Bluetooth-Gerätenauf Systemen mit Bluetooth-Adapter das Protokoll übermäßig füllte.
  • Ein Absturz, der auftrat, wenn der Dienst mehrmals hintereinander neu gestartet wurde.
  • Das Problem, dass der drahtlose Verse Grip-Dongle auf meinem Ubuntu-Laptop nach dem Aufwachen aus dem Energiesparmodus nicht mehr funktionierte.
  • Wenn der drahtlose Verse Grip-Handshakeunter Linux und macOS beim ersten Erkennungsversuch fehlschlägt, wird nun korrekt auf das Ausweichverfahren umgeschaltet.
  • Speicherort der macOS-Einstellungsdateien — anstelle des falsch eingestellten Pfads ~/Library/Application Support/wurde so geändert, dass es dort gespeichert wird.
  • Behandlung des SIGSEGV-Signals unter Linux und macOS – Wenn die Erfassung von Multithread-Abstürzen aktiviert ist, gerät der Prozess bei einem fatalen Signal nicht mehr in eine Endlosschleife.
  • Überschreiben von Befehlen zwischen Sitzungen – Früher konnten Konfigurationsbefehle einer Sitzung stillschweigend durch Befehle einer anderen Sitzung ersetzt werden; nun werden sie korrekt gefiltert und zusammengeführt.
  • Überschreiben der Einstellungen des „Probe“-Befehls — probe_positionÜberwachungssitzungen, die Daten übertragen (z. B. „ Haply -Hub“), überschreiben ausstehende Änderungen an „basis“, „preset“ und „profile“ nicht mehr stillschweigend.
  • Anzeige des Prototyp-Griffs – Ein Problem, bei dem die Prototyp-Hardware fälschlicherweise mit einem Standardgriff anstelle eines benutzerdefinierten Griffs angezeigt wurde.
  • Für Clients, bei denen noch keine Migration stattgefunden hat Legacy set_basis MatrixregelnDies wird wieder unterstützt.
  • Beim Beenden der Sitzung löst der „Inverse3 “-Kickkeine Restkraftspitzen mehr aus.
  • Ein Race-Condition-Problem beim Verlust von WebSocket-Verbindungen, das bei wiederholten schnellen Verbindungsaufbauten und -abbauten auftrat.
  • In einigen ausgehenden Nutzdaten **WebSocket session_id**가 0Das Problem, dass es serialisiert wurde.
  • Unter Windows --devBei Verwendung mit … nun --log-levelDies gilt (zuvor galt debug(wurde stillschweigend zurückgesetzt).

Mitteilung zur Einstellung der Unterstützung​

Es funktioniert zwar noch, wird aber in einer zukünftigen Hauptversion entfernt. Falls dies auf Sie zutrifft, geben Sie in Ihrer Antwort bitte an, deprecation_warning Es enthält Felder.

Von der Einstellung der Unterstützung betroffene PersonenErsatzartikel
POST /force_scalePOST /settings/devices/inverse*/filters/force_scale/gain
POST /gravity_compensationPOST /{device}/{id}/config/gravity_compensation
POST /torque_scalingPOST /{device}/{id}/config/torque_scaling
POST /device_handednessPOST /{device}/{id}/config/handedness
POST /serial_enablePOST /settings/communication/serial/enabled
POST /experimental/features/grip_dropped_simulation_stopperEinstellungs-API
POST /experimental/features/screensaver_enableEinstellungs-API
WebSocket command_data.valuesposition, vector, angles, torques
WebSocket set_angular_torqueset_angular_torques
WebSocket probe_cursor_positionprobe_position
WebSocket set_coordinate_originconfigure.preset
WebSocket-Ebene set_basisconfigure.basis

Hinweise zur Kompatibilität​

Für die Version 3.4.19 gibt es keine wesentlichen Änderungen, die die Kompatibilität beeinträchtigen. Bezüglich bestehender Integrationen sind folgende zwei Punkte zu beachten:

  1. Für HTTP-Endpunkte, deren Unterstützung eingestellt wurde, wird nun in der Antwort deprecation_warning Enthält Felder. Clients, die das Antwortschema streng validieren, müssen diese zusätzlichen Felder zulassen.
  2. WebSocket command_datavon values Das Feld wird zwar nicht mehr unterstützt, wird aber weiterhin ausgewertet. Es wird empfohlen, benannte Felder zu verwenden.

Anleitungen und Dokumentation​

  • Neue Tutorials: 05 Positionssteuerung (Position Control), 06 Integration (Inverse3 + Verse Grip), 07 Basis und Halterung (Basis and Mount), 08 HTTP-Fernkonfigurator (Remote Configurator), 09 WebSocket-Fernsteuerung (Remote Control), 10 Event-Stream-Listener (Event Stream Listener).
  • Neue Glaze-Variante: Neben der bisherigen nlohmann/json-Variante gibt es nun eine neue Glaze-Variante für alle C++-Tutorials (cpp-glz/) wurde hinzugefügt.
  • Alle Tutorials überarbeiten: Wurde an die API v3.1 angepasst (Port 10001, configure.preset, benanntes Befehlsfeld, print_state() Helfer).
  • Entfernt: Das bisherige Tutorial zum „Verse Grip Stopper“ wurde entfernt und durch ein neues, integriertes Tutorial ersetzt.
  • Aktualisierung der öffentlichen Dokumente: Der SDK-Leitfaden, die API-Referenz und die Hardware-Seiten wurden umfassend überarbeitet.