Problemas Conocidos
Fecha de análisis: 2026-06-11
Última actualización: 2026-06-12
Total: 47 issues — 10 críticos, 19 moderados, 18 leves
Correcciones Recientes ✅
| ID |
Fecha |
Descripción |
| SS-01 |
2026-06-11 |
Desbordamiento de tabla LUT — añadido bounds checking |
| SS-02 |
2026-06-11 |
Análisis de timing: margen 97x, fallo improbable |
| SS-03 |
2026-06-11 |
Filtro mediana N=3 + EMA adaptativo (α=0.2/0.6, umbral 10mm) |
| SS-07 |
2026-06-11 |
Threshold raw corregido con ley 1/d² (factor 1.5× distancia) |
| SS-15 |
2026-06-11 |
Checksum aditivo (complemento a 2) en EEPROM + warning_eeprom |
🔴 Críticos (10 issues)
Floodfill
FF-01 — Estado insuficiente en el BFS para modo TIME_BASED
- Archivo:
floodfill.c:340
- Descripción: El floodfill almacena un único
float por celda. En TIME_BASED, el coste de transición depende del estado (dirección + count). Un camino con tiempo ligeramente superior pero mejor dirección se descarta.
- Impacto: Alto — puede no encontrar la ruta óptima global.
- Mitigación: Condición
>= permite caminos con mismo tiempo pero distinto estado.
- Solución propuesta: Ampliar estado a
floodfill[celda][direccion] o usar A*.
FF-02 — Desbordamiento de la cola de prioridad
- Archivo:
floodfill.h:63
- Descripción: Cola con capacidad fija de
MAZE_CELLS. Cada celda puede encolarse hasta 4 veces. 16×16 = 256 slots, peor caso ~1024 pushes.
- Impacto: Alto — corrupción de memoria.
- Solución propuesta: Redimensionar a
MAZE_CELLS × 4 o cola circular con bounds checking.
FF-03 — Penalización de giro ausente en transición ortogonal→ortogonal
- Archivo:
floodfill.c:515-520
- Descripción: El caso
from_orthogonal && to_orthogonal no verifica si la dirección cambió.
- Impacto: Bajo en práctica (cubierto por otros casos del switch).
Sensores
SS-01 — Desbordamiento de tabla LUT ✅ CORREGIDO
- Añadido bounds checking:
if (ln_index >= LOG_LINEARIZATION_TABLE_SIZE) ln_index = LOG_LINEARIZATION_TABLE_SIZE − 1.
SS-02 — Pérdida de conversiones ADC ✅ CORREGIDO
- Análisis de timing confirmó margen 97x. Sin riesgo real.
SS-03 — Sin filtrado de lecturas ADC ✅ CORREGIDO
- Añadido: mediana N=3 + EMA adaptativo.
Movimiento
MV-01 — PID sin anti-windup (6 integradores)
- Archivo:
control.c:392-451
- Descripción: Los 6 integradores acumulan error sin clamping. Tras saturación, overshoot masivo.
- Impacto: Alto — inestabilidad severa.
- Solución propuesta: Implementar clamping condicional (back-calculation o conditional integration).
MV-02 — move_inplace_turn() siempre gira a la izquierda
- Archivo:
move.c:126-143
- Descripción: MOVE_BACK, MOVE_BACK_WALL y MOVE_BACK_STOP tienen
sign = −1 fijo.
- Impacto: Medio-Alto — desviación sistemática en exploración.
MV-03 — lsm6dsr_read_gyro_z_raw() depende de auto-incremento SPI no verificado
- Archivo:
lsm6dsr.c:66-73
- Descripción: Asume que IF_INC está habilitado para leer ZL+ZH consecutivos.
- Impacto: Medio — datos incorrectos si IF_INC no está configurado.
- Archivo:
lsm6dsr.c:48-59
- Descripción: Solo transfieren 1 byte independientemente del parámetro
len.
- Impacto: Medio — frágil ante cambios de la librería LSM6DSR.
🟡 Moderados (19 issues)
Floodfill
| ID |
Descripción |
Impacto |
| FF-04 |
total_time incorrecto en tabla de pesos (primera celda contada 2×) |
Bajo |
| FF-05 |
mmsim_get_estimated_time() usa índice incorrecto (off-by-one) |
Medio |
| FF-06 |
Modelo de penalización de giro inexacto (asume deceleración completa) |
Medio |
| FF-07 |
Floodfill no considera orientación inicial del robot al planificar |
Medio |
Sensores
| ID |
Descripción |
Estado |
| SS-04 |
Fórmula con posible división por ~0 |
NO APLICA |
| SS-05 |
Parámetro c negativo (mitigado) |
NO APLICA |
| SS-06 |
Filtro EMA sustituido por adaptativo en SS-03 |
NO APLICA |
| SS-07 |
Umbral raw corregido con ley 1/d² |
✅ CORREGIDO |
| SS-08 |
Crosstalk óptico potencial |
NO APLICA |
| SS-09 |
Umbrales cableados en get_side_sensors_error() |
NO APLICA |
| SS-10 |
Fórmula no validada contra datasheet (validada empíricamente) |
NO APLICA |
| SS-15 |
Sin validación de datos EEPROM |
✅ CORREGIDO |
Movimiento
| ID |
Descripción |
Impacto |
| MV-05 |
Distancia de frenada usa velocidad ideal, no real |
Medio |
| MV-06 |
Velocidad angular con filtros independientes (desfase entre canales) |
Bajo-Medio |
| MV-07 |
PI con 4 decimales (error 0.003%) |
Bajo |
| MV-08 |
Fórmulas move_inplace_turn() no cinemáticamente exactas |
Medio |
| MV-09 |
Degradación de giro solo hacia abajo |
Medio |
| MV-10 |
Posible inconsistencia de signos en control angular |
Alto potencial |
| MV-11 |
move_straight() negativo no comprueba wall loss |
Bajo |
🟢 Leves (18 issues)
Floodfill
| ID |
Descripción |
| FF-08 |
Código inalcanzable tras return en switches |
| FF-09 |
#pragma GCC diagnostic ignora -Wswitch |
| FF-10 |
time_penalty retorna 0 si init_speed >= speed |
| FF-11 |
get_direction_value() devuelve 0 para diagonales |
| FF-12 |
Sesgo direccional en floodfill_run() (NORTH siempre gana empates) |
| FF-13 |
cells_to_max_speed puede exceder FLOODFILL_MAX_WEIGHTS_COUNT |
Sensores
| ID |
Descripción |
Estado |
| SS-11 |
update_side_sensors_leds() con código repetitivo |
NO APLICA |
| SS-12 |
all_sensors_take_values() bucle infinito (debug) |
NO APLICA |
| SS-13 |
Flag sensors_taking_values nunca a false |
NO APLICA |
| SS-14 |
División entera en calibración (error ±1 sobre ~2000) |
NO APLICA |
Movimiento
| ID |
Descripción |
| MV-12 |
avg_micrometers/avg_millimeters nunca actualizadas (código muerto) |
| MV-13 |
volatile innecesario en variables de control PID |
| MV-14 |
Expresión redundante true && en move_arc_turn() |
| MV-15 |
Número mágico 1.75f en move_back() |
| MV-16 |
Parámetros start/end negativos sin validación de rango |
| MV-17 |
check_wall_loss_correction() solo paredes laterales |
| MV-18 |
Frecuencia acoplada rígidamente a SysTick = 16 kHz |
| MV-19 |
Wrap-around de timer de encoders (verificado correcto ✅) |
Resumen por Prioridades
🔴 Críticos: 10 (FF-01..03, SS-01..03, MV-01..04)
🟡 Moderados: 19 (FF-04..07, SS-04..10/15, MV-05..11)
🟢 Leves: 18 (FF-08..13, SS-11..14, MV-12..19)
─────────────────
TOTAL: 47
Documento generado el 2026-06-12. Este documento es un resumen del registro completo en BUGS.md en la raíz del proyecto. Para detalles completos de cada issue, consultar el fichero original.