Haply SDK 3.5.0
Unsere umfangreichste Version seit der Neugestaltung der API vor einem Jahr. Die Version 3.5.0 bietet eine einheitliche 3D-Mathematikschicht, vollständige Unterstützung für Minverse, einen typisierten Ereignisfluss, eine umfassende Parameter-API und eine übersichtlichere HTTP-Schnittstelle – zusätzlich zu einem Jahr voller Fehlerbehebungen und Verbesserungen der Benutzerfreundlichkeit.
Highlights
Vereinheitlichte mathematische 3D-Ebene – eine komponierbare Transformations-Pipeline mit Primitiven erster Ordnung für die Gerätegrundebene (Frame), die Montage-Transformation, die Arbeitsbereichstransformation und die Navigation-Transformation sowie explizite Konvertierungen zwischen lokalem, Sitzungs-, Anwendungs- und internem Raum.Blasen-Navigation – Navigation in großen virtuellen Arbeitsbereichen durch Bereiche mit definierter Form (SDF-Primitive) mit einer geschwindigkeitsabhängigen Steuerung der Bewegungsgeschwindigkeit, einer Kollisionserkennung unter Berücksichtigung der Hysterese und einer optionalen Drift in Richtung des Cursors. Vollständig konfigurierbar über HTTP und WebSocket, mit Hin- und Rückübertragung im Anwendungsbereich.Typisierter Ereignisstrom – ein WebSocket-Ereigniskanal für den Lebenszyklus von Geräten, Sicherheitswarnungen, Kalibrierung, Akku, Warnungen zur Überprüfungshäufigkeit und Veraltungshinweise.API-Parameter – ein umfassendes Schlüssel-Wert-Parametersystem mit HTTP-CRUD-Operationen, Typangaben, Bereichsbeschränkungen und Beschreibungen, das die bisherige verschachtelte Konfigurationsdatei ersetzt.Einheitliche Konfiguration der Geräte — jeweils nur ein Satz von HTTP-Routen für jedes Gerät: Grundlage, Halterung, Voreinstellung, umwandeln, Filter, Handhabung, Drehmomentskalierung, Schwerkraftkompensation, Startseite_Zurück.Synchronisierte Kalibrierung von Minverse und Stift – Gerät und Stift werden nun gemeinsam kalibriert; die Kalibrierung bleibt gesperrt, solange kein Griff physisch befestigt ist.Verbesserungen der Benutzerfreundlichkeit für HTTP — Geräteauswahl über Index (Auswahl eines Geräts anhand seines Index, keine ID erforderlich), einheitliche Abfrage- und Antwortstruktur, die auch von WebSocket genutzt wird, Hülle {ok, Fehler, Daten} zu aktivieren (?format=json) und generische Sitzungsselektoren.Neue Funktionen
Geräte
Minverse – in dieser Version offiziell enthaltene Funktionen: Erkennung, Vorbereitungsablauf, Sicherheitsbenachrichtigungen und synchronisierter Kalibrierungsablauf.Ruko und Kingfisher wurden als offizielle Griff-Produkttypen anerkannt.Unterstützung von Gerätesimulatoren – Erkennung und Kommunikation mit softwarebasierten Simulationsgeräten parallel zur tatsächlichen Hardware.Schutz vor Verbindungsschleifen — Fehlerhafte Ports werden automatisch gesperrt; Zurücksetzen mit POST /ports/{port}/reset.Signal zur Anzeige des Einsteckens des Stifts – zuverlässige Erkennung des Einsteckens und Herausziehens des Griffs, mit Rückprallschutz.Sitzungen, Befehle und WebSocket
Filterung und Beibehaltung von Sitzungsprofilen – Sitzungen geben einen Profilnamen und die erforderliche SDK-Version an, die der Dienst von einer erneuten Verbindung zur nächsten speichert; Clients und Überwachungstools können Sitzungen anhand dieses Profils filtern und gezielt ansprechen.Auftragswarteschlangen pro Sitzung – eine langsame Sitzung kann eine andere nicht mehr blockieren.Ausführliches `configure`-Wörterbuch für einzelne Befehle — Grundlage, Voreinstellung, Halterung, Krafttor, Dämpfung pro Gerät sowie Profil et Grundlage pro Sitzung, die nun alle zusammengefasst sind in konfigurieren — abgestimmt auf das Ausgabekonfigurationswörterbuch, sodass das, was Sie senden, mit dem übereinstimmt, was Sie zurücklesen.Individuell anpassbare Gerätemontage — Wählen Sie eine integrierte Arbeitsbereichsvoreinstellung (Standardwerte, Vorderarm, arm_front_centered, LED-Frontleuchte, led_front_centered) oder senden Sie eine explizite Transformation; jede manuelle Änderung der Montage schaltet die Voreinstellung automatisch auf benutzerdefiniert.Benannte Steuerfelder — Position, Vektor, Winkel, Drehmomente ersetzen die allgemeine Tabelle Werte.Winkelmomente festlegen ersetzen Winkelmoment festlegen (Die Singularform wird nicht bevorzugt).Erweiterungen der Sitzungsrahmen — Die Session-Frames der Versionen v3.0 und v3.1 enthalten nun erweiterbare Objekte Konfiguration, Zustand et Status; die neuen Ausgabefelder umfassen current_cursor_force, aktuelle_Cursorposition, aktuelle Drehmomente, aktuelle Winkelposition, Kontrolldomäne, Steuerungsmodus, umwandeln, transform_velocity, des config.* bereichert und status.sicherheit (standardmäßig ausgeblendet).Teilweise Aktualisierungen der Transformationen — Senden Sie nur die Unterfelder, die Sie ändern möchten (Position, Rotation, Skala) für den Aufbau, die Gestaltung des Arbeitsbereichs und die Art der Navigation.HTTP
GET / — Version des Dienstes.GET/POST/DELETE /settings et /Einstellungen/* — API complète de paramètres clé-valeur.GET /sessions/{session} et GET/POST/DELETE /sessions/{session}/profile.GET /devices?session=<selector> — wandelt die Koordinaten der Geräte in den Anwendungsraum einer bestimmten Sitzung um.Geräteauswahl nach Index — Wählen Sie ein beliebiges Gerät mit dem Zeigefinger aus, ohne dessen Kennung zu kennen (/inverse3/0/... für den ersten „ Inverse3 “; inverse... (für alle Geräte der Inverse-Familie).Einheitliche Abfrage- und Antwortstruktur — POST-/GET-POSTINGS verwenden dieselben JSON-Strukturen Befehlsdaten WebSocket; der für einen Transport geschriebene Code funktioniert auch mit dem anderen.Optionaler Umschlag über ?format=json auf jeder Straße; /Einstellungen* et GET /home_return verwenden {ok, Fehler, Daten} Standardmäßig. Verwenden Sie ?format=plain um die Rohstruktur zu erhalten.Platzhalter in Sitzungsselektoren — * (beliebige Zeichenfolge) und ? (ein einzelnes Zeichen) in den Profilnamen.In Prozent umgerechnete Auswahlschalter — %2A, %3A, usw. werden vor der Weiterleitung entschlüsselt.Veranstaltungen
WebSocket-spezifischer Ereignisstrom auf Kommunikation/Veranstaltungen/Hafen.24 definierte Ereigniskategorien, darunter der Lebenszyklus der Geräte, Sicherheit (Notbremse, Fremdkörpererkennung, Blockierung), Kalibrierungsfehler, Akkuwarnungen, Sitzungswarnungen, geringe oder kritische Befehlsfrequenz, Eingabevalidierung und Veralterungshinweise.Beobachtbarkeit
An Tracy übermittelte Protokollmeldungen, bei der Profilierung nach Schweregrad farblich gekennzeichnet.Tracy-Zonen auf jedem HTTP-Manager.Ereignisse zur Erfassung der Laufzeiten der Hauptschleife.Konfigurierbares Protokollverzeichnis und Hostname des Servers (für Docker geeignet).In Version 3.6 geplant
SDF-Haptik-Effekte (SDF HFX) – Die Grundlagen wurden in Version 3.5 gelegt (Modul, Lebenszyklus, Serialisierung von Befehlen und vom Modul bereitgestellten Zuständen), und die öffentliche API wird in Version 3.6 zusammen mit einer umfassenden Dokumentation bereitgestellt.Verbesserungen
Filterung von Kraftschwankungen – Erkennung von Schwankungen pro Achse, schrittweise Rückgewinnung in 8 Stufen, Eingangsbewertung mit Hysterese und asymmetrischen Entspannungsfenstern.Force-Gate-Filter zur Laufzeit — konfigurierbar mithilfe von configure.force_gate.gain über WebSocket oder HTTP, mit einem persistenten Standardwert.Die maximale Frequenz der Hauptschleife wurde für Präzisionsanwendungen auf 32 kHz erhöht.Geringere WebSocket-Nutzgebühren — die Transformationsunterfelder, deren Standardwert die Identität ist (position = 0, Rotation = Identitätsmatrix, Maßstab = 1) werden standardmäßig aus der Ausgabe weggelassen, wodurch die Größe der Nutzdaten reduziert und die Kompatibilität mit der 4-KB-Grenze für Nachrichten in älteren Unity-Paketen wiederhergestellt wird. Zwei erweiterte Parameter (Serialisierung/explizite Felder, Serialisierung/Transformationen zwangsweise abschließen) fügen alle Felder für diejenigen Verbraucher wieder ein, die diese benötigen.Reduzierte Auslastung der Hauptschleife – Die Verarbeitung von WebSocket-Nachrichten blockiert den Ablauf der Hauptschleife während der JSON-Analyse und der Netzwerkübertragung nicht mehr; die Planung der Sitzungszyklen wurde vor die Serialisierung der Antworten verlegt.Die Server sind standardmäßig auf „localhost“ beschränkt. — Aktivieren Sie den Netzwerkzugang mit der Einstellung Kommunikation/Alle Schnittstellen binden.Die Platzhalter in den Geräteselektoren verwenden die Präfix-Syntax (z. B. inverse (passen zu allen Geräten der Inverse-Familie).Die Befehle zur Dämpfung wurden in das Objekt verschoben konfigurieren, neben Krafttor.Die Protokollierung mit rotierenden Dateien ersetzt die bisherige Methode und verfügt über ein konfigurierbares Verzeichnis.Von den Modulen bereitgestellte Befehle und Statusmeldungen – Die Module können ihre eigenen Befehle, Konfigurationsfelder und Statusmeldungen in den WebSocket-Frame einfügen, ohne das Basisschema zu ändern.Korrekturen
Ein Jahr voller Fehlerbehebungen; die wichtigsten sind im Folgenden aufgeführt.
Unter bestimmten Bedingungen kommt es zu Schwankungen der Sitzungsgeschwindigkeit.GripHook (Verse Grip Stopper) ließ sich nicht ordnungsgemäß lösen, wenn keine Simulation lief. Inverse3 -Wartezeiten waren zu kurz und führten bei Geräten mit langsamem Start zu Verbindungsabbrüchen.Fehlerhaftes Beenden des Dienstes „ Windows “ – der HTTP-Server wurde beim Beenden nicht immer bereinigt.Schleife zur Wiederherstellung der Verbindung, wenn der Dienst Befehle an ältere Firmware-Versionen sendete, die nicht unterstützt wurden.Die Auflistung der Bluetooth-Geräte führte auf Systemen mit Bluetooth-Adaptern zu einer Überlastung des Protokolls.Absturz bei wiederholten Neustarts des Dienstes.Das Problem mit dem kabellosen „Verse Grip“-Dongle auf Ubuntu-Laptops nach dem Ruhezustand und dem Wiederauffahren.Die kabellose Verse Grip-Handhabung unter Linux und macOS wechselt nun korrekt zur Alternativlösung, wenn der erste Erkennungsversuch fehlschlägt.Speicherort der Konfigurationsdatei unter macOS — Die Konfiguration ist nun gespeichert in ~/Bibliothek/Application Support/ anstatt den falschen Weg einzuschlagen.Behandlung des SIGSEGV-Signals unter Linux und macOS – Der Prozess gerät nicht mehr in eine Endlosschleife bei fatalen Signalen, wenn die Erfassung von Multithread-Abstürzen aktiviert ist.Überschreiben von Befehlen zwischen Sitzungen – Konfigurationsbefehle einer Sitzung konnten unbemerkt durch die einer anderen Sitzung überschrieben werden; sie werden nun gefiltert und korrekt zusammengeführt.Befehle zur Sensorsteuerung, die die Konfiguration überschreiben — Überwachungssitzungen (z. B. „ Haply -Hub“), die Sondenposition überschreiben die ausstehenden Basis-, Voreinstellungs- oder Profiländerungen nicht mehr stillschweigend.Anzeige der Prototyp-Griffe – das Prototyp-Material wurde fälschlicherweise als Standardgriff statt als individueller Griff angezeigt.Die wieder eingeführte Matrixkonvention `set_basis` wird nun wieder für Kunden beachtet, die noch nicht migriert hatten. Inverse3 -Kraftimpuls beim Beenden einer Sitzung verursacht keine Restkraftspitzen mehr.WebSocket-Konkurrenzbedingung bei Verbindungsabbruch während schneller Verbindungs- und Trennungszyklen.WebSocket-`session_id` wurde serialisiert als 0 bei bestimmten ausgehenden Nutzlasten.Auf Windows, --Protokollstufe wird nun eingehalten, wenn es in Kombination mit --dev (zuvor wurde er stillschweigend auf Debug).Wertminderungen
Sie sind weiterhin funktionsfähig, werden jedoch in einer zukünftigen Hauptversion entfernt. Die Antworten enthalten ein Feld Warnung vor veralteten Funktionen gegebenenfalls.
| Veraltet | Ersatz |
|---|---|
| POST /force_scale | POSTinverse |
| 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 | Einstellungen-API |
| POST /experimental/features/screensaver_enable | Einstellungen-API |
| WebSocket command_data.values | Position, Vektor, Winkel, Drehmomente |
| WebSocket Winkelmoment festlegen | Winkelmomente festlegen |
| WebSocket Cursorposition abfragen | Sondenposition |
| WebSocket set_coordinate_origin | Konfigurationsvoreinstellung |
| WebSocket Basis festlegen auf Sitzungsebene | configure.basis |
Kompatibilitätshinweise
Keine wesentlichen Kompatibilitätsprobleme im Vergleich zu 3.4.19. Zwei kleinere Anmerkungen zu den bestehenden Integrationen:
Zu den veralteten HTTP-Endpunkten gehört nun ein Feld Warnung vor veralteten Funktionen in der Antwort – Kunden, die die Antwortschemata streng überprüfen, müssen dieses zusätzliche Feld akzeptieren.Das Feld Werte de WebSocket Befehlsdaten ist zwar veraltet, wird aber weiterhin ausgewertet; verwenden Sie vorzugsweise benannte Felder.Anleitungen und Dokumentation
Neue Tutorials: 05 Positionssteuerung, 06 Kombiniert (Inverse3 + Verse Grip), 07 Basis und Montage, 08 HTTP-Fernkonfigurator, 09 WebSocket-Fernsteuerung, 10 Ereignis-Stream-Listener.Neue Variante „Glaze“ jedes C++-Tutorial (cpp-glz/), neben der bereits vorhandenen Variante nlohmann/json.Alle überarbeiteten Anleitungen für die API v3.1 (Port 10001, Konfigurationsvoreinstellung, benannte Befehlsfelder, Hilfsfunktionen print_state()).Das alte Tutorial „Verse Grip Stopper“ wurde entfernt und durch das neue Tutorial „Combiné“ ersetzt.Die öffentliche Dokumentation wurde in den SDK-Handbüchern, der API-Referenz und auf den Hardware-Seiten aktualisiert.