No description
  • C# 99.6%
  • PowerShell 0.4%
Find a file
2026-09-25 19:18:46 +02:00
src/InventorDroneNavigation feat: add calibrated screen-oriented drone navigation 2026-09-25 19:18:46 +02:00
tools/SpaceMouseRawMonitor feat: add calibrated screen-oriented drone navigation 2026-09-25 19:18:46 +02:00
.gitignore feat: add calibrated screen-oriented drone navigation 2026-09-25 19:18:46 +02:00
InventorDroneNavigation.addin Initial Inventor 2020 Drone Mode prototype 2026-09-24 20:24:17 +02:00
InventorDroneNavigation.sln Initial Inventor 2020 Drone Mode prototype 2026-09-24 20:24:17 +02:00
README.md feat: add calibrated screen-oriented drone navigation 2026-09-25 19:18:46 +02:00

Inventor Drone Navigation

Prototype für einen kamerabasierten SpaceMouse-„Drone Mode“ in Autodesk Inventor 2020.

Milestone 1

Der aktuelle Stand enthält:

  • Visual-Studio-Solution für .NET Framework 4.8
  • ApplicationAddInServer mit Ribbon-Schaltfläche „Drone Mode“
  • sichere Windows-Raw-Input-Erfassung über ein unsichtbares MessageWindow
  • Erkennung von HID-Multi-Axis-Reports und Debug-Ausgabe der sechs Achsen
  • Grundgerüste für Kamera-Controller, Vektormathematik, Navigation und Einstellungen

Milestone 2

  • vollständig bildschirmorientierte kamerabasierte Translation, unabhängig von Modell-/Weltachsen
  • Vorwärts-/Rückwärtsflug entlang der Blickrichtung sowie seitliche und vertikale Bewegung parallel zum Bildschirm
  • Deadzone, Invertierung, Sensitivitätskurve, DeltaTime und Input-Smoothing
  • Horizon Lock für die optionale weltachsenbezogene Yaw-Referenz

Voraussetzungen

  • Autodesk Inventor 2020 x64
  • Visual Studio 2019 oder 2022 mit .NET Framework 4.8 Developer Pack
  • 3Dconnexion SpaceMouse mit installiertem Windows-Treiber

Der Projektpfad InventorInteropPath in src/InventorDroneNavigation/InventorDroneNavigation.csproj zeigt standardmäßig auf:

C:\Program Files\Autodesk\Inventor 2020\Bin\Public Assemblies\Autodesk.Inventor.Interop.dll

Kompilieren

  1. InventorDroneNavigation.sln in Visual Studio öffnen.
  2. Prüfen, dass die Inventor-2020-Interop am oben genannten Pfad vorhanden ist.
  3. Build > Build Solution ausführen.

Die DLL und das Manifest liegen danach unter src\InventorDroneNavigation\bin\Debug\ bzw. bin\Release\.

Installation

  1. Einen permanenten Zielordner anlegen, z. B. %ProgramData%\Autodesk\ApplicationPlugins\InventorDroneNavigation.
  2. DLL und .addin-Datei aus dem Build-Ausgabeordner dorthin kopieren.
  3. In der .addin-Datei kann <Assembly> bei Bedarf auf einen absoluten DLL-Pfad angepasst werden. Für eine portable Installation müssen Manifest und DLL im selben Ordner liegen.
  4. Inventor 2020 neu starten.

Die verwendete GUID ist {B4D1AF6E-61D4-4A13-94A8-5A0A5D1C7B20}.

Verwendung und Debugging

Die Ribbon-Schaltfläche startet und stoppt den Raw-Input-Empfänger. Debug-Ausgaben erscheinen in Visual Studio im Output-Fenster (Debug.WriteLine). Die Rohreports werden absichtlich zusätzlich hexadezimal protokolliert, weil sich HID-Reportlayouts zwischen SpaceMouse-Modellen unterscheiden können.

  • Die Drohnennavigation steuert die Inventor-Kamera mit Translation und Rotation: Tx fliegt vorwärts/rückwärts entlang der Blickrichtung, Ty bewegt links/rechts parallel zum sichtbaren Bildschirm und Tz bewegt oben/unten parallel zum sichtbaren Bildschirm. Diese Translation ist vollständig unabhängig von der Modell-/Weltachse im Inventor-Triad. Rx ist Pitch, Ry optional Roll und Rz Yaw. Deadzone, DeltaTime, Invertierung, Sensitivitätsexponent und Smoothing sind ebenfalls verfügbar.

3Dconnexion-Inventor-Standardprofil

