- C# 99.6%
- PowerShell 0.4%
| src/InventorDroneNavigation | ||
| tools/SpaceMouseRawMonitor | ||
| .gitignore | ||
| InventorDroneNavigation.addin | ||
| InventorDroneNavigation.sln | ||
| README.md | ||
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
ApplicationAddInServermit 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
InventorDroneNavigation.slnin Visual Studio öffnen.- Prüfen, dass die Inventor-2020-Interop am oben genannten Pfad vorhanden ist.
Build > Build Solutionausführen.
Die DLL und das Manifest liegen danach unter src\InventorDroneNavigation\bin\Debug\ bzw. bin\Release\.
Installation
- Einen permanenten Zielordner anlegen, z. B.
%ProgramData%\Autodesk\ApplicationPlugins\InventorDroneNavigation. - DLL und
.addin-Datei aus dem Build-Ausgabeordner dorthin kopieren. - 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. - 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:
Txfliegt vorwärts/rückwärts entlang der Blickrichtung,Tybewegt links/rechts parallel zum sichtbaren Bildschirm undTzbewegt oben/unten parallel zum sichtbaren Bildschirm. Diese Translation ist vollständig unabhängig von der Modell-/Weltachse im Inventor-Triad.Rxist Pitch,Ryoptional Roll undRzYaw. 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:
Txfliegt vorwärts oder rückwärts entlang der Blickrichtung,Tybewegt die Kamera links/rechts parallel zum Bildschirm undTzoben/unten parallel zum Bildschirm. Die Bewegungsrichtungen bleiben daher bei jeder Modell- und Triad-Ausrichtung an der sichtbaren Ansicht ausgerichtet. - Rotationsbelegung: Im Drohnenmodus steuert
RxPitch,Ryoptional Roll undRzYaw um die Bodenachse beziehungsweise bei deaktiviertem Horizon Lock um die lokale Kamera-Hochachse. Im Objektmodus bleibt die vorhandene Zuordnung erhalten:Rxvertikales Orbitieren,Ryoptional Roll undRzhorizontales 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
Tyder Bewegung nach oben/unten undTzder 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
Ryfür die Kamerarotation frei. Ist die Option deaktiviert, wirdRyignoriert.
Einzelachsen-Test
Für eine eindeutige Zuordnung sollte jeweils nur eine Bewegung ausgeführt werden:
- Navigation starten und Logging aktivieren.
- Alle anderen Achsen nicht bewegen.
- Die Kappe langsam nur in eine Richtung drücken oder neigen.
- Im Log die Rohwerte und normierten Werte prüfen.
- 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.
tools\SpaceMouseRawMonitor\Build-RawMonitor.ps1ausführen.tools\SpaceMouseRawMonitor\SpaceMouseRawMonitor.exestarten.- Alle Translationen und Rotationen nacheinander langsam bis zum angenehmen Maximum bewegen; anschließend auch Translation plus Rotation gleichzeitig bewegen.
- Mit
Enterbeenden 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
- Yaw/Pitch und Horizon Lock
- WinForms-Einstellungen und robuste Geräteprofile
- 60-Hz-Update-Queue und UI-Thread-Stabilisierung
- Stabilisierung und Installationspaket