← Índice del curso

Robótica y Automatización · Tema 48

Proyecto: pruebas, ajustes y cierre del curso

El robot ya sigue la línea y rodea la caja. Falta demostrar con mediciones qué cumple, en qué condiciones y con cuánto margen. Cerramos el proyecto calibrando el sistema, registrando sus límites, haciendo pruebas repetibles y convirtiendo los resultados en decisiones de mejora.

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.

Ciclo de verificación del proyectoRequisito, prueba y registro, comparación con límites y decisión. Si falla, se vuelve a calibrar o ajustar y se repite la prueba junto con la regresión. Requisitoy condiciónPruebay registroMétricay margenDecisióncon evidencia→→→Si falla: identificar causa → cambiar una variable → repetir y verificar regresión

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

Precisiones para cerrar las ambigüedades del plan del tema 45.
PuntoDefinición para la pruebaConsecuencia
F1, desvío ≤ 15 mmPosición de la línea respecto del centro del arreglo durante SEGUIR y con lectura válidaEs la magnitud del requisito; no equivale al error del centro del chasis
F2, 30 ± 10 % cm/s27 a 33 cm/s en recta, sin arranque ni frenadoPara 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 msMedir pulsación → PWM cero y pulsación → inmovilidad por separadoPWM cero puede dejar la rueda girando; no demuestra por sí solo la parada mecánica
S2, pérdida de línea > 1 sMedir desde la última lectura válida; respuesta al superar el tiempo, dentro de un ciclo y el retardo de adquisiciónNo 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 sEs más estricto que permitir ±3 s alrededor de la media; declararlo antes de probar
C3, variación ≤ 2 msDefinir J = máx |T_real − 20 ms|, sin ocultar ciclos omitidosSe 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:

k_nuevo = distancia_real / cuentas
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:

B_nuevo = B_anterior · θ_indicado / θ_real

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.

Registro de calibración de ejemplo; reemplazar por mediciones propias.
MagnitudEnsayoValor obtenidoDónde se aplica
Escala de rueda200 reales / 196 indicadosFactor 1,0204Distancia por cuenta y velocidad
Vía efectiva360 indicados / 378 reales14,286 cm desde 15 cmIncremento angular de odometría
Posición de líneaCinco posiciones conocidasTabla de error e intervalo válidoEstimación y validez
Origen de distanciaSensor 3 cm detrás del frenteLibre = lectura − 3 cmInforme y criterio de margen
Referencia del ADC4,85 V medidosUsar escala corregidaConversió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étricas del proyecto y condiciones de cálculo.
MétricaCálculoInterpretación
Error máximomáx |e|, mm, durante seguimiento válidoPeor separación observada en el arreglo; conservar el estado de validez
Error RMSraíz(Σ e²·dt / Σ dt), mmError típico con más peso para desvíos grandes; no sustituye el máximo
Velocidad en rectaL / Δt, cm/s, entre dos marcas externasValida la escala del encoder y F2 en el suelo
Distancia finalMenor separación entre el frente detenido y la cara de la caja, cmSe compara con ≥ 10 cm; revisar también contacto durante la evasión
Tiempo de evasiónRegreso estable a seguimiento − detección, sIncluye frenar, rodear, buscar y alinear; límite 15 s
VueltaTiempo entre cruces consecutivos de una marca, sDeclarar vuelta lanzada o desde reposo y conservar la misma definición
Dispersión de vueltasRango, media y desviación estándar muestralSe necesita el rango para el C2 acordado; una media sola oculta un intento lento
Saturacióntiempo limitado / tiempo activoSi el actuador pasa mucho tiempo al límite, subir la integral no crea capacidad física
Disponibilidad de datosMuestras válidas y recibidas / muestras previstasDetecta 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.

F1 conservador: e_máx + Ue ≤ 15 mm
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

d_recorrida ≈ v · t_latencia + v² / (2a)
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.

