# Diferencias entre BotLab y un robot LEGO EV3

> Revisión documental: 2026-10-28. Copia cloud de remediación sobre `1.5.0`; revisiones focales disponibles. El informe y el manifiesto de cada entrega delimitan su aceptación.
> La referencia contractual seleccionada es Pybricks EV3 MicroPython 2.0.
> La existencia de una clase, método o import no acredita toda su semántica.

El simulador permite practicar programación y medir resultados virtuales, pero
no reemplaza la validación en hardware. Una aproximación física declarada y un
defecto de software son cosas diferentes; no se debe justificar el segundo
como una limitación inevitable de la simulación.

| Área | Modelo virtual y límite | Comprobación al pasar al robot |
|---|---|---|
| Tiempo | Tick nominal de 20 ms; el ritmo depende de la carga y la planificación de tareas. `wait` y `StopWatch` usan tiempo de pared con cooperación; el movimiento y el sonido del modelo avanzan por ticks. No se garantiza sincronismo exacto. | Medir duración, respuesta y pausas en el montaje real. |
| Motores y base | Par de tracción declarado, encoders y odometría virtuales. Cambiar de modalidad de movimiento puede introducir una parada virtual inmediata; no representa toda la dinámica mecánica. | Calibrar diámetro, separación de ruedas, dirección, fricción y carga. |
| Odometría | Estimación con signo de ruedas desde una referencia. No garantiza la pose física frente a choque o deslizamiento. | Comparar recorrido medido y estimado; comprobar retornos y giros. |
| Perfiles | `ideal`, `realistic` y `calibrated` son configuraciones del modelo. El nombre `calibrated` no demuestra calibración de un robot real. | Registrar los parámetros y mediciones usados para calibrar. |
| Ultrasonido y color | Intersecciones y superficies virtuales; no reproducen todos los ecos, materiales ni iluminación. | Ajustar umbrales con mediciones del entorno, no sólo con la pantalla. |
| Infrarrojo | Distancia relativa 0 cerca/100 lejos; raycast virtual de 700 mm. Beacon devuelve rumbo en grados y `(None, None)` sin baliza. No son centímetros físicos. | Verificar canal, rumbo, alcance, oclusión y montaje reales. |
| Colisión | Prueba geométrica discretizada; no acredita detección continua a cualquier velocidad. | Evaluar seguridad y margen sin usar el robot para impactos peligrosos. |
| Botones y pantalla | Cinco botones virtuales y búfer monocromo de 178 × 128 píxeles; fuente virtual y subconjunto de dibujo/imagen, no toda la API ni la tipografía física. | Confirmar botones, pantalla y archivos en el ladrillo real. |
| Audio | Tono y dos WAV del catálogo cerrado; `say` representa una voz virtual con texto y duración de modelo. La candidata incluye consumidor local de navegador, pendiente de validación audible final. | Comprobar voz, volumen, duración y respuesta del altavoz real. |

## Compatibilidad y extensiones

Usar como referencia la documentación oficial EV3 v2:
[dispositivos](https://docs.pybricks.com/en/v2.0/ev3devices.html),
[base de conducción](https://docs.pybricks.com/en/v2.0/robotics.html) y
[brick](https://docs.pybricks.com/en/v2.0/hubs.html).
`DriveBase.curve` es una extensión local respecto a esa referencia, no una API
literal EV3 v2. Cualquier extensión debe identificarse en la práctica y no
copiarse al robot suponiendo disponibilidad.

El corte integra reparaciones de autorización, recursos, supervisión, motores,
sensores y diagnóstico con revisiones focales. H-WEB2 V2 añade recuperación
explícita de contexto, ajustes del editor y audio local del navegador; tiene revisión independiente focal favorable y evidencia de guardado/reapertura a 45°.
Eso no acredita todo el catálogo ni toda la interfaz.

El libro ya dispone del subconjunto `random` (`seed` y `randint`, semilla inicial
0 por ejecución), `ImageFile.DECLINE` y los sonidos `SONAR` y `DOG_BARK_1`.
La ejecución de pantalla y sonido se comprobó en procesos aislados reales.
El recorrido de navegador H-WEB2 V2 observó DECLINE, finalización multimedia y
pausa/reanudación/parada de un tono largo con estado coherente. No hubo escucha
acreditada: no se confunde ese resultado con audibilidad ni equivalencia física.
`draw_box` mantiene una firma heredada y `draw_line` no admite todo el contrato
oficial de anchura. No hay acceso arbitrario del alumno a archivos multimedia.

La clasificación causal de timeout tiene siete comprobaciones independientes
favorables con objetos controlados. El arranque parcial de hilos/timer tiene
rollback transaccional revisado; no se extrapola a cualquier fallo del sistema.
La impresión continua tiene corrección raster con revisión independiente: el
caso original pasó de 7 a 98 ticks en unos 2 segundos, frente al umbral previo
de 80, conservando el programa y los píxeles. Es una medición acotada, no una
garantía de ritmo bajo cualquier carga. Consultar el informe del paquete para
el estado de depuración, recuperación de mundos y regresión integrada.
Consultar la evidencia del corte aceptado antes de exigir un método. La matriz
histórica de julio no prueba el estado de esta candidata.

## Criterio pedagógico de aceptación

Antes de realizar la prueba, definir el mundo, los puertos, las unidades, la configuración, las entradas y
el resultado esperado. Separar tres resultados: ejecución sin error, cumplimiento
del objetivo virtual y verificación en hardware. Un programa que termina puede
dibujar una figura equivocada o chocar; un bucle reactivo puede ser correcto sin
terminar por sí solo.

Para cada práctica, conservar código, mundo, parámetros y evidencia virtual.
Cuando el objetivo requiera robot físico, añadir la prueba correspondiente.
Si no hay hardware disponible, informar «validación física pendiente», no
«equivalencia completa». Esto no impide evaluar lógica, distancias o tiempos
virtuales bajo un modelo explícito.
