Arquitectura
everything-imu es un workspace de Rust: un conjunto de crates enfocados detrás de un shell de escritorio Tauri 2, más pequeñas apps complementarias del lado de la consola para dispositivos que no pueden manejarse directamente.
Grafo de dependencias de crates
Sección titulada «Grafo de dependencias de crates» ┌──────────────┐ │ tauri-app │ └──────┬───────┘ │ ┌──────▼───────┐ │ core │ └──┬─────┬─────┘ │ │ ┌──────────────┼─────┴──────────┬───────────────┐ │ │ │ │ ┌────▼────┐ ┌──────▼──────┐ ┌──────▼──────┐ ┌─────▼──────┐ │device-* │ │slime-tracker│ │ imu-fusion │ │persistence │ └────┬────┘ └─────────────┘ └──────┬──────┘ └────────────┘ │ │ ┌────▼────────┐ ┌──────▼──────┐ │device-traits│ │ imu-math │ └─────────────┘ └─────────────┘Responsabilidades de los crates
Sección titulada «Responsabilidades de los crates»slime-tracker- protocolo de cable SlimeVR UDP (handshake, sensor info, rotación, accel, BUNDLE, feature flags) con gating de auto-fallback de BUNDLE y pruebas de compatibilidad de cable contra fixtures de referencia.imu-math- operaciones de quaternion, transformaciones de coordenadas y aplicación de calibración. Pura, determinista, basada ennalgebra.imu-fusion- VQF (estimación de bias en reposo), Madgwick y BasicVQF. Probada contra la salida de referencia dentro de ε < 1e-6 rad.device-traits- las interfacesDevice/DeviceFactorycompartidas por cada driver.device-joycon- Joy-Con 1, Joy-Con 2 y Pro Controllers. JC1/Pro por HID con calibración SPI; JC2 por BLE con servicios y comandos GATT.device-dualsense- DualSense, DualSense Edge y DualShock 4 por USB y Bluetooth (HID sobre Bluetooth Classic, no BLE). Gyro/accel/batería, reset con el botón PS, lightbar RGB y el timestamp de sensor por hardware del DS5.device-psmove- PS Move ZCM1 y ZCM2 por USB y Bluetooth.device-wii- listener TCP para el forwarder Wi-Fi del Wii Remote.device-3ds/device-vita- listeners UDP para los forwarders homebrew del 3DS y la PS Vita.device-steam-deck/device-steam-controller- IMU HID de Valve por USB.device-tesla- sintetiza IMU a partir del rumbo y la velocidad de un vehículo mediante la Fleet API.device-hopx- IMU BLE HOPX / Triki sobre el Nordic UART Service, descubierta por prefijo del nombre anunciado.device-remote- ingesta UDP para el protocolo remote-hub de eimu (teléfono/reloj).osc-haptics- bridge VRChat OSC → rumble.persistence- almacén SQLite de configuración y calibración medianterusqlite.core-AppState, elSupervisorde descubrimiento de dispositivos y elPipelinepor dispositivo (eventos IMU → fusion → SlimeVR UDP).
Flujo de datos
Sección titulada «Flujo de datos»[BLE/HID device] → device-* crate → ChannelInfo stream │ ▼ imu-fusion (VQF) │ ▼ Quaternion + accel slime-tracker │ ▼ UDP packet SlimeVR-Server (port 6969)
Parallel: core::AppState → Tauri event "tracker_update" → throttled 30 Hz → React store (Zustand) → Dashboard UIIPC (UI ↔ core)
Sección titulada «IPC (UI ↔ core)»tauri-specta genera tipos de TypeScript a partir de Rust como una única fuente de
verdad. La pose de tracker de alta frecuencia (60-200 Hz) se emite como un evento
tracker_update; la UI se suscribe y limita su bucle de render a 30-60 Hz.
Frontend stack
Sección titulada «Frontend stack»React 19 + Vite + TypeScript, Tailwind, primitivos de Radix, una paleta de comandos
cmdk, gráficas en vivo y stores de Zustand que reflejan el estado del core de Rust
mediante eventos de Tauri.
Distribución
Sección titulada «Distribución»| Objetivo | Bundle |
|---|---|
| Windows | Instalador NSIS .exe (Tauri bundler) |
| Linux | .deb, .AppImage (Tauri bundler) |