v3.5.1
3.5.1 ist ein Stabilisierungs- und Qualitätsrelease. Die Schwerpunkte sind: automatische Paarung bei 1↔1-Setups mit Inverse3 und Griff, frische Bewegungsdaten über GET /devices/{id} ohne eine offene Sitzung von WebSocket, ein Ende des Quietschens beim Wechsel zwischen Kraft- und Positionsmodus sowie ein selbstabstimmender Scheduler für den Service-Tick unter Dauerlast.
Highlights
- Automatische Paarung für 1↔1-Installationen mit Inverse3 und Griff. Sobald ein Inverse3 und ein Griff bereit sind, registriert das SDK automatisch eine Paarung.
pen_attachedund die Freischaltung der Minverse-Kalibrierung werden in Multi-Geräte-Setups nicht mehr fehlgeleitet. - Frische Snapshots über
GET /devices/{id}ohne offene Sitzung. Bei Inverse3, Inverse3x und Minverse mit Firmware v7.5+ wird der Bewegungsstatus nun unabhängig von der Aktivität von WebSocket mit 20 Hz abgefragt. Firmware vor v7.5 überspringt die Abfrage und gibt einmalig eine Warnung aus. - Der Wechsel zwischen Kraft und Position quietscht nicht mehr. Das Umschalten zwischen
set_cursor_force↔set_cursor_positionist slot-exklusiv: Zwischen zwei Ticks bleibt pro Gerät nur der jeweils neueste Befehl erhalten. Der Workaround für 200 ms Leerlaufpausen in HARP ist hinfällig. - Selbstabstimmender Tick-Scheduler. Die Hauptschleife passt ihre Versandrate unter Last an, sodass ein langsamer Tick die Befehlswarteschlange nicht unbegrenzt anwachsen lässt.
- Streaming-Antworten unter Last nach dem Prinzip 1-rein-1-raus. Streaming-Antworten pro WS-Nachricht sind pro Sitzung auf 1/ms begrenzt. Greift die Begrenzung, wird der vorherige Puffer erneut abgespielt, sodass Simulationsschleifen nie an
recv()blockieren.
Interne Verbesserungen
Geräte
- Geräteweises Paarungsregister für Inverse3 ↔ VerseGrip.
GET|POST|DELETE /devices/{sel}/paired_withist eine geräteweise 1:1-Zuordnung.POSTentfernt Konflikte auf beiden Seiten;DELETElöscht den ausgewählten Eintrag; der Selektor muss auf genau eine ID aufgelöst werden. - Abfrage des Bewegungsstatus mit 20 Hz ab Firmware v7.5+.
GET /devices/{id}liefert alle 50 ms frische Werte fürcursor_position,cursor_velocity,angular_positionundangular_velocity; ohne Auswirkung auf aktive Sitzungen. set_extension_datafür VerseGrip über Funk mit gesteuerter Rate. Die Pipeline verwirft ältere Werte, wiederholt bei Leerlauf den letzten Wert und wird beim Service-Tick geleert. Zu häufiges Senden sättigt die Funkverbindung nicht mehr, zu seltenes Senden hinterlässt keinen veralteten Wert mehr.
Sitzungen
- Neuer WS-Empfangs-Schnellpfad für reine Steuer-Batches (Kraft/Position) überspringt die konfigurationsbewusste Pipeline;
configure/set_profileund benutzerdefinierte Befehle laufen weiterhin über den Race-Fix.
Observability
- Der Log-Takt der Erkennung wird pro Port gesteuert und berücksichtigt, wie anhaltend eine Meldung ist. Jeder Port auf der Sperrliste wird unabhängig gedrosselt; die wiederkehrende Zeile
"...blacklisted: skipping"trägt nun(×N)für Ticks, die zwischen zwei Auslösungen unterdrückt wurden. - Die Funk-Erkennung von VerseGrip überflutet das Log nicht mehr, wenn ein Nicht-WVG-Gerät abgefragt wird.
Fehlerbehebungen
POST /device.config.presetmitdefaultsoderarm_frontsetzt die Halterung des Geräts nun auf die Werkseinstellung zurück (zuvor ein stiller No-Op).basisbleibt erhalten, damit app-konfigurierte Basen Änderungen der Halterungs-Voreinstellung überdauern.force_render_full_stateliefert keinen Snapshot mehr mit fehlendemconfig-Block, wenn die passende Konfiguration in derselben WS-Nachricht eingetroffen ist – der Konfigurationspfad wird vor dem Snapshot synchron abgearbeitet.- Sitzungsübergreifendes
force_render_full_stateliefert den vollständigen Snapshot des Ziels. Sowohl A als auch B erhalten nun eine vollständige Nutzlast (zuvor erhielt A nur Streaming-Daten). - Sitzungsübergreifende Befehle mit unbekannter
target_session_idblockieren die Request-Reply-Schleife nicht mehr. Der Anfragende erhält seinen eigenen Snapshot sowie ein Ereignissession-command-dropped(cross-session-unknown-target). - Freischaltungen der Minverse-Kalibrierung über mehrere Geräte werden nicht mehr fehlgeleitet. Die Kalibrierung von Minverse A schaltet Minverse B nicht mehr frei; dieselbe Korrektur gilt für den Heading-Broadcast bei inkwell-success.
- Geräteselektor von HTTP akzeptiert
#1234und1234als Geräte-ID; Selektorklassen (inverse3,verse_grip) funktionieren zusammen mit dem Index; 404-Meldungen behalten den ursprünglichen Selektorausdruck bei. - Das
ready-Flag bei VerseGrip über Funk wird nun erst nach dem initialen Geräteinfo-Handshake gesetzt – zuvor konnte es auf bestimmten Re-Attach-Pfaden umspringen, bevor sich das Gerät vollständig angemeldet hatte. - Laufzeitänderungen an keyed-rate-gate-gestützten Einstellungen wirken nun beim nächsten Zugriff (zuvor wurden sie beim ersten emplace eingefroren; nur neue Sitzungen übernahmen die Änderung).
Mögliche Breaking Changes
- 404-Meldungen von HTTP vereinheitlicht über
basis,preset,mount,transform,force_gatehinweg:"{type} device #{id} not found"→"no device matches selector '{expr}'". Die 404-Meldung für Sitzungen ist analog angepasst. - Settings-Glob
devices/inverse*/...→devices/*inverse/...für die Verstärkung der Kraftskalierung, die Verstärkung des Kraft-Gates, das Steuer-Timeout undsafeties/expose_in_snapshot. Settings-Dateien aus 3.5.0 mit dem alten Literal schlagen beim Binden fehl. - Einstellungen: Serialisierungs-Globals verschoben nach
session/serialization/*(explicit_fields,force_complete_transforms,preview/*). Alteserialization/*-Pfade werden über veraltete Aliase weiterhin aufgelöst; Entfernung in 4.0. - Verhalten: Clients, die die WS-Antwort pro Nachricht als Tick-Sync-Handshake nutzen, erhalten unter Dauerlast höchstens eine Antwort pro ms und Sitzung. Vollständige Snapshots bei Konfigurationsänderungen bleiben unberührt.
Veraltete Funktionen
Keine in 3.5.1. Der Preview-Hauptschalter ist die Infrastruktur für die kommende Pipeline in 3.6, die stille Hinweise in Warnungen umwandelt; die erste Deprecation-Runde ist für 3.5.2 geplant.