v3.5.0
Dies ist die umfangreichste Veröffentlichung seit der API-Überarbeitung vor einem Jahr. Mit Version 3.5.0 haben wir eine integrierte 3D-Mathematik-Ebene, vollständige Unterstützung für „Minverse “, typisierte Ereignisströme, eine umfassende Konfigurations-API sowie eine vereinfachte HTTP-Schnittstelle eingeführt. Darüber hinaus enthält diese Version die Fehlerbehebungen und Verbesserungen der Benutzerfreundlichkeit aus dem vergangenen Jahr.
Highlights
- Integrierte 3D-Mathematik-Ebene – Mit einer kombinierbaren Transformations-Pipeline, die erstklassige Primitive für Gerätebasis (Frame), Montage-, Arbeitsbereichs- und Navigationstransformationen bereitstellt und zudem explizite Transformationen zwischen lokalen, Sitzungs-, Anwendungs- und internen Räumen unterstützt.
- Bubble Navigation – Mithilfe von Zonen mit definierter Form (SDF-Primitive) können Sie sich innerhalb eines großen virtuellen Arbeitsbereichs bewegen. Das System unterstützt Geschwindigkeitssteuerung durch Speed-Mapping, Kollisionserkennung unter Berücksichtigung von Hysterese sowie optional eine Drift in Cursorrichtung. Es lässt sich vollständig über HTTP und WebSocket konfigurieren und unterstützt auch Roundtrips innerhalb des App-Raums.
- Typisierter Ereignisstrom – Ein dedizierter WebSocket-Ereigniskanal für den Lebenszyklus des Geräts, Sicherheitswarnungen, Kalibrierungen, den Akku, Warnungen zur Abtastrate sowie Hinweise auf nicht empfohlene Vorgehensweisen.
- Konfigurations-API – Ein umfassendes Schlüssel-Wert-Konfigurationssystem mit HTTP-CRUD, Typhinweisen, Bereichsbeschränkungen und Beschreibungen. Es ersetzt herkömmliche verschachtelte Konfigurationsdateien.
- Konsistenz der Geräteeinstellungen — Verwenden Sie auf allen Geräten eine einheitliche HTTP-Route:
basis、mount、preset、transform、filters、handedness、torque_scaling、gravity_compensation、home_return。 - Minverse Synchronisierte Kalibrierung von Gerät und Stift — Gerät und Stift können nun gemeinsam kalibriert werden. Die Kalibrierung bleibt gesperrt, bis der Griff physisch angebracht ist.
- Verbesserung der Benutzerfreundlichkeit von HTTP — Indexbasierter Geräteselektor (keine ID erforderlich, Geräte können über den Index angegeben werden), ein mit WebSocket gemeinsames Anfrage-/Antwortformat, Opt-in-
{ok, error, data}Umschlag (?format=json), wurde ein Session-Selektor mit Platzhaltern integriert.
Neue Funktionen
Gerät
- Minverse — Mit dieser Version wurden folgende Workflows offiziell unterstützt: Erkennung, Vorbereitungssequenz, Sicherheitshinweise und Synchronisationskalibrierung.
- Ruko und Kingfisher werden nun als offizielle Griff-Produkttypen anerkannt.
- Unterstützung für Gerätesimulatoren – Neben physischen Geräten können auch softwarebasiert simulierte Geräte erkannt und mit ihnen kommuniziert werden.
- Schutz vor Verbindungsschleifen — Ports, die unzulässige Aktivitäten aufweisen, werden automatisch blockiert.
POST /ports/{port}/resetkann zurückgesetzt werden. - Herzschlag-Sensor mit Stift – Mit Entprellung, um das Anbringen und Abnehmen des Griffs zuverlässig zu erkennen.
Sitzung, Befehl, WebSocket
- Filterung und Persistenz von Sitzungsprofilen — Eine Sitzung deklariert einen Profilnamen und die erforderliche SDK-Version. Der Dienst speichert diese Informationen über mehrere Verbindungsneuaufnahmen hinweg, sodass Clients und Überwachungstools die Sitzungen anhand dieses Profils filtern und zuordnen können.
- Befehlspuffer pro Sitzung – Langsame Sitzungen führen nun nicht mehr dazu, dass andere Sitzungen ins Stocken geraten.
- Explizite Anweisung für Ein-Schritt-Befehle
configureKarte — gerätebezogenbasis、preset、mount、force_gate、dampingsowie pro Sitzungprofileundbasisaber allesconfigurewurden zusammengefasst. Da sie an die Konfigurationstabelle für die Ausgabe angepasst wurden, stimmen sie beim Zurücklesen der gesendeten Inhalte überein. - Anpassbare Gerätehalterung — Integrierte Arbeitsbereichsvoreinstellungen (
defaults、arm_front、arm_front_centered、led_front、led_front_centered) auswählen oder eine explizite Konvertierung senden. Wenn Sie die Einbindung manuell ändern, wird die Voreinstellung automatischcustomwird umgeschaltet. - Benannte Befehlsfelder — Allgemein einsetzbar
valuesAnstelle eines Arrays,position、vector、angles、torqueswird verwendet. set_angular_torquesaberset_angular_torquewurde ersetzt (die Singularform wird nicht empfohlen).- Erweiterung des Sitzungsrahmens — Die Sitzungsrahmen von v3.0 und v3.1 sind erweiterbar
config、state、statusEs gibt nun ein Objekt. Das neue Ausgabefeld enthält:current_cursor_force、current_cursor_position、current_angular_torques、current_angular_position、control_domain、control_mode、transform、transform_velocity、ausführlichereconfig.*, undstatus.safety(Standardmäßig ausgeblendet) ist enthalten. - Teilweise Aktualisierung der Konvertierung — In Bezug auf Halterungen, Arbeitsbereichsumwandlung und Navigationsformen: Die Unterfelder, die Sie ändern möchten (
position、rotation、scale) können gesendet werden.
HTTP
GET /— Version des Dienstes.GET/POST/DELETE /settingssowie/settings/*— Eine vollständige API zur Konfiguration von Schlüssel-Wert-Paaren.GET /sessions/{session}sowieGET/POST/DELETE /sessions/{session}/profile。GET /devices?session=<selector>— Die Koordinaten des Geräts werden in den Anwendungsraum der angegebenen Sitzung umgerechnet.- Indexbasierter Geräteselektor — Ohne Angabe einer ID kann jedes Gerät über den Index ausgewählt werden (das erste „ Inverse3 “ ist
/inverse3/0/...、Alle Geräte der Inverse-Serie sind/inverse*/*/...). - Einheitliches Anfrage-/Antwortformat — Der POST-/GET-Body entspricht dem von WebSocket
command_dataEs wird das JSON-Format verwendet. Code, der für den einen Transport geschrieben wurde, funktioniert auch beim anderen. - Opt-in-Umschlag — auf einem beliebigen Weg
?format=jsonwird angegeben./settings*undGET /home_returnDie Standardeinstellung ist{ok, error, data}. Wenn Sie das Rohformat verwenden,?format=plainwird angegeben. - Platzhalter im Sitzungsselektor — Im Profilnamen heißt es:
*(beliebige Zeichenfolge) und?(ein beliebiges Zeichen) kann verwendet werden. - Prozentual entschlüsselter Selektor —
%2A、%3ADiese werden vor dem Routing dekodiert.
Veranstaltung
communication/events/portDer oben genannte dedizierte WebSocket-Ereignisstrom.- 24 typisierte Ereigniskategorien, darunter Geräte-Lebenszyklus, Sicherheit (Notbremsung, Fremdkörpererkennung, Stillstand), Kalibrierungsfehler, Akkuwarnungen, Sitzungswarnungen, niedrige/gefährliche Steuerungsrate, Eingabevalidierung und nicht empfohlene Hinweise.
Beobachtbarkeit
- Beim Profiling werden die Protokollmeldungen entsprechend ihrer Schwere in verschiedenen Farben an Tracy weitergeleitet.
- Für alle HTTP-Handler wurde eine Tracy-Zone eingerichtet.
- Zeitliche Statistikereignisse der Hauptschleife.
- Das Protokollverzeichnis und der Hostname des Servers können konfiguriert werden (Docker-kompatibel).
Geplante Bereitstellung in Version 3.6
- SDF-Haptik-Effekte (SDF HFX) – Die Grundlagen wurden in Version 3.5 eingeführt (Module, Lebenszyklus, Serialisierung der von den Modulen bereitgestellten Befehle und Zustände). Die öffentliche API soll in Version 3.6 zusammen mit einer vollständigen Dokumentation veröffentlicht werden.
Verbesserungsmöglichkeiten
- Schwingungsfilterung nach Leistung — Schwingungserkennung pro Achse, 8-stufige schrittweise Rückgewinnung, Eintrittsabstimmung mit Hysterese, asymmetrisches Freigabefenster.
- Leistungsgate-Filter zur Laufzeit —
configure.force_gate.gain(über WebSocket oder HTTP) konfigurierbar. Es gibt einen dauerhaften Standardwert. - Für Präzisionsanwendungen wurde die maximale Frequenz der Hauptschleife auf 32 kHz erhöht.
- Reduzierung der Größe der WebSocket-Nutzdaten — Unterfeld für die Transformation, bei der die Identitätstransformation als Standard festgelegt ist (
position = 0、rotation = identity、scale = 1) werden standardmäßig aus der Ausgabe weggelassen. Dadurch wird die Payload-Größe reduziert und die Kompatibilität mit der 4-KB-Nachrichtenobergrenze älterer Unity-Pakete wiederhergestellt. Zwei erweiterte Einstellungen (serialization/explicit_fields、serialization/force_complete_transforms) können Sie alle Felder für die gewünschten Verbraucher wiederherstellen. - Reduzierung des Jitters in der Hauptschleife — Auch während der JSON-Analyse und der Netzwerkübertragung blockiert die Verarbeitung von WebSocket-Nachrichten nun nicht mehr die Ticks der Hauptschleife. Die Planung der Session-Ticks wurde vor die Serialisierung der Antworten verlegt.
- Der Server ist standardmäßig nur auf den lokalen Host beschränkt. — Um den Netzwerkzugriff zu aktivieren,
communication/bind_all_interfacesBitte aktivieren Sie diese Option in den Einstellungen. - Verwendung der Präfixsyntax bei Platzhaltern im Geräteselektor(Beispiel:
inverse*(gilt für alle Geräte der Inverse-Serie). - Dumping-Befehl ,
force_gatenebenconfigureIch bin zur Karte gewechselt. - Der Dateilogger mit Rotationsfunktion hat das bisherige Modell abgelöst, und es können nun Verzeichnisse festgelegt werden.
- Vom Modul bereitgestellte Befehle und Statusangaben — Module können eigene Befehle und Felder definieren und Statusangaben in WebSocket-Frames einbinden, ohne das Kernschema zu ändern.
Korrektur
Hier sind die Fehlerbehebungen des letzten Jahres. Die wichtigsten davon sind im Folgenden aufgeführt.
- Ein Problem, bei demdie Sitzungsgeschwindigkeitunter bestimmten Bedingungeninstabil wird.
- Ein Problem, bei dem der **GripHook (Verse Grip Stopper)** nicht korrekt gelöst wird, wenn die Simulation nicht ausgeführt wird.
- Ein Problem, bei dem es auf Geräten mit langsamer Startzeit zu einer Endlosschleife kam, weil das Timeout von Inverse3zu kurz war.
- Unvollständiges Beenden von Diensten unter Windows – Problem, bei dem der HTTP-Server beim Herunterfahren nicht immer vollständig bereinigt wird.
- Eine Wiederverbindungsschleife, die auftritt, wenn ein Dienst Befehle an eine ältere Firmware-Version sendet, die diese Befehle nicht unterstützt.
- Ein Problem bei Systemen mit Bluetooth-Adapter, bei demdurch das Auflisten von Bluetooth-Geräteneine große Menge an Protokollen ausgegeben wird.
- Absturzbeim wiederholten Neustart des Dienstes.
- Ein Problem, bei demder Wireless Verse Grip-Dongleauf einem Ubuntu-Laptop nach dem Aufwachen aus dem Ruhezustandeinfriert.
- Der Handshake des Wireless Verse Grip unter Linux und macOSwechselt nun korrekt auf einen Ausweichmodus, falls der erste Erkennungsversuch fehlschlägt.
- Speicherort der Konfigurationsdateien unter macOS — Die Einstellung lautet nicht „falscher Pfad“, sondern
~/Library/Application Support/wird nun dort gespeichert. - Behandlung von SIGSEGV-Signalen unter Linux und macOS – Wenn die Erfassung von Abstürzen in Multithread-Umgebungen aktiviert ist, bleibt der Prozess nicht mehr aufgrund eines fatalen Signals in einer Schleife hängen.
- Überschreiben von Befehlen über Sitzungen hinweg — Es gab ein Problem, bei dem Konfigurationsbefehle einer Sitzung unbemerkt durch Befehle einer anderen Sitzung überschrieben wurden; mittlerweile werden diese jedoch korrekt gefiltert und zusammengeführt.
- Überschreiben der Einstellungen durch Probe-Befehle —
probe_positionDie überwachte Sitzung (z. B. „Haply Hub“), die die Daten überträgt, überschreibt nun nicht mehr unwissentlich ausstehende Änderungen an „basis“, „preset“ oder „profile“. - Anzeige des Prototyp-Griffs — Ein Problem, bei dem die Prototyp-Hardware fälschlicherweise als Standardgriff statt als benutzerdefinierter Griff angezeigt wurde.
- Für Clients, die noch nicht migriert wurden,Legacy-
set_basisRegeln für Zeilenist wieder aktiv. - Beim „Force Kick“ von Inverse3 bei einer Unterbrechung der Sitzungtreten nun keine verbleibenden Force-Spitzen mehr auf.
- Ein WebSocket-Verbindungsverlust-Wettlauf, der bei schnellen, wiederholten Verbindungsaufbau- und -abbauvorgängen auftritt.
- Bei einigen gesendeten Nutzdaten wird **WebSocket-
session_id**が**0Das Problem, das als … serialisiert worden war. - Unter Windows gilt:
--devauch bei gleichzeitiger Anwendung--log-levelwird nun berücksichtigt (früher geschah dies, ohne dass man es bemerkte)debug(war auf zurückgesetzt worden).
Nicht empfohlen
Es funktioniert weiterhin, soll aber in einer zukünftigen Hauptversion entfernt werden. In diesem Fall enthält die Antwortdeprecation_warningEnthält Felder.
| Nicht empfohlen | Stattdessen |
|---|---|
POST /force_scale | POST /settings/devices/inverse*/filters/force_scale/gain |
POST /gravity_compensation | POST /{device}/{id}/config/gravity_compensation |
POST /torque_scaling | POST /{device}/{id}/config/torque_scaling |
POST /device_handedness | POST /{device}/{id}/config/handedness |
POST /serial_enable | POST /settings/communication/serial/enabled |
POST /experimental/features/grip_dropped_simulation_stopper | Einstellungs-API |
POST /experimental/features/screensaver_enable | Einstellungs-API |
WebSocket command_data.values | position, vector, angles, torques |
WebSocket set_angular_torque | set_angular_torques |
WebSocket probe_cursor_position | probe_position |
WebSocket set_coordinate_origin | configure.preset |
Auf WebSocket-Sitzungsebeneset_basis | configure.basis |
Hinweise zur Kompatibilität
Seit Version 3.4.19 gibt es keine kompatibilitätsbrechenden Änderungen. Bei bestehenden Verknüpfungen sind die folgenden zwei Punkte zu beachten:
- Für HTTP-Endpunkte, die nicht mehr empfohlen werden, wird in der Antwort
deprecation_warningEs wurde ein Feld hinzugefügt. Clients, die das Antwortschema streng überprüfen, müssen dieses zusätzliche Feld zulassen. - WebSocket-
command_datain …valuesDas Feld wird zwar nicht mehr empfohlen, wird aber weiterhin ausgewertet. Es wird empfohlen, benannte Felder zu verwenden.
Tutorials und Dokumentation
- Neue Tutorials: 05 Positionssteuerung, 06 Kombiniert (Inverse3 + Verse Grip), 07 Basis und Montage, 08 HTTP-Fernkonfigurator, 09 WebSocket-Fernsteuerung, 10 Event-Stream-Listener.
- Neben den bestehenden nlohmann/json-Varianten werden in allen C++-Tutorials nun auch die neuen Glaze-Varianten (
cpp-glz/) wurde hinzugefügt. - Alle Tutorials neu schreiben、Unterstützung für die API v3.1 (Port 10001,
configure.preset, benanntes Befehlsfeld,print_state()Helfer). - Das alte Tutorial zum „Verse Grip Stopper“wurde entfernt. Es wurde durch das neue „Combined“-Tutorial ersetzt.
- Die öffentlich zugänglichen Dokumentewurden aktualisiert. Dies betrifft den SDK-Leitfaden, die API-Referenz sowie alle Hardware-Seiten.