Die Add-in-Standards entsprechen der abgestimmten aktiven SpaceMouse-Konfiguration: Objektmodus, Navigation aktiv, alle Achsen aktiv, Roll aktiv, ResponseCurve=1.7, Deadzone=0.05, T-Geschw.=100, R-Geschw.=1 sowie die Achsenmultiplikatoren Tx=0.12, Ty=0.22, Tz=1.11, Rx=2.48, Ry=2.46 und Rz=2.98. Diese Werte werden durch Auf Standard zurücksetzen wiederhergestellt.

Die Raw-HID-Werte werden vor der Kennlinie pro Achse kalibriert. Eine Messung mit SpaceMouseRawMonitor am 25. September 2026 ergab für die verwendete SpaceMouse Compact die Vollaussteuerungen HID X=1892, HID Y=445, HID Z=5410, Rx=908, Ry=908 und Rz=892. Eine gemeinsame Normierung ist bei diesem Gerät falsch, weil sie dieselbe physische Auslenkung je nach Achse sehr unterschiedlich gewichtet. Translation und Rotation kommen als unmittelbar aufeinanderfolgende getrennte Reports; sie werden nur bei einem maximalen Reportabstand von 8 ms kombiniert. Die Messung ergab dafür einen Median von 0,079 ms und ein 99%-Perzentil von 0,296 ms. Das Profil verwendet AxisFilter=None; daher ist kein Dominant-Axis-Filter aktiv. Es enthält keinen separaten Beschleunigungs- oder zeitbasierten Filterwert, weshalb Smoothing standardmäßig 0 bleibt.

Bekannte Einschränkungen

  • Inventor 2020 bzw. der 3Dconnexion-Treiber kann seine native Navigation parallel weiterverarbeiten. Eine dokumentierte, zuverlässige Inventor-API zum globalen Deaktivieren dieser Funktion ist im Prototyp nicht verwendet. Es gibt keine globalen Hooks.
  • Raw Input ist nicht exklusiv. Das Add-in empfängt Daten zusätzlich zur normalen Geräteverarbeitung.
  • Das generische 16-Bit-Parser-Schema dient der ersten Erkennung. Unbekannte HID-Layouts werden nur geloggt und nicht geraten.
  • Die aktuelle Raw-Input-Verarbeitung verwendet ein verstecktes WinForms-MessageWindow und verarbeitet die Kamera im selben Fensterthread. Eine vollständig entkoppelte 60-Hz-Queue mit Inventor-UI-Synchronisierung bleibt für die Stabilisierung vorgesehen.

Navigationsmodi und Achsen

Im Diagnosefenster gibt es für jede SpaceMouse-Achse die Spalte Aktiv und die Option Umkehren. Wird Aktiv deaktiviert, wird diese Achse vollständig gesperrt und mit dem Wert 0 an die Kamerasteuerung weitergegeben. Dadurch kann beispielsweise nur Translation oder nur Rotation verwendet werden. Die Einstellung wird in settings.ini gespeichert und nach einem Neustart wiederhergestellt.

Die Implementierung orientiert sich an der SpaceMouse-Handbuchbeschreibung:

  • Objektmodus: Translation verschiebt beziehungsweise zoomt die Ansicht; Rotation orbitert um das Objekt beziehungsweise den Pivot.
  • Flugmodus/Drohnenmodus: Die Translation verwendet ausschließlich den aktuellen Kamerarahmen, nicht die Modell-/Weltachsen: Tx fliegt vorwärts oder rückwärts entlang der Blickrichtung, Ty bewegt die Kamera links/rechts parallel zum Bildschirm und Tz oben/unten parallel zum Bildschirm. Die Bewegungsrichtungen bleiben daher bei jeder Modell- und Triad-Ausrichtung an der sichtbaren Ansicht ausgerichtet.
  • Rotationsbelegung: Im Drohnenmodus steuert Rx Pitch, Ry optional Roll und Rz Yaw um die Bodenachse beziehungsweise bei deaktiviertem Horizon Lock um die lokale Kamera-Hochachse. Im Objektmodus bleibt die vorhandene Zuordnung erhalten: Rx vertikales Orbitieren, Ry optional Roll und Rz horizontales Orbitieren.
  • Höhe halten / Maintain Altitude: Diese frühere Weltachsenfunktion wird für die strikt bildschirmorientierte Drohnen-Translation nicht verwendet. Sie bleibt als gespeicherte Einstellung aus Kompatibilitätsgründen vorhanden, verändert aber die drei Translationsachsen nicht.
  • Horizon Lock: Bei aktivierter Horizontsperre wird Rz-Yaw um die definierte Bodenachse ausgeführt. Bei deaktivierter Horizontsperre wird um die aktuelle lokale Kamera-Hochachse gedreht.