Matriz de aceptación del proyecto; cantidades propuestas para el laboratorio, no una certificación estadística.
IdProcedimientoEvidencia y decisión
F1Cinco vueltas en la pista nominal con línea de 19 mm; registrar a 50 Hz durante SEGUIRMáximo observado más Ue ≤ 15 mm en cada vuelta, validez y contraste externo cerca del límite
F2Cinco pasadas por 150 cm de recta a velocidad estable, con marcas externas27–33 cm/s en cada pasada, considerando Uv; no incluir el arranque
F3 / F3-R1Cinco aproximaciones a la caja, desde la misma velocidad y suficiente distancia inicialInstante de detección y separación final desde el frente; mínimo conservador ≥ 10 cm; declarar revisión de umbral
F4Cinco evasiones con la caja de 10 × 10 cm en la recta definidaDetección → seguimiento estable ≤ 15 s; sin contacto, ni intervención, ni fallas ocultas
F5Cinco vueltas en el circuito de aceptación de 6 m con un obstáculoCada vuelta ≤ 45 s, con convención de inicio documentada
S1Pulsar el botón en recta, curva y distintas fases de EVITARRegistros de pulsación → PWM cero y → inmovilidad; contrastar con 100 ms según interpretación acordada
S2Interrumpir la línea durante seguimiento y sostener la pérdidaFalla y aviso al superar 1 s dentro del retardo declarado; motores sin nuevas órdenes
S3Con batería desconectada, alimentar con fuente regulable adecuada y reducir la tensiónTensión real, filtrada, persistencia y entrada a FALLA; no rearrancar al recuperar tensión
S4Encender varias veces y reiniciar el controlador con motor alimentadoPWM e inmovilidad hasta una orden explícita; probar también botón sostenido al encender
C1Ensayo continuo representativo desde batería cargada hasta el corte operativoAl menos 60 min útiles, con seguimiento y evasiones, sin recarga ni ayuda
C2Usar cinco vueltas consecutivas de F5 sin cambios ni exclusionesRango ≤ 3 s según el criterio conservador acordado
C3Registrar todos los períodos con telemetría habilitada; comparar además con ella deshabilitadaJ ≤ 2000 µs, telemetría nominal a 10 Hz, pérdidas y ciclos omitidos informados

Procedimiento detallado: distancia de parada

  1. Medí el plano frontal y el origen del sensor. Marcá la caja y el punto inicial, dejando distancia suficiente para alcanzar 30 cm/s.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Inyección de condiciones anormales, primero en banco o con movimiento limitado.
CondiciónCómo provocarlaQué comprobar
Botón en plena maniobraPulsar en F_LATERAL, F_PASO y F_VUELTAParada prioritaria; ninguna fase vuelve a escribir velocidades en ese ciclo
Pérdida de líneaRetirar un tramo durante SEGUIR; primero con ruedas levantadasSe cuenta desde la última muestra válida, entra en FALLA y no sigue con un error viejo
Línea no encontrada al volverDesplazar la pista fuera del recorrido previstoEl límite de búsqueda o de tiempo detiene la maniobra; no avanza indefinidamente
Eco ausente o congeladoSimular lectura inválida o impedir ecos en bancoValidez y antigüedad; documentar qué cobertura tiene el firmware actual
Encoder sin pulsosInyectar velocidad medida cero en una prueba de softwareEl PI puede saturar tratando de mover una rueda: hace falta detección de atasco para contenerlo
Tensión baja y recuperaciónBajar y subir la fuente con la batería desconectadaFiltro y persistencia de S3; volver a tensión normal no equivale a orden de marcha
Reinicio del microcontroladorUsar RESET mientras el driver sigue alimentadoAusencia de pulsos de movimiento durante arranque, calibración y espera
Salida serie ocupadaForzar ráfagas en una versión de bancoContar 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.

  1. Guardar la referencia. Copiá firmware, configuración y campaña que falla. Definí la métrica a mejorar y las que deben conservarse.
  2. Reproducir el síntoma. Elegí el ensayo más corto que lo muestra: recta, escalón de rueda, giro, frenada o vuelta.
  3. Separar medida y actuación. Contrastá unidades y signos con una referencia independiente; comprobá si el actuador está saturado.
  4. 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.
  5. 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.
  6. 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.

