Files
2026-07-03 12:23:41 -04:00

3.6 KiB

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