Die Ribbon-Schaltfläche verwendet ein monochromes Drohnen-Icon im Drohnenmodus und ein monochromes Objekt-/Orbit-Icon im Objektmodus.

Vollständige SpaceMouse-Bedienmatrix

Die folgenden Beschreibungen beziehen sich auf die physische Bewegung der SpaceMouse-Kappe. Für Tz gilt eindeutig: vom eigenen Körper weg in Richtung Monitor drücken bedeutet vorwärts; zum eigenen Körper hin ziehen bedeutet rückwärts.

Hinweis zur getesteten SpaceMouse: Die Raw-HID-Werte für die physische Vertikal- und Vor-/Zurückbewegung werden im Add-in bewusst vertauscht abgebildet. Dadurch entspricht Ty der Bewegung nach oben/unten und Tz der Bewegung vom Körper weg beziehungsweise zum Körper hin.

Physische Bewegung an der SpaceMouse Achse Objektmodus Drohnenmodus
Kappe nach links/rechts drücken Tx Ansicht beziehungsweise Modell horizontal pannen Kamera vorwärts/rückwärts fliegen
Kappe nach oben/unten drücken Ty Ansicht beziehungsweise Modell vertikal pannen Kamera links/rechts parallel zum Bildschirm bewegen
Kappe vom eigenen Körper weg ziehen/drücken Tz In Richtung Modell zoomen beziehungsweise herauszoomen Kamera oben/unten parallel zum Bildschirm bewegen
Kappe vorne nach unten neigen Rx Kamera vertikal um den Pivot orbitieren Kamera nach unten neigen, also Pitch nach unten
Kappe vorne nach oben neigen Rx Kamera entgegengesetzt vertikal um den Pivot orbitieren Kamera nach oben neigen, also Pitch nach oben
Kappe nach links neigen Ry Ansicht beziehungsweise Objekt um die Blickachse/Z-Achse rollen, sofern Roll aktiviert ist Kamera um die Blickachse rollen, sofern Roll aktiviert ist
Kappe nach rechts neigen Ry Ansicht beziehungsweise Objekt entgegengesetzt um die Blickachse/Z-Achse rollen, sofern Roll aktiviert ist Kamera entgegengesetzt um die Blickachse rollen, sofern Roll aktiviert ist
Kappe um die Hochachse nach links drehen Rz Kamera horizontal um den Pivot orbitieren Kamera nach links drehen, also Yaw nach links
Kappe um die Hochachse nach rechts drehen Rz Kamera entgegengesetzt horizontal um den Pivot orbitieren Kamera nach rechts drehen, also Yaw nach rechts

Unterschied zwischen Objektmodus und Drohnenmodus

Die gleichen SpaceMouse-Bewegungen können ähnlich aussehen, haben aber unterschiedliche Kameramodelle:

Verhalten Objektmodus Drohnenmodus
Translation Bildausschnitt beziehungsweise Ansicht wird verschoben oder gezoomt Kamera bewegt sich tatsächlich durch den Raum
Rx/Rz Kamera orbitert um den Objekt-Pivot Kamera dreht sich an ihrer aktuellen Position
Tx Horizontales Pan der Ansicht Vorwärts-/Rückwärtsflug entlang der aktuellen Blickrichtung
Ry Optionaler Roll um die Blickachse Optionales Rollen der Kamera
Ty Vertikales Pan der Ansicht Seitliche Bewegung parallel zum Bildschirm
Tz Zoom entlang der Sichtlinie zum Objekt Vertikale Bewegung parallel zum Bildschirm
Rz Orbit-Yaw um den Pivot Kamera-Yaw ohne Orbit um den Pivot

Einstellungen für die Flugrichtung

Im Diagnosefenster unter Navigationseinstellungen stehen für jede Achse eigene Invertierungsoptionen zur Verfügung:

Zusätzlich besitzt jede Achse einen eigenen Geschwindigkeits-Slider. Dieser legt den Achsen-Multiplikator von 0,00 bis 5,00 in Schritten von 0,01 fest. Die globale T-Geschw. beziehungsweise R-Geschw. wird weiterhin zusätzlich angewandt. Sliderwerte werden erst mit Übernehmen aktiv und dann in settings.ini gespeichert.