Ejemplo didáctico de decisiones de ajuste; los valores no son resultados de un robot medido.
VersiónCambioResultado del ensayoDecisión
AReferencia guardadaError máx. 13,8 mm; peor frenada 10,2 cmMargen de frenada no demostrado con Ud = 0,5 cm
BDetección nominal 20 → 25 cmPeor frenada 14,0 cm; evasión 12,6 sMejor margen; registrar revisión de F3 y comprobar espacio disponible
CSubir velocidad baseVuelta más rápida; error máx. 16,1 mmRechazar: viola F1, aunque F5 mejore
DCorregir radio efectivoEncoder y marcas coinciden; cambia respuesta de ruedaRevalidar 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.

Distribución del presupuesto de paradaGráfico actualizado de la distancia consumida por latencia, frenado e incertidumbre. El margen y la decisión aparecen también en texto debajo.
Durante la latencia—
Durante el frenado—
Margen conservador—
Umbral mínimo calculado para 10 cm—

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.

Evaluación parcial con incertidumbre; faltan las pruebas de seguridad, autonomía, detección y cobertura de datos.
CriterioValor conservadorLímiteResultado

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

  1. 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.
  2. Condiciones y calibración. Pista, caja, superficie, luz, tensión, escalas y método de medida con incertidumbres.
  3. Matriz de requisitos. Para cada F, S y C: criterio acordado, ensayos, peor valor, incertidumbre, decisión y archivo de evidencia.
  4. Cambios respecto del diseño. Umbral de 25 cm, distancias de evasión, calibraciones y cualquier revisión de requisito.
  5. Limitaciones. Por ejemplo, obstáculos inmóviles conocidos, superficie plana, zona de giro despejada, sin protección completa ante encoder desconectado.
  6. 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

Problemas típicos del cierre y la siguiente medición útil.
SíntomaHipótesisMedición que distingue la causa
La velocidad del encoder cumple, pero la recta tarda demasiadoEscala de rueda incorrecta o patinamientoDistancia externa contra cuentas de cada lado, a varias velocidades
El desvío medio es casi cero y se sale en curvasLos signos se cancelan en la mediaMáximo absoluto, RMS y curva temporal con estados
Frena tarde con telemetría activadaImpresión bloqueante o adquisición largaPeríodos reales con/sin serie, tiempo de tareas y tramas omitidas
El LED indica FALLA y una rueda da un tirónUn lazo sigue actuando tras el cambio de estadoPWM y orden de ejecución en el mismo ciclo de la transición
Los giros empeoran con el pisoVía efectiva y deslizamiento dependientes del contactoÁngulo externo en ambos sentidos y superficies
La batería «dura» pero pierde prestaciones antes del corteAutonomía eléctrica distinta de autonomía útilVelocidad, error y fallas frente a tensión y tiempo
El máximo baja al empeorar la luzSe descartaron o congelaron lecturas inválidasFracción válida y duración de pérdidas junto al máximo
Cumple sólo después de varios intentosCondición inicial, calentamiento o selección favorableRegistrar 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.

Posibles extensiones y qué evidencia exigir a cada una.
Límite observadoExtensiónNueva prueba necesaria
El PI satura con encoder detenidoSupervisor de atasco: referencia, velocidad medida y persistenciaAtasco simulado, arranque normal y movimiento lento; evitar falsos positivos
La distancia frontal llega tardeAdquisición no bloqueante y marcas de antigüedadAusencia de eco, eco tardío y período de control sin degradación
La evasión depende de una caja conocidaMedición lateral y comprobación del espacio libreObstáculos de otros tamaños y laterales ocupados, con alcance declarado
El rumbo deriva en girosCombinar encoders e IMU (tema 29)Sesgo en reposo, giros en ambos sentidos y patinamiento
El seguidor oscila al acelerarVelocidad adaptada a la curvatura y al margen de controlComparar tiempo, error máximo y saturación en las mismas curvas
Reinicios durante arranquesMejorar alimentación, conexiones y distribución de retornosTensión mínima y arranques repetidos con la carga final
El análisis manual consume demasiadoCaptura de eventos y generación automática de informesArchivos 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.