91 lines
3.6 KiB
Markdown
91 lines
3.6 KiB
Markdown
# Marine Compass Display — Estado del Proyecto
|
|
|
|
## Qué funciona
|
|
|
|
### Ventana principal (`ui/main_window.py`)
|
|
- Layout 60/40: rosa de los vientos (izq) + panel de info (der)
|
|
- Modo fullscreen con F para toggle, Escape para cerrar
|
|
- Modo kiosk (`--kiosk`): cursor oculto, screensaver desactivado (Linux/RPi)
|
|
- Smoothing de rumbo configurable en `config.py` (`HEADING_SMOOTHING`)
|
|
|
|
### Rosa de los vientos (`ui/compass_widget.py`)
|
|
- Tarjeta giratoria: el norte siempre apunta al norte real
|
|
- Línea lubber fija en rojo (arriba = rumbo del barco)
|
|
- Readout digital del rumbo **arriba** de la rosa, justo bajo la línea lubber
|
|
- Formato: `045.0°M` o `045.0°T` según modo seleccionado
|
|
- Estrella de 16 puntas: N=rojo, cardinales=blanco, intercardinales=oro
|
|
- Ring de ticks cada 5°, números cada 10°
|
|
- Modo noche / día
|
|
- Ball central muestra pitch+roll del buque
|
|
|
|
### Panel de información (`ui/info_panel.py`)
|
|
- **HDG grande**: muestra °M o °T según el botón HDG seleccionado ← bug corregido hoy
|
|
- Filas de datos: HDG(T), ROT, PITCH, ROLL, VAR, HEAVE, YAW RATE
|
|
- ROT Arc: semicírculo animado, azul=estribor, rojo=babor, escala ±60°/min
|
|
- Siluetas de barco animadas (motor-cruiser 40ft):
|
|
- **PITCH** (vista lateral): hull completo, cabina, flybridge, radar arch, línea de boot roja, línea de vida punteada, arco de proa
|
|
- **ROLL** (vista de proa): casco V, francobordo con curvatura, raíl de rociada, windshield en V con cristales azules separados, arco radar, luces de navegación rojo/verde
|
|
- **YAW** (vista de planta): casco cúbico bezier, cockpit con bancadas, cabina, flybridge, escotillas de cubierta, púlpito de proa, luces de nav
|
|
- Botones táctiles: HDG °M/°T, NIGHT, PORTS
|
|
- Marcos separados por gaps (para case con compartimentos físicos)
|
|
- Responsive: se adapta a cualquier tamaño de pantalla
|
|
|
|
### Simulador NMEA (`simulator/nmea_simulator.py`)
|
|
- Secuencia realista: INITIAL → TURN_STBD → COMP_STBD → STEADY_STBD → TURN_PORT → COMP_PORT → NORMAL
|
|
- Genera: HCHDG (rumbo), IIROT (ROT), IIXDR (pitch, roll, aceleración, giroscopio)
|
|
- Servidor TCP en 127.0.0.1:10110
|
|
- Variación magnética: -7.5° (Stuart, FL)
|
|
- SOG: 8.5 kn, ROT máx: 60°/min
|
|
|
|
### Lanzamiento (`launch.bat`)
|
|
- `launch.bat --sim` → usa `python` (con consola), se ven logs del simulador en tiempo real
|
|
- `launch.bat` → usa `pythonw` (sin consola), modo kiosk limpio para hardware
|
|
|
|
### Parser NMEA (`core/nmea_parser.py`)
|
|
- Parsea HCHDG, IIROT, IIXDR
|
|
- `NavData.hdg_true_calc` = hdg_mag + variation (calculo automático)
|
|
|
|
---
|
|
|
|
## Pendiente / Mejoras posibles
|
|
|
|
- [ ] Silueta ROLL (vista de proa): el usuario quiere más detalle y mejores proporciones
|
|
- [ ] Test en hardware real con puerto serial
|
|
- [ ] Modo RPi: probar con `--kiosk` en Raspberry Pi con pantalla táctil
|
|
- [ ] NMEA: agregar soporte para VHW, MWV, GGA si se necesita más datos
|
|
|
|
---
|
|
|
|
## Cómo probar
|
|
|
|
```
|
|
# Simulador (muestra logs en consola):
|
|
launch.bat --sim
|
|
|
|
# Con hardware real en COM3:
|
|
launch.bat --port COM3 --baud 4800
|
|
|
|
# Puerto configurado en config.py:
|
|
launch.bat
|
|
|
|
# Python directo (más control):
|
|
python main.py --sim
|
|
python main.py --port COM3
|
|
```
|
|
|
|
---
|
|
|
|
## Archivos clave
|
|
|
|
| Archivo | Función |
|
|
|---------|---------|
|
|
| `main.py` | Entry point, args, QApplication |
|
|
| `config.py` | Puertos serial, smoothing, FPS |
|
|
| `ui/main_window.py` | Ventana principal, layout, timer |
|
|
| `ui/compass_widget.py` | Rosa de los vientos (QPainter) |
|
|
| `ui/info_panel.py` | Panel derecho: datos, siluetas, botones |
|
|
| `ui/styles.py` | Colores y helpers de tema |
|
|
| `core/nmea_parser.py` | Parser NMEA 0183 |
|
|
| `core/serial_reader.py` | Lector serial (QThread) |
|
|
| `simulator/nmea_simulator.py` | Simulador de maniobras + TCP server |
|