Eine kompakte Achsenbelegung im selben Fenster beschreibt außerdem für Tx bis Rz die zugehörige Bewegung der SpaceMouse und deren Wirkung in Objekt- und Drohnenmodus.

  • Tx invertieren: kehrt im Drohnenmodus Vorwärts-/Rückwärtsflug und im Objektmodus horizontales Pan um.
  • Ty invertieren: kehrt im Drohnenmodus seitlichen Flug und im Objektmodus vertikales Pan um.
  • Tz invertieren: kehrt im Drohnenmodus Steigen/Sinken und im Objektmodus die Zoomrichtung um.
  • Rx invertieren: kehrt Pitch beziehungsweise vertikales Orbitieren um.
  • Ry invertieren: kehrt die Rollrichtung in beiden Modi um. Die gewünschte Ry-Grundrichtung wird fest im Add-in-Code invertiert; diese Checkbox ist standardmäßig deaktiviert und dient nur als manuelle Gegenumkehrung.
  • Rz invertieren: kehrt die Yaw-Richtung in beiden Modi um. Die gewünschte Rz-Grundrichtung wird fest im Add-in-Code invertiert; diese Checkbox ist standardmäßig deaktiviert und dient nur als manuelle Gegenumkehrung.

Wenn sich eine einzelne Bewegung falsch herum anfühlt, sollte nur die zugehörige Achse invertiert werden. Beispiel: Fliegt die Kamera im Drohnenmodus beim Drücken der Tx-Achse nach vorn rückwärts, wird Tx invertieren aktiviert. Die physische Auslenkungsrichtung kann je nach SpaceMouse-Modell, Treibereinstellung und Geräteausrichtung variieren.

Maintain Altitude und Horizon Lock

  • Höhe halten / Maintain Altitude: wird bei der aktuellen strikt bildschirmorientierten Drohnentranslation nicht angewendet. Die Option ist nur noch aus Kompatibilitätsgründen in vorhandenen Einstellungen gespeichert.
  • Horizon Lock: bestimmt die Referenzachse für Rz-Yaw im Drohnenmodus. Ist die Option aktiv, erfolgt Yaw um die definierte Bodenachse. Ist sie deaktiviert, erfolgt Yaw um die aktuelle lokale Kamera-Hochachse.
  • Roll aktiv: schaltet Ry für die Kamerarotation frei. Ist die Option deaktiviert, wird Ry ignoriert.

Einzelachsen-Test

Für eine eindeutige Zuordnung sollte jeweils nur eine Bewegung ausgeführt werden:

  1. Navigation starten und Logging aktivieren.
  2. Alle anderen Achsen nicht bewegen.
  3. Die Kappe langsam nur in eine Richtung drücken oder neigen.
  4. Im Log die Rohwerte und normierten Werte prüfen.
  5. Bei falscher sichtbarer Richtung nur die passende Achseninvertierung aktivieren.

Die genaue Vorzeichenrichtung kann abhängig von SpaceMouse-Modell, Treibereinstellung und Ausrichtung variieren. Die Achsenzuordnung Tx, Ty, Tz, Rx, Ry und Rz bleibt davon unabhängig.

Rohwerte ohne Inventor messen

Für die Gerätekalibrierung liegt unter tools\SpaceMouseRawMonitor ein unabhängiger Raw-Input-Monitor. Er steuert weder Inventor noch das Add-in, sondern schreibt die echten HID-Int16-Werte, Report-IDs, Hex-Reports und Min-/Max-Werte aller sechs Achsen in %AppData%\InventorDroneNavigation\SpaceMouseRawMonitor.log.

  1. tools\SpaceMouseRawMonitor\Build-RawMonitor.ps1 ausführen.
  2. tools\SpaceMouseRawMonitor\SpaceMouseRawMonitor.exe starten.
  3. Alle Translationen und Rotationen nacheinander langsam bis zum angenehmen Maximum bewegen; anschließend auch Translation plus Rotation gleichzeitig bewegen.
  4. Mit Enter beenden und die erzeugte Logdatei auswerten.

Das Messwerkzeug verarbeitet auch mehrere HID-Reports pro Windows-Raw-Input-Nachricht. Damit lässt sich sowohl der tatsächliche Wertebereich als auch der Abstand zwischen Translation- und Rotationsreports bestimmen.

Geplante Milestones

  1. Yaw/Pitch und Horizon Lock
  2. WinForms-Einstellungen und robuste Geräteprofile
  3. 60-Hz-Update-Queue und UI-Thread-Stabilisierung
  4. Stabilisierung und Installationspaket