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
configureKarte — nach Gerätbasis,preset,mount,force_gate,dampingund pro Sitzungprofile,basisDas ist nun allesconfigureist 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 automatischcustomwird umgeschaltet. - Benannte Befehlsfelder —
position,vector,angles,torquesist üblichvaluesErsetzt das Array. set_angular_torquesgaset_angular_torqueersetzt (die Singularform wird nicht mehr unterstützt).- Erweiterung des Sitzungsrahmens — Erweiterbar auf die Sitzungsrahmen v3.0 und v3.1
config,state,statusEs enthält Objekte. Zu den neuen Ausgabefeldern gehörencurrent_cursor_force,current_cursor_position,current_angular_torques,current_angular_position,control_domain,control_mode,transform,transform_velocity, erweitertconfig.*, undstatus.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 /settingssowie/settings/*— API für alle Schlüssel-Wert-Einstellungen.GET /sessions/{session}sowieGET/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_dataEs 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*sowieGET /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,%3ADiese 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_interfacesIn 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 mitconfigureEs 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_basisMatrixregelnDies 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 galtdebug(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 Personen | Ersatzartikel |
|---|---|
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 |
WebSocket-Ebene set_basis | configure.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:
- Für HTTP-Endpunkte, deren Unterstützung eingestellt wurde, wird nun in der Antwort
deprecation_warningEnthält Felder. Clients, die das Antwortschema streng validieren, müssen diese zusätzlichen Felder zulassen. - WebSocket
command_datavonvaluesDas 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.