01 · Del comportamiento a la evidencia
Qué significa terminar el proyecto
En el tema 45 definimos requisitos y calculamos si el diseño podía alcanzarlos. En el 46 construimos módulos y en el 47 los integramos con un control en cascada y una máquina de estados. Ahora cerramos el recorrido: relacionamos cada promesa del diseño con una prueba, un registro y una conclusión que otra persona pueda revisar.
Una demostración permite ver al robot funcionar una vez. Una prueba de aceptación permite decidir si satisface un requisito bajo condiciones declaradas. Una prueba de robustez investiga qué ocurre al variar esas condiciones. Las tres son útiles, pero responden preguntas diferentes. Un video de una vuelta no demuestra la autonomía de una hora ni la respuesta del botón en todas las fases de evasión.
Los resultados del tema 47 pertenecen al simulador que allí se describe. Este tema propone un procedimiento para el robot físico. Los datos de los laboratorios y del ejemplo Python son datos didácticos inventados, elegidos para mostrar tanto aprobaciones como fallos. No se realizó aquí una campaña física y no se afirma que el robot real haya aprobado los requisitos.
Hay una cuarta decisión además de «cumple» y «no cumple»: sin evidencia suficiente. Si sólo registraste cada 100 ms, no podés certificar un pulso de 20 ms; si falta la prueba de descarga, C1 sigue pendiente aunque todo lo demás salga bien. Saber declarar lo pendiente forma parte del trabajo técnico.
02 · El contrato antes de medir
Requisitos y condiciones de aceptación
Antes de tocar las ganancias, fijá una versión del programa y de los criterios. En los últimos temas aparecieron decisiones que conviene resolver por escrito para que todos midamos lo mismo:
La detección de F3: 20 cm y el ajuste a 25 cm
El tema 45 planteó detectar a 20 cm y conservar 10 cm al detenerse. En el 47 se vio que, con retardos y variaciones, D_OBSTACULO_CM = 20 no conservaba siempre ese margen. Se eligió 25 cm. Frenar antes mejora el margen, pero modifica el punto de detección: si 20 cm era un valor exacto exigido, hay que registrar una revisión del requisito; si significaba «detectar a más tardar a 20 cm», 25 cm es compatible. No escondas esta diferencia en el informe.
En la campaña de este tema se propone registrar la revisión F3-R1: «con la caja de referencia en una recta y a 30 cm/s, iniciar la respuesta al obstáculo a más tardar al llegar a 20 cm, usando un umbral nominal de 25 cm, y quedar detenido a 10 cm o más». La aceptación de esa revisión se deja asentada junto al diseño. Mientras no esté acordada, se informa por separado el resultado de distancia final y el cambio de umbral.
La pista de F5: 6 m y 6,4 m
F5 se definió para un circuito de 6 m; la simulación del tema 47 usó uno de 6,4 m. Conservá el ensayo original de 6 m para aceptar F5. Un ensayo de 6,4 m es evidencia adicional: las curvas y la ubicación del obstáculo también cambian la dificultad. Multiplicar el tiempo por 6 / 6,4 no convierte una pista en la otra, porque la maniobra no se acorta proporcionalmente.
Velocidad, parada y repetibilidad
| Punto | Definición para la prueba | Consecuencia |
|---|---|---|
| F1, desvío ≤ 15 mm | Posición de la línea respecto del centro del arreglo durante SEGUIR y con lectura válida | Es la magnitud del requisito; no equivale al error del centro del chasis |
| F2, 30 ± 10 % cm/s | 27 a 33 cm/s en recta, sin arranque ni frenado | Para 150 cm: de 4,545… a 5,555… s. El intervalo 4,5–5,5 s del tema 45 era una aproximación |
| S1, motores a cero ≤ 100 ms | Medir pulsación → PWM cero y pulsación → inmovilidad por separado | PWM cero puede dejar la rueda girando; no demuestra por sí solo la parada mecánica |
| S2, pérdida de línea > 1 s | Medir desde la última lectura válida; respuesta al superar el tiempo, dentro de un ciclo y el retardo de adquisición | No se aplica como pérdida accidental a las fases previstas de evasión, que tienen sus propios límites |
| C2, cinco vueltas dentro de ±3 s entre sí | Adoptar para este cierre el criterio conservador máx(t) − mín(t) ≤ 3 s | Es más estricto que permitir ±3 s alrededor de la media; declararlo antes de probar |
| C3, variación ≤ 2 ms | Definir J = máx |T_real − 20 ms|, sin ocultar ciclos omitidos | Se exige J ≤ 2 ms con telemetría y registrar también la frecuencia y las pérdidas de tramas |
Para S1, si la interpretación exigida es la parada mecánica, ésa es la que debe aprobarse. La prueba eléctrica sirve para localizar el retardo del software. Un modo de frenado del puente H podría mejorar la desaceleración, pero se verifica primero su comportamiento, su corriente y su compatibilidad con el driver; no se deduce de la palabra motorParar().
03 · Primero las unidades, después el PID
Calibración final, en orden
Un lazo bien ajustado con una medición equivocada regula la magnitud equivocada. Si el encoder informa 30 cm/s cuando el robot avanza a 27, el PI hará todo lo posible por conservar ese error. Por eso la calibración precede a la sintonía y comienza con la mecánica.
1. Mecánica, alimentación y sentidos
Comprobá ruedas firmes, ejes sin trabas, rueda loca libre y altura del arreglo constante. Confirmá la polaridad de cada motor con las ruedas levantadas y una orden pequeña: avance debe producir cuentas positivas en ambos encoders. Luego probá en el suelo: una rueda sin carga puede girar con un PWM que no alcanza para mover el robot. Medí la tensión de alimentación de la lógica y el mínimo durante un arranque.
2. Escala de distancia de cada rueda
Usá un tramo recto medido con una regla o cinta independiente, por ejemplo 200 cm. Registrá las cuentas de cada rueda entre las marcas. Con CPR = 1440, la distancia por cuenta es k = 2πr / CPR. Para cada lado:
r_nuevo = r_anterior · distancia_real / distancia_indicada
Ejemplo: con r = 3,25 cm, la odometría indica 196 cm en un tramo real de 200. Corregimos a 3,25 · 200 / 196 = 3,316 cm. El radio efectivo aumenta: cada cuenta debe representar más distancia. Repetí en ambos sentidos varias veces para separar una escala equivocada de un deslizamiento ocasional.
Si los lados dan escalas distintas de forma persistente, guardá dos factores kIzq y kDer en lugar de forzar un radio común. La misma escala debe usarse para velocidad y odometría. Si cambiás sólo el cálculo de pose, el PI de rueda seguirá regulando con unidades viejas. La medición de referencia no puede salir de esos mismos encoders: sería una comprobación circular.
3. Ancho de vía efectivo
Una vez corregidas las distancias, pedí un giro lento y medí el ángulo real con una referencia externa. Como θ = (dDer − dIzq) / B, resulta:
Si la odometría informa 360° y el chasis gira 378°, con B = 15 cm, el nuevo valor es 15 · 360 / 378 = 14,286 cm. La vía efectiva puede diferir de la distancia medida con regla por la deformación de las ruedas. Hacé giros hacia ambos lados y a la velocidad de la evasión. Una diferencia grande según el sentido sugiere rozamiento o deslizamiento que un único parámetro no resolverá.
4. Arreglo de línea
Calibrá mínimos y máximos recorriendo negro y blanco con todos los sensores a la altura de trabajo (tema 30). Rechazá un canal cuyo contraste sea demasiado pequeño: normalizar un intervalo casi nulo amplifica ruido. Desplazá después una regla con la línea bajo el arreglo: centrada debe dar cerca de 0 mm; a la derecha debe dar posición positiva, como usa el controlador del tema 47.
Contrastá al menos −15, −10, 0, +10 y +15 mm. Eso detecta un error de escala que una sola posición central no muestra. Probá además blanco completo y negro completo: una lectura extrema o saturada no siempre es una posición confiable. Al perder la línea guardá validez falsa; conservar el último valor no significa que el error actual sea pequeño.
5. Distancia y batería
Para el ultrasónico colocá la misma cara plana de la caja a distancias conocidas: 10, 15, 20, 25 y 40 cm. Medí desde el plano del sensor y anotá el desplazamiento hasta el borde delantero del chasis. Si el sensor está 3 cm detrás del borde, 15 cm de lectura equivalen a sólo 12 cm libres. Compará ecos válidos y ausentes; la ausencia de eco no debe convertirse en cero centímetros ni probar que todo el espacio esté libre.
Para la batería, compará el voltaje calculado con un multímetro en varios puntos del rango de trabajo. Con el divisor 1:2 del tema 46, Vbat = ADC · Vref / 1023 · 2. Una referencia real de 4,85 V usada como si fuera 5,00 V hace que 6,4 V reales se informen como 6,4 · 5 / 4,85 = 6,60 V. El corte se demoraría: ajustá la escala antes de probar S3. Si hay un desplazamiento además de un error proporcional, usá dos puntos para ajustar pendiente y offset.
| Magnitud | Ensayo | Valor obtenido | Dónde se aplica |
|---|---|---|---|
| Escala de rueda | 200 reales / 196 indicados | Factor 1,0204 | Distancia por cuenta y velocidad |
| Vía efectiva | 360 indicados / 378 reales | 14,286 cm desde 15 cm | Incremento angular de odometría |
| Posición de línea | Cinco posiciones conocidas | Tabla de error e intervalo válido | Estimación y validez |
| Origen de distancia | Sensor 3 cm detrás del frente | Libre = lectura − 3 cm | Informe y criterio de margen |
| Referencia del ADC | 4,85 V medidos | Usar escala corregida | Conversión de batería |
Después de una corrección de escala repetí la calibración restante y la sintonía afectada. Guardá los valores junto a la fecha, superficie y montaje. Cambiar neumáticos, altura de sensores o reductores invalida parte de esa ficha.
04 · Ver lo que ocurre entre dos mensajes
Medir sin alterar el control
La telemetría del tema 47 imprime estado,fase,lin_pos,velIzq,velDer,dis_cm,bat_v a 10 Hz. Sirve para observar una maniobra de varios segundos, pero no tiene marca temporal de origen, validez de línea ni los extremos de cada período. Para cerrar el proyecto conviene distinguir muestreo de control, resumen y transmisión.
- El control sigue ejecutándose nominalmente cada 20 ms (50 Hz).
- En cada ciclo se actualizan máximos, mínimos y contadores en memoria: sin imprimir y sin reservar memoria dinámica.
- Cada 100 ms se transmite una instantánea o un resumen. Si no cabe, se cuenta la omisión y se vuelve al lazo.
- Las pruebas rápidas de botón, PWM y giro mecánico usan marcas de evento y medición externa con resolución suficiente.
Período real y tiempo de ejecución
El período se mide entre dos comienzos de tareaControl. El tiempo de ejecución se mide entre el comienzo y el fin de una llamada. Un control que tarda 1 ms puede empezar 10 ms tarde por otra tarea bloqueante. Son dos números distintos y C3 necesita el primero.
// Fragmento de instrumentación para robot.ino del tema 47.
// Variables globales; se actualizan sólo desde el programa principal.
uint32_t controlPrevUs = 0, periodoMinUs = 0xFFFFFFFFUL;
uint32_t periodoMaxUs = 0, ejecucionMaxUs = 0, ciclosControl = 0;
bool controlTienePrev = false;
void tareaControlMedida() {
uint32_t inicio = micros();
if (controlTienePrev) {
uint32_t periodo = inicio - controlPrevUs;
if (periodo < periodoMinUs) periodoMinUs = periodo;
if (periodo > periodoMaxUs) periodoMaxUs = periodo;
}
controlTienePrev = true;
controlPrevUs = inicio;
tareaControl(); // la función original completa, con sus paradas y retornos
uint32_t duracion = micros() - inicio;
if (duracion > ejecucionMaxUs) ejecucionMaxUs = duracion;
++ciclosControl;
}
// En tareas[], sustituir solamente la entrada del control:
// {TS_CONTROL_MS, 0, tareaControlMedida},
// Reiniciar los acumuladores al comenzar cada ensayo, fuera de una ISR.
Usamos restas sin signo para soportar el desbordamiento del reloj si el intervalo medido es menor que una vuelta completa del contador. La primera llamada no produce período: el tiempo de calibración de setup() no debe aparecer como un ciclo de control gigantesco. La envoltura mide también los retornos tempranos de tareaControl().
Al terminar el ensayo calculá J = máx(|periodoMinUs − 20000|, |periodoMaxUs − 20000|) con aritmética con signo o en la computadora. Para 18 900 y 21 300 µs, J = 1300 µs = 1,3 ms. Un ciclo de 40 ms seguido por uno casi inmediato es una omisión y una recuperación del planificador, aunque el promedio siga dando 20 ms.
Una trama pequeña y sin espera por espacio
Este segundo fragmento sustituye la función de telemetría del tema 47. No se agrega junto a ella. Envía una instantánea compacta con enteros, conserva el LED y cuenta descartes. Se eligen rangos acotados para que la línea quepa en el búfer de transmisión habitual de la plataforma del curso; comprobá el espacio real de la implementación que uses.
// Agregar #include <stdio.h> a robot.ino.
uint16_t secuenciaTx = 0;
uint32_t tramasOmitidas = 0;
void tareaTelemetria() { // 100 ms, 115200 bit/s; reemplaza a la anterior
char trama[60];
int e10 = (int)constrain(lin_pos * 10, -999.0f, 999.0f);
int vi = (int)constrain(vel[0], -99.0f, 99.0f);
int vd = (int)constrain(vel[1], -99.0f, 99.0f);
int cm = (int)constrain(dis_cm, 0.0f, 999.0f);
int mv = (int)constrain(bat_v * 1000, 0.0f, 9999.0f);
int n = snprintf(trama, sizeof(trama),
"%lu,%u,%u,%u,%d,%d,%d,%d,%d\n",
(unsigned long)millis(), (unsigned int)secuenciaTx++,
(unsigned int)estado, (unsigned int)fase, e10, vi, vd, cm, mv);
if (n > 0 && n < (int)sizeof(trama) &&
Serial.availableForWrite() >= n) {
Serial.write((const uint8_t*)trama, n);
} else {
++tramasOmitidas;
}
digitalWrite(PIN_LED, estado == FALLA ? (millis() / 250) % 2
: (estado == ESPERA ? LOW : HIGH));
}
// Columnas: ms,seq,estado,fase,e_decima_mm,vi_cm_s,vd_cm_s,dist_cm,bat_mV
// ESPERA=0, SEGUIR=1, EVITAR=2, FALLA=3 (enum del tema 47).
La secuencia avanza incluso si se omite la trama: el receptor puede detectar huecos, considerando el retorno de 65535 a 0. Se usan enteros para acotar el tamaño; esa cuantización y los límites hacen que la trama sea de observación, no un registro de precisión. En particular, dis_cm puede ser una lectura anterior y lin_pos puede ser el último valor: para aceptar medidas se deben registrar también su validez y antigüedad, o usar los resúmenes completos al terminar.
Con una línea de hasta 50 bytes a 10 Hz, son hasta 500 bytes/s. En 8N1 cada byte ocupa 10 bits: 500 · 10 = 5000 bit/s, aproximadamente el 4,3 % de 115200. Un mensaje de 50 bytes ocupa unos 4,34 ms en el cable; el búfer permite enviarlo en segundo plano. Que sobre ancho de banda medio no impide un bloqueo si una ráfaga llena el búfer: de ahí la comprobación previa.
Qué guardar además de las instantáneas
Acumulá el máximo absoluto del error a 50 Hz sólo cuando estado == SEGUIR y la línea sea válida; sumá e² · dt y tiempo válido para el RMS. Guardá por separado tiempo y número de muestras inválidas, saturaciones y entradas a FALLA. Si hubo línea perdida, un máximo pequeño calculado con los datos restantes no aprueba F1 por sí solo.
Para la evasión marcá detección y regreso estable a SEGUIR en el mismo reloj; para S1 marcá el flanco de pulsación y la desactivación física del driver. Para medir S3 registrá tensión sin filtrar, filtrada y momento de falla. Al terminar, con el robot detenido, podés volcar resúmenes largos sin interferir con el control. No uses la hora de llegada al monitor serie como si fuera el instante del fenómeno.
05 · Un número necesita una definición
Métricas e incertidumbre
Cada métrica debe indicar qué muestras utiliza y qué significa un resultado favorable. Un promedio de velocidad de toda la vuelta incluye giros y paradas; F2 se refiere a la recta. Una tabla que mezcle ambos puede hacerte ajustar el motor para corregir una demora de la evasión.
| Métrica | Cálculo | Interpretación |
|---|---|---|
| Error máximo | máx |e|, mm, durante seguimiento válido | Peor separación observada en el arreglo; conservar el estado de validez |
| Error RMS | raíz(Σ e²·dt / Σ dt), mm | Error típico con más peso para desvíos grandes; no sustituye el máximo |
| Velocidad en recta | L / Δt, cm/s, entre dos marcas externas | Valida la escala del encoder y F2 en el suelo |
| Distancia final | Menor separación entre el frente detenido y la cara de la caja, cm | Se compara con ≥ 10 cm; revisar también contacto durante la evasión |
| Tiempo de evasión | Regreso estable a seguimiento − detección, s | Incluye frenar, rodear, buscar y alinear; límite 15 s |
| Vuelta | Tiempo entre cruces consecutivos de una marca, s | Declarar vuelta lanzada o desde reposo y conservar la misma definición |
| Dispersión de vueltas | Rango, media y desviación estándar muestral | Se necesita el rango para el C2 acordado; una media sola oculta un intento lento |
| Saturación | tiempo limitado / tiempo activo | Si el actuador pasa mucho tiempo al límite, subir la integral no crea capacidad física |
| Disponibilidad de datos | Muestras válidas y recibidas / muestras previstas | Detecta el caso en que «mejoró» el error porque faltan datos difíciles |
Ejemplo de seguimiento uniforme con errores −4, −2, 0, 2, 4 mm: la media es 0, el máximo absoluto es 4 mm y el RMS es raíz(40 / 5) = 2,83 mm. El cero de la media dice que los desvíos se compensan en signo; no dice que el robot vaya centrado en cada instante.
Frecuencia de registro y máximos ocultos
Imaginá cinco ciclos con errores 2, 3, 18, 4, 2 mm. Si transmitís solamente la última muestra del bloque, ves 2 mm; el pico de 18 desaparece. Si transmitís el máximo del bloque, conservás 18. Aun a 50 Hz podría existir un pico entre muestras: el máximo es el máximo observado. Si el movimiento cambia con rapidez o el criterio es muy ajustado, usá video o una referencia más rápida para contrastar.
Una decisión con margen
Una regla con divisiones de 1 mm, la perspectiva de una cámara y el offset del sensor aportan incertidumbre. Elegí un límite de incertidumbre justificado por el método. En este tema usamos, sólo como ejemplo, Ue = 0,5 mm, Uv = 0,3 cm/s y Ud = 0,5 cm. No son propiedades universales de los sensores.
F2 conservador: v − Uv ≥ 27 y v + Uv ≤ 33 cm/s
F3 conservador: d_final − Ud ≥ 10 cm
Con d_final = 10,2 ± 0,5 cm el valor central supera 10, pero el intervalo llega a 9,7. La conclusión es no demostrado con este margen, no «seguro que chocará». Podés mejorar el método de medida o aumentar el margen físico. Para un límite máximo se suma la incertidumbre; para uno mínimo se resta.
Separá incertidumbre de medida y variabilidad entre pruebas. Una regla mejor reduce la primera; cinco frenadas con resultados distintos muestran la segunda. Usar la media de frenado para aprobar todos los casos ocultaría justamente la peor parada.
Un modelo de frenado para orientar la prueba
margen_conservador ≈ umbral − d_recorrida − Udistancia
Con v = 30 cm/s, latencia de 130 ms y desaceleración constante de 100 cm/s²: se recorren 30 · 0,130 + 900 / 200 = 8,4 cm. Con umbral de 25 cm y Udistancia = 0,5 cm, el margen estimado es 16,1 cm. Con 20 cm da 11,1 cm, muy justo.
El modelo supone piso uniforme, desaceleración constante, distancia desde el frente y latencia total conocida. El tema 47 ya mostró resultados peores con un umbral de 20 cm. Esa diferencia no se arregla eligiendo la cuenta más favorable: muestra límites del modelo. El cálculo orienta qué variar; la aceptación se decide con la medición del robot.
06 · Una prueba por promesa
Pruebas de aceptación
Hacé primero las verificaciones de parada y arranque a velocidad baja. Después ejecutá la campaña nominal sin cambiar parámetros entre intentos. Numerá las corridas, guardá también las fallidas y anotá cualquier intervención. Si reprogramás o recalibrás durante la campaña, comienza una nueva serie.
| Id | Procedimiento | Evidencia y decisión |
|---|---|---|
| F1 | Cinco vueltas en la pista nominal con línea de 19 mm; registrar a 50 Hz durante SEGUIR | Máximo observado más Ue ≤ 15 mm en cada vuelta, validez y contraste externo cerca del límite |
| F2 | Cinco pasadas por 150 cm de recta a velocidad estable, con marcas externas | 27–33 cm/s en cada pasada, considerando Uv; no incluir el arranque |
| F3 / F3-R1 | Cinco aproximaciones a la caja, desde la misma velocidad y suficiente distancia inicial | Instante de detección y separación final desde el frente; mínimo conservador ≥ 10 cm; declarar revisión de umbral |
| F4 | Cinco evasiones con la caja de 10 × 10 cm en la recta definida | Detección → seguimiento estable ≤ 15 s; sin contacto, ni intervención, ni fallas ocultas |
| F5 | Cinco vueltas en el circuito de aceptación de 6 m con un obstáculo | Cada vuelta ≤ 45 s, con convención de inicio documentada |
| S1 | Pulsar el botón en recta, curva y distintas fases de EVITAR | Registros de pulsación → PWM cero y → inmovilidad; contrastar con 100 ms según interpretación acordada |
| S2 | Interrumpir la línea durante seguimiento y sostener la pérdida | Falla y aviso al superar 1 s dentro del retardo declarado; motores sin nuevas órdenes |
| S3 | Con batería desconectada, alimentar con fuente regulable adecuada y reducir la tensión | Tensión real, filtrada, persistencia y entrada a FALLA; no rearrancar al recuperar tensión |
| S4 | Encender varias veces y reiniciar el controlador con motor alimentado | PWM e inmovilidad hasta una orden explícita; probar también botón sostenido al encender |
| C1 | Ensayo continuo representativo desde batería cargada hasta el corte operativo | Al menos 60 min útiles, con seguimiento y evasiones, sin recarga ni ayuda |
| C2 | Usar cinco vueltas consecutivas de F5 sin cambios ni exclusiones | Rango ≤ 3 s según el criterio conservador acordado |
| C3 | Registrar todos los períodos con telemetría habilitada; comparar además con ella deshabilitada | J ≤ 2000 µs, telemetría nominal a 10 Hz, pérdidas y ciclos omitidos informados |
Procedimiento detallado: distancia de parada
- Medí el plano frontal y el origen del sensor. Marcá la caja y el punto inicial, dejando distancia suficiente para alcanzar 30 cm/s.
- Comprobá batería, piso y versión. Registrá la velocidad justo antes de la detección; una prueba a 15 cm/s no valida la parada a 30.
- Iniciá una aproximación y conservá el evento que cambió a F_FRENAR. Registrá la distancia detectada y los tiempos, no sólo el umbral configurado.
- Cuando las ruedas estén inmóviles, medí desde el frente del chasis hasta la caja. Si el robot pasó a evasión demasiado pronto para medir, usá video o un modo de ensayo que detenga la secuencia después de frenar, documentado como tal.
- Repetí cinco veces con la misma versión. Conservá el mínimo y su incertidumbre. Después repetí la secuencia completa para comprobar que el modo de prueba no ocultó una interacción.
El banco de frenado aísla una magnitud; la prueba completa verifica que la evasión no la invalide. En particular, el robot puede conservar 12 cm al parar y tocar la caja después durante el giro: F3 y F4 necesitan evidencias distintas.
Cómo registrar una prueba
Ensayo: F3-05 Fecha: ______ Operador: ______
Firmware / parámetros: ______ Pista / superficie: ______
Umbral nominal: 25 cm Revisión F3-R1: acordada / pendiente
Velocidad antes de detectar: ______ cm/s
Batería inicial / mínima: ______ / ______ V
Instante de detección: ______ ms Inmovilidad: ______ ms
Distancia desde el frente: ______ cm Udistancia: ______ cm
Margen conservador: distancia - U = ______ cm
Resultado: cumple / no cumple / evidencia insuficiente
Archivos de registro y video: ______
Incidencias: ______
Un resultado numérico sin condiciones de prueba no se puede reproducir. Un ensayo abortado por una falla se conserva como abortado y se investiga; no se reemplaza silenciosamente por otro hasta juntar cinco buenos.
07 · El robot también debe saber detenerse
Pruebas de fallas y recuperación
El error encontrado en el tema 47 fue un recordatorio: entrar a FALLA no basta si, después del cambio de estado, el mismo ciclo vuelve a enviar una orden al motor. Cada prueba de falla debe observar estado, salida efectiva y recuperación. El LED solo prueba que una parte del programa reconoció algo.
| Condición | Cómo provocarla | Qué comprobar |
|---|---|---|
| Botón en plena maniobra | Pulsar en F_LATERAL, F_PASO y F_VUELTA | Parada prioritaria; ninguna fase vuelve a escribir velocidades en ese ciclo |
| Pérdida de línea | Retirar un tramo durante SEGUIR; primero con ruedas levantadas | Se cuenta desde la última muestra válida, entra en FALLA y no sigue con un error viejo |
| Línea no encontrada al volver | Desplazar la pista fuera del recorrido previsto | El límite de búsqueda o de tiempo detiene la maniobra; no avanza indefinidamente |
| Eco ausente o congelado | Simular lectura inválida o impedir ecos en banco | Validez y antigüedad; documentar qué cobertura tiene el firmware actual |
| Encoder sin pulsos | Inyectar velocidad medida cero en una prueba de software | El PI puede saturar tratando de mover una rueda: hace falta detección de atasco para contenerlo |
| Tensión baja y recuperación | Bajar y subir la fuente con la batería desconectada | Filtro y persistencia de S3; volver a tensión normal no equivale a orden de marcha |
| Reinicio del microcontrolador | Usar RESET mientras el driver sigue alimentado | Ausencia de pulsos de movimiento durante arranque, calibración y espera |
| Salida serie ocupada | Forzar ráfagas en una versión de banco | Contar omisiones sin atrasar el control; J no debe ocultar períodos grandes |
Estas pruebas no implican que todas las protecciones estén implementadas. El firmware del tema 47 no incluye un supervisor completo de encoder, un sensor lateral ni detección de toda lectura congelada. Si el ensayo expone ese límite, registralo como limitación o mejora pendiente; no atribuyas al software una función que no tiene.
La batería baja tiene un tiempo de respuesta
El tema 46 filtra la tensión y exige que se mantenga baja durante 1000 ms para evitar falsos disparos en arranques. S3 no puede interpretarse entonces como una respuesta instantánea al primer valor menor que 6,4 V. Medí tres instantes: cruce real, cruce filtrado y declaración de falla. En un escalón, filtro y persistencia se suman; en una caída lenta el resultado puede ser distinto.
Documentá esa política como parte de S3. No cambies el umbral para compensar a ciegas una escala de ADC equivocada. Primero calibración; después filtrado y duración, contrastados con la batería y el comportamiento de alimentación del robot.
Volver a operar también se prueba
Tras una falla: eliminá la causa, reconocé la falla para regresar a ESPERA y pedí otra pulsación para iniciar marcha, como en los temas 46 y 47. Si la causa sigue presente, el sistema no debe permitir una reanudación sostenida. Observá también los PID: integral, medida previa y referencias deben reiniciarse cuando corresponde, para que una parada no deje una aceleración inesperada al volver.
08 · Cambiar una causa por vez
Ajustar con un método
Una campaña que falla produce información útil si sabemos relacionar el síntoma con una capa. Si el robot gira poco durante la evasión, primero medimos el giro y la odometría. Aumentar Kp del PID de línea no interviene durante ese giro y sólo arruinaría el seguimiento que ya funcionaba.
- Guardar la referencia. Copiá firmware, configuración y campaña que falla. Definí la métrica a mejorar y las que deben conservarse.
- Reproducir el síntoma. Elegí el ensayo más corto que lo muestra: recta, escalón de rueda, giro, frenada o vuelta.
- Separar medida y actuación. Contrastá unidades y signos con una referencia independiente; comprobá si el actuador está saturado.
- Formular una hipótesis. «La vía efectiva es grande y subestima el giro» se puede probar. «El PID está mal» todavía no indica qué medir.
- Cambiar una variable o un grupo inseparable. Por ejemplo, corregir la escala de rueda en velocidad y odometría como una sola modificación coherente.
- Comparar campañas equivalentes. Conservá fallos, dispersión y condiciones. Aceptá la mejora si cumple el objetivo sin romper otros requisitos.
Orden de sintonía de la cascada
Ajustá primero cada rueda en línea recta con referencias conocidas y el lazo de línea desactivado. Confirmá prealimentación, rampa, PI, velocidad final y saturación. Después ajustá el PID de línea a velocidad base baja: P, amortiguación con D y la integral que haga falta para el sesgo sostenido (tema 44). Finalmente recuperá la velocidad nominal y ensayá curvas, frenada y evasión.
Si cambiaste el lazo interno, el externo ve otra respuesta dinámica: repetí su validación. Si agregaste un filtro, medí el retardo además del ruido. Una señal más suave puede llegar tarde, y en una curva eso puede aumentar el error máximo aunque el gráfico parezca más prolijo.
| Versión | Cambio | Resultado del ensayo | Decisión |
|---|---|---|---|
| A | Referencia guardada | Error máx. 13,8 mm; peor frenada 10,2 cm | Margen de frenada no demostrado con Ud = 0,5 cm |
| B | Detección nominal 20 → 25 cm | Peor frenada 14,0 cm; evasión 12,6 s | Mejor margen; registrar revisión de F3 y comprobar espacio disponible |
| C | Subir velocidad base | Vuelta más rápida; error máx. 16,1 mm | Rechazar: viola F1, aunque F5 mejore |
| D | Corregir radio efectivo | Encoder y marcas coinciden; cambia respuesta de rueda | Revalidar rueda, seguimiento y distancias de evasión |
Conservá un historial breve: problema, hipótesis, cambio, prueba y resultado. No necesitás escribir cada pulsación del teclado; sí el motivo de cada constante que quedó en la versión final.
09 · Salir del único caso favorable
Robustez, autonomía y regresión
Después de aprobar la condición nominal, variá condiciones de manera controlada. Los 216 casos simulados del tema 47 exploraban parámetros del modelo; la campaña física agrega cosas que ese modelo simplificaba: luz, rugosidad, montaje, agarre y tensión real.
Una matriz manejable
Proponé tres niveles de batería dentro del rango operativo, dos condiciones de iluminación sin cambiar la pista y dos superficies representativas: 3 · 2 · 2 = 12 combinaciones. Con cinco repeticiones por combinación son 60 ensayos. Si no podés hacerlos todos, priorizá las combinaciones que afecten las métricas más ajustadas y declaralo. No mezcles esos ensayos con las cinco vueltas consecutivas de C2.
Dentro de cada bloque conservá la calibración prevista para el uso real. Si el usuario debe recalibrar al cambiar la luz, ésa es una condición de operación; si pretendés soportar el cambio sin recalibrar, probá justamente eso. Alterná el orden cuando puedas para que el desgaste o el calentamiento no se confundan con el efecto de la superficie.
Cuántos éxitos son suficientes
Cinco de cinco muestra que esos cinco intentos salieron bien. No demuestra probabilidad de éxito del 100 %. Para intentos independientes con probabilidad constante, cero fallos en n intentos da como límite superior unilateral del 95 % para la probabilidad de fallo 1 − 0,05^(1/n). Con 60 intentos es aproximadamente 4,87 %; con cinco, cerca de 45,1 %. La hipótesis de independencia puede fallar si todos los ensayos comparten la misma condición favorable.
La regla aproximada 3/n ayuda cuando n es grande y no hubo fallos, pero el objetivo del curso no es certificar confiabilidad. Es aprender a no convertir una muestra pequeña en una garantía universal. Registrá el número de intentos, fallos y condiciones junto al porcentaje.
Autonomía: estimación y ensayo continuo
El diseño del tema 45 estimó 2 Ah · 0,8 / 0,79 A = 2,03 h. Si en una campaña se midieran 1,15 A medios, la misma cuenta daría 1,6 / 1,15 = 1,39 h, unos 83,5 minutos. Sigue siendo una estimación: la capacidad útil, la temperatura y el corte operativo pueden reducirla.
Para C1 cargá la batería con su cargador, ejecutá una misión representativa y anotá tiempo, tensión y corriente periódicamente. La misión debe incluir motores activos y evasiones; dejar el robot esperando consume menos y no valida una hora de trabajo. Terminá al corte operativo previsto y guardá la razón de fin: batería baja, pérdida de línea, protección térmica o intervención. Sólo el primero corresponde a una descarga normal de la prueba.
Dos celdas de 2 Ah en serie conservan 2 Ah; aumenta la tensión del conjunto. La cuenta con amperios hora es válida si la corriente se mide del lado de esa batería. Si comparás consumos en tensiones diferentes, pasá a energía y potencia: t ≈ Wh útiles / W medios. Con registros irregulares, integrá Σ I·dt / 3600 para Ah y Σ V·I·dt / 3600 para Wh, usando segundos.
Regresión después de cada cambio
Una prueba de regresión repite algo que ya funcionaba para comprobar que el cambio no lo rompió. Tras cambiar el umbral de obstáculo, repetí frenada, tiempo y geometría de evasión, vuelta completa y botón durante EVITAR. Tras cambiar filtrado de batería, repetí arranques y S3. Antes de la entrega final, repetí todos los requisitos, aunque el último cambio parezca local.
Compará el control con y sin telemetría: si sólo falla C3 al transmitir, ya localizaste una interacción. Si falla en ambos, revisá el planificador, la adquisición de distancia y las tareas largas. La solución se decide a partir del período medido, no de la frecuencia nominal escrita en config.h.
10 · Exploración interactiva
Laboratorios de cierre
1. Presupuesto de parada
Modelo de desaceleración constante. Las barras muestran recorrido por latencia, recorrido de frenado, incertidumbre y margen restante. El umbral se expresa desde el frente del robot.
Mové los controles.
Con los valores iniciales quedan 16,1 cm. Subí la velocidad a 40 cm/s: la distancia de frenado pasa de 4,5 a 8 cm, aunque la velocidad sólo creció un tercio. Bajá el umbral a 20 cm y aumentá la latencia: encontrá cuándo deja de quedar el margen de 10 cm. Este laboratorio hace una predicción; no aprueba F3 sin las pruebas de detección y parada reales.
2. Revisar una campaña antes de declararla aprobada
CSV de cinco corridas didácticas. Cada fila reúne resúmenes de ensayos asociados a una corrida; no es la trama serie cruda del tema 47. El error máximo debe venir del registro a 50 Hz o de una medición externa, la velocidad de la recta y la distancia desde el frente.
Se aplican Ue = 0,5 mm, Uv = 0,3 cm/s, Ud = 0,5 cm, Ut = 0,1 s y Uj = 4 µs. Se requiere exactamente esta cabecera, identificadores distintos y al menos cinco filas; máximo 100. El laboratorio supone vueltas consecutivas en la misma pista de 6 m y sin muestras inválidas. Esas condiciones se verifican fuera de esta tabla.
Analizá el ejemplo para ver los fallos que esconde el promedio.
| Criterio | Valor conservador | Límite | Resultado |
|---|
Alcance: F3 sólo evalúa aquí la separación final; C3 sólo el máximo desvío del período. Aprobar estas filas no demuestra detección oportuna, ausencia de contacto, 10 Hz efectivos ni una aceptación completa.
Con los datos iniciales, la media de la velocidad es 28,98 cm/s y todas las vueltas duran menos de 33 s, pero hay tres criterios sin demostrar: F1 por el error de la corrida 3, margen final de F3 por la corrida 4 y período de C3 por esa misma corrida. Cambiá 14,8 por 14,0; 10,2 por 12,0; y 2400 por 1800. Analizá otra vez: mejoran los criterios parciales, pero S1 a S4 y C1 siguen requiriendo sus propias pruebas.
11 · Código ejecutable
Analizar la campaña con Python
Este programa usa sólo la biblioteca estándar y analiza los mismos datos del laboratorio. Valida cabecera, identificadores y números, calcula dispersión y aplica los límites conservadores. No convierte una tabla de ejemplo en evidencia física: automatiza las cuentas una vez que la campaña está bien definida.
Probalo en el navegador. Python se descarga con Pyodide la primera vez y requiere conexión. Podés editar el CSV dentro del código. En tu computadora guardá el programa como analizar_campana.py y ejecutalo con Python 3.
import csv
import io
import math
from statistics import mean, stdev
# Datos didácticos: no son mediciones de un robot real.
DATOS = """id,vuelta_s,error_mm,vel_cm_s,parada_cm,evasion_s,jitter_us
1,32.1,12.8,29.2,14.1,11.8,1400
2,32.5,13.4,28.9,13.7,12.1,1500
3,32.2,14.8,29.1,13.9,12.0,1600
4,32.8,13.1,28.7,10.2,12.4,2400
5,32.4,13.6,29.0,13.5,12.2,1700
"""
CAMPOS = "id,vuelta_s,error_mm,vel_cm_s,parada_cm,evasion_s,jitter_us".split(",")
UE, UV, UD, UT, UJ = 0.5, 0.3, 0.5, 0.1, 4.0
def leer_campana(texto):
lector = csv.DictReader(io.StringIO(texto.strip()))
if lector.fieldnames != CAMPOS:
raise ValueError("Cabecera distinta de la esperada")
filas, ids = [], set()
for numero, fila in enumerate(lector, start=2):
if None in fila or any(fila.get(c) is None for c in CAMPOS):
raise ValueError(f"Fila {numero}: cantidad de columnas incorrecta")
if any(not fila[c].strip() for c in CAMPOS):
raise ValueError(f"Fila {numero}: campo vacío")
try:
valores = {c: float(fila[c]) for c in CAMPOS}
except ValueError as error:
raise ValueError(f"Fila {numero}: número inválido") from error
if not all(math.isfinite(v) for v in valores.values()):
raise ValueError(f"Fila {numero}: sólo se admiten números finitos")
ident = valores["id"]
if not ident.is_integer() or ident < 1 or ident > 1000000 or ident in ids:
raise ValueError(f"Fila {numero}: identificador inválido o repetido")
if any(valores[c] < 0 for c in CAMPOS[1:]):
raise ValueError(f"Fila {numero}: magnitud negativa")
if valores["vuelta_s"] == 0 or valores["vel_cm_s"] == 0:
raise ValueError(f"Fila {numero}: tiempo y velocidad deben ser positivos")
ids.add(ident)
filas.append(valores)
if not 5 <= len(filas) <= 100:
raise ValueError("Se requieren entre 5 y 100 corridas")
return filas
def evaluar(filas):
tiempos = [f["vuelta_s"] for f in filas]
error = max(f["error_mm"] for f in filas) + UE
vmin = min(f["vel_cm_s"] for f in filas) - UV
vmax = max(f["vel_cm_s"] for f in filas) + UV
parada = min(f["parada_cm"] for f in filas) - UD
evasion = max(f["evasion_s"] for f in filas) + UT
vuelta = max(tiempos) + UT
# C2: primeras cinco filas, consecutivas según el protocolo.
rango5 = max(tiempos[:5]) - min(tiempos[:5]) + 2 * UT
jitter = max(f["jitter_us"] for f in filas) + UJ
return [
("F1", error <= 15, f"error máximo + U: {error:.2f} mm"),
("F2", vmin >= 27 and vmax <= 33,
f"intervalo con U: {vmin:.2f} a {vmax:.2f} cm/s"),
("F3 parcial", parada >= 10, f"distancia mínima - U: {parada:.2f} cm"),
("F4 parcial", evasion <= 15, f"tiempo máximo + U: {evasion:.2f} s"),
("F5", vuelta <= 45, f"vuelta máxima + U: {vuelta:.2f} s"),
("C2", rango5 <= 3, f"rango primeras cinco + 2U: {rango5:.2f} s"),
("C3 parcial", jitter <= 2000, f"J máximo + U: {jitter:.0f} us"),
]
def main():
filas = leer_campana(DATOS)
tiempos = [f["vuelta_s"] for f in filas]
print("CAMPANA DIDACTICA - no acredita pruebas físicas")
print(f"Corridas: {len(filas)}")
print(f"Vuelta media: {mean(tiempos):.2f} s")
print(f"Desviación muestral: {stdev(tiempos):.3f} s")
print(f"Velocidad media de rectas: {mean(f['vel_cm_s'] for f in filas):.2f} cm/s")
for nombre, cumple, detalle in evaluar(filas):
print(f"{nombre}: {'CUMPLE' if cumple else 'NO DEMOSTRADO'} - {detalle}")
print("Pendiente: condiciones, validez de datos, detección, contacto,")
print("10 Hz efectivos, S1-S4 y C1. No hay aceptación global automática.")
n = 60
p_sup = 1 - 0.05 ** (1 / n)
print(f"Cero fallos en {n} intentos independientes: límite 95 % = {100*p_sup:.2f} %")
if __name__ == "__main__":
main()Con los datos iniciales: vuelta media 32,40 s, desviación muestral 0,274 s, error conservador 15,30 mm, distancia conservadora 9,70 cm y J conservador 2404 µs. F1, el margen final de F3 y el período de C3 quedan sin demostrar. El resto de las filas cumple los límites numéricos bajo las condiciones declaradas.
Adaptarlo a tus archivos
En una ejecución local podés reemplazar la cadena por DATOS = Path("campana.csv").read_text(encoding="utf-8-sig"), importando antes Path desde pathlib. Ese archivo debe tener el esquema de resúmenes del laboratorio. La salida serie necesita un procesamiento previo: decodificar estado y fase, aplicar unidades, revisar huecos y validez, separar ensayos y obtener las métricas de cada corrida.
El programa usa el orden de las primeras cinco filas para C2; si tu campaña tiene más corridas, no elijas las cinco más parecidas. Conservá el orden y formá los bloques antes de mirar los resultados. Guardá la tabla original y generá una salida nueva con la versión del analizador usada.
¿Por qué no eliminar automáticamente las corridas «atípicas»?
Una corrida lenta puede revelar una pérdida de línea, una batería débil o una recuperación de la evasión. Sólo se excluye una medición si hay una causa de invalidez del ensayo documentada, como un cronómetro que no arrancó. La exclusión y el resultado original se conservan; después se repite el ensayo. El criterio no puede ser simplemente que empeora la media.
12 · Que otra persona pueda repetirlo
Informe y entrega reproducible
El informe final no necesita ser largo. Necesita permitir que alguien reconstruya el sistema, entienda los resultados y sepa qué queda fuera de lo probado. Una tabla de requisitos con enlaces a evidencias vale más que varias páginas de adjetivos sobre el desempeño.
entrega_robot/
LEEME.md objetivo, montaje, arranque y límites
firmware/ robot.ino y módulos de temas 46-47
configuracion/ parámetros finales y calibración fechada
hardware/ esquema, pines y lista de componentes
pruebas/
protocolo.md pista, instrumentos, condiciones y criterios
registros_originales/ tramas, eventos, videos y fichas sin modificar
campana.csv resúmenes con unidades
analizar_campana.py versión del análisis
resultados.txt salida y decisiones por requisito
informe.md alcance, evidencias, fallos y mejoras
Contenido mínimo del informe
- Identificación. Versión de firmware, placa, motores, driver, batería y dimensiones. Si no usás control de versiones, guardá una copia fechada e identificable.
- Condiciones y calibración. Pista, caja, superficie, luz, tensión, escalas y método de medida con incertidumbres.
- Matriz de requisitos. Para cada F, S y C: criterio acordado, ensayos, peor valor, incertidumbre, decisión y archivo de evidencia.
- Cambios respecto del diseño. Umbral de 25 cm, distancias de evasión, calibraciones y cualquier revisión de requisito.
- Limitaciones. Por ejemplo, obstáculos inmóviles conocidos, superficie plana, zona de giro despejada, sin protección completa ante encoder desconectado.
- Operación y recuperación. Encendido, calibración, inicio, parada, reconocimiento de falla, mantenimiento y condiciones en que no se inicia la prueba.
La conclusión debe ser proporcional a la evidencia: «en cinco corridas sobre la pista P1 se obtuvo…» permite revisar lo ocurrido. «Funciona en cualquier ambiente» no se sostiene con esa campaña. Si un requisito queda pendiente, nombralo junto a la prueba que falta y su efecto en el uso previsto.
Para cerrar, pedile a otra persona que siga el LEEME sin tus explicaciones. Si no sabe qué botón pulsar después de una falla o desde dónde se miden los 10 cm, descubriste una parte incompleta de la entrega.
13 · Leer los síntomas
Diagnóstico y errores frecuentes
| Síntoma | Hipótesis | Medición que distingue la causa |
|---|---|---|
| La velocidad del encoder cumple, pero la recta tarda demasiado | Escala de rueda incorrecta o patinamiento | Distancia externa contra cuentas de cada lado, a varias velocidades |
| El desvío medio es casi cero y se sale en curvas | Los signos se cancelan en la media | Máximo absoluto, RMS y curva temporal con estados |
| Frena tarde con telemetría activada | Impresión bloqueante o adquisición larga | Períodos reales con/sin serie, tiempo de tareas y tramas omitidas |
| El LED indica FALLA y una rueda da un tirón | Un lazo sigue actuando tras el cambio de estado | PWM y orden de ejecución en el mismo ciclo de la transición |
| Los giros empeoran con el piso | Vía efectiva y deslizamiento dependientes del contacto | Ángulo externo en ambos sentidos y superficies |
| La batería «dura» pero pierde prestaciones antes del corte | Autonomía eléctrica distinta de autonomía útil | Velocidad, error y fallas frente a tensión y tiempo |
| El máximo baja al empeorar la luz | Se descartaron o congelaron lecturas inválidas | Fracción válida y duración de pérdidas junto al máximo |
| Cumple sólo después de varios intentos | Condición inicial, calentamiento o selección favorable | Registrar desde el primer intento, batería y secuencia completa |
«Si cumple en el simulador, la prueba física es un trámite»
El simulador depende de sus supuestos. El montaje, la alimentación y el contacto real pueden romperlos. Comparar ambos identifica qué fenómeno falta o qué parámetro se estimó mal.
«Para mejorar el resultado puedo promediar todas las frenadas»
El requisito es un mínimo de separación en cada caso probado. La media describe la campaña; la peor separación, con su incertidumbre, decide el margen. No son intercambiables.
«Más integral recupera una batería agotada»
Si el PWM ya está saturado, el controlador no puede crear tensión ni par. La integral necesita anti-windup y el sistema puede necesitar reducir prestaciones o detenerse. Revisá la saturación antes de cambiar ganancias.
«El período medio fue 20 ms, así que C3 cumple»
Una secuencia de 10 y 30 ms tiene media 20 ms y un desvío máximo de 10 ms. C3 se evalúa con los extremos o con todos los desvíos, además de detectar ciclos perdidos.
«Si todos los indicadores del laboratorio están aprobados, terminamos»
El laboratorio analiza sólo resúmenes numéricos. No contiene el video de contacto, el ensayo continuo de autonomía ni las pruebas de seguridad. La matriz completa mantiene visibles esas evidencias pendientes.
«Cambiar un requisito que falló siempre está mal»
Un requisito puede revisarse si la necesidad real lo permite y el cambio queda acordado y justificado. Lo incorrecto es modificarlo después de ver los resultados y presentar la prueba como si hubiera validado la promesa original.
14 · Elegir qué construir después
Mejoras y próximos pasos
La mejor mejora se elige mirando el límite que mostró la campaña. Agregar sensores sin saber qué decisión nueva permitirán tomar aumenta conexiones y código, pero puede dejar intacto el problema que ya mediste.
| Límite observado | Extensión | Nueva prueba necesaria |
|---|---|---|
| El PI satura con encoder detenido | Supervisor de atasco: referencia, velocidad medida y persistencia | Atasco simulado, arranque normal y movimiento lento; evitar falsos positivos |
| La distancia frontal llega tarde | Adquisición no bloqueante y marcas de antigüedad | Ausencia de eco, eco tardío y período de control sin degradación |
| La evasión depende de una caja conocida | Medición lateral y comprobación del espacio libre | Obstáculos de otros tamaños y laterales ocupados, con alcance declarado |
| El rumbo deriva en giros | Combinar encoders e IMU (tema 29) | Sesgo en reposo, giros en ambos sentidos y patinamiento |
| El seguidor oscila al acelerar | Velocidad adaptada a la curvatura y al margen de control | Comparar tiempo, error máximo y saturación en las mismas curvas |
| Reinicios durante arranques | Mejorar alimentación, conexiones y distribución de retornos | Tensión mínima y arranques repetidos con la carga final |
| El análisis manual consume demasiado | Captura de eventos y generación automática de informes | Archivos incompletos, unidades erróneas y fallos que deben aparecer como pendientes |
Tres continuaciones del mismo proyecto
Para profundizar control: identificá la respuesta de cada motor, compará modelos de primer orden, ajustá la prealimentación y estudiá cómo el retardo afecta a la cascada. El resultado esperado es una mejora medida en sobreimpulso, error o saturación.
Para profundizar navegación: extendé las primitivas del tema 28 a secuencias de puntos, combiná orientación con IMU y delimitá cuánto error se acumula sin una referencia externa. Después podés estudiar localización y mapas, partiendo de la incertidumbre que ya viste en odometría.
Para profundizar automatización: trasladá estados, temporizadores, enclavamientos y fallas a un clasificador o una cinta como en el tema 39. Cambia la mecánica, pero siguen siendo necesarios el arranque seguro, la recuperación explícita, los tiempos medidos y la matriz de aceptación.
Una extensión se incorpora cuando tiene un objetivo y una prueba propia. Cerrá primero una versión reproducible; después mantenela como referencia para poder demostrar que el siguiente paso mejoró algo concreto.
15 · Práctica guiada
Predecí antes de comprobar
1. Corregir la distancia
Con radio configurado de 3,25 cm, la odometría indica 196 cm en un tramo de 200 cm reales. ¿Cuál es el radio efectivo? ¿Dónde debe aplicarse?
Ver solución
r_nuevo = 3,25 · 200 / 196 = 3,3163 cm. Se actualiza la distancia por cuenta y se usa tanto en velocidad como en odometría. Si cada rueda dio una escala distinta, se guardan dos factores. Luego se repiten la medición externa y los ajustes afectados.
2. Un giro que se pasa
Con vía de 15 cm, el programa acumula 360° y la referencia externa muestra 378°. ¿Hay que aumentar o reducir la vía efectiva?
Ver solución
Reducir: B_nuevo = 15 · 360 / 378 = 14,286 cm. Con una vía menor, las mismas distancias de rueda producen más ángulo estimado; el controlador alcanzará el objetivo antes. Primero se verifican las escalas de rueda para no compensar dos errores con un solo parámetro.
3. Una parada apenas por encima
La distancia medida es 10,2 cm con incertidumbre de ±0,5 cm. El mínimo es 10 cm. ¿Queda demostrado el margen?
Ver solución
No con ese método: el extremo conservador es 10,2 − 0,5 = 9,7 cm. No significa que la separación real sea necesariamente menor que 10; significa que no podemos demostrar lo contrario con ese intervalo. Se mejora la medición o el margen físico y se repite.
4. Más velocidad, mismo umbral
Con v = 40 cm/s, latencia = 0,13 s, desaceleración = 100 cm/s², umbral = 25 cm y Ud = 0,5 cm, ¿qué margen predice el modelo?
Ver solución
Latencia: 40 · 0,13 = 5,2 cm. Frenado: 40² / (2 · 100) = 8 cm. Margen: 25 − 5,2 − 8 − 0,5 = 11,3 cm. Pasa la cuenta de 10 cm con poco margen, pero necesita medición. A 30 cm/s quedaban 16,1 cm: el frenado crece con el cuadrado de la velocidad.
5. RMS frente a promedio
Las muestras uniformes de error son −4, −2, 0, 2 y 4 mm. Calculá media, máximo absoluto y RMS. ¿Cuál verifica directamente F1?
Ver solución
Media = 0 mm. Máximo = 4 mm. RMS = raíz((16 + 4 + 0 + 4 + 16) / 5) = 2,828 mm. F1 usa el máximo absoluto, con validez e incertidumbre; el RMS caracteriza el desempeño típico y la media indica sesgo.
6. El promedio del período
Dos períodos sucesivos duran 10 y 30 ms. ¿El promedio de 20 ms alcanza para aprobar C3? ¿Cuál es J?
Ver solución
No. J = máx(|10 − 20|, |30 − 20|) = 10 ms, cinco veces el límite de 2 ms. Un período medio correcto puede ocultar retrasos y ejecuciones en ráfaga.
7. Una serie de cinco vueltas
Los tiempos son 32,1; 32,5; 32,2; 32,8 y 32,4 s. Con Ut = 0,1 s y el criterio C2 de rango ≤ 3 s, ¿qué se concluye?
Ver solución
Media: 32,4 s. Rango medido: 32,8 − 32,1 = 0,7 s. Rango conservador: 0,7 + 2 · 0,1 = 0,9 s. Cumple ese criterio si las vueltas fueron consecutivas y comparables. No demuestra otros requisitos.
8. Autonomía y corriente
Dos celdas de 2 Ah en serie, fracción útil 0,8 y corriente media de batería 1,15 A. ¿Cuál es la autonomía estimada? ¿Aprueba C1?
Ver solución
La capacidad en serie sigue siendo 2 Ah. t = 2 · 0,8 / 1,15 = 1,391 h = 83,5 min. El cálculo sugiere margen sobre 60 min, pero C1 requiere el ensayo continuo de funcionamiento útil hasta el corte. Una falla a los 40 min no se puede ignorar porque aún quede batería.
9. Telemetría y capacidad
Una trama de 50 bytes enviada a 10 Hz por un enlace 8N1 a 115200 bit/s: ¿qué fracción del enlace ocupa? ¿Puede bloquear a pesar de eso?
Ver solución
50 · 10 · 10 = 5000 bit/s, un 5000 / 115200 = 4,34 %. Puede bloquear si una ráfaga llena el búfer o la rutina imprime más de lo previsto. El promedio del enlace no reemplaza la medición del período ni la comprobación de espacio.
10. Cero fallos no significa riesgo cero
Se completaron 60 intentos independientes sin fallos. Usando 1 − 0,05^(1/n), ¿qué límite superior unilateral del 95 % resulta para la probabilidad de fallo?
Ver solución
1 − 0,05^(1/60) = 0,0487, aproximadamente 4,87 %. La aproximación 3/60 = 5 % es cercana. La conclusión depende de independencia y probabilidad constante; una serie en condiciones favorables no representa automáticamente todos los ambientes.
16 · Cierre del proyecto y de la ruta
Lo que aprendimos a construir
- Un requisito se cierra con una prueba, condiciones declaradas y evidencia revisable. Si falta la medición, queda pendiente.
- Primero se calibran mecánica, escalas y signos; después se ajustan los lazos de rueda, el seguimiento y las maniobras.
- Los extremos se acumulan a la frecuencia del control; transmitir a 10 Hz no equivale a medir los picos a 50 Hz.
- Período, ejecución, reacción eléctrica y parada mecánica son magnitudes diferentes y necesitan registros adecuados.
- Promedios y RMS describen; máximos, mínimos, incertidumbre y condiciones deciden los límites correspondientes.
- Cada cambio necesita una hipótesis, una comparación reproducible y pruebas de regresión.
- La entrega incluye código, configuración, calibración, registros originales, resultados, límites y operación.
La última práctica
Prepará la entrega del proyecto, ejecutá una campaña con la versión final y completá la matriz F1–F5, S1–S4 y C1–C3. Para cada fila escribí una de tres conclusiones: cumple bajo estas condiciones, no cumple o falta esta evidencia. Si el resultado es un fallo, explicá la causa que pudiste aislar y la próxima prueba que la comprobaría. Eso también es un resultado técnico útil.
El curso comenzó con la pregunta de qué distingue a un robot y termina con un sistema que mide, decide, actúa y reconoce fallas. Conectamos mecánica, electrónica y programación mediante modelos: cinemática para convertir movimiento, sensores para estimarlo, control para corregirlo y estados para organizarlo en el tiempo.
Con este tema termina Robótica y Automatización para Programadores y la ruta de doce cursos de Electrónica para Programadores. El siguiente proyecto puede tener otra forma, otros sensores o un controlador distinto. El procedimiento que te llevás es el mismo: definir qué debe hacer, construir por capas, medir qué hace y mejorar con evidencia.