Robótica¶

Robot Diferencial¶

NOTAS

Bienvenidos a la semana 12. Hasta ahora hemos trabajado con manipuladores: brazos anclados a una mesa, cuya posición se calcula con la cinemática directa a partir de los ángulos de las articulaciones. La semana pasada empezamos con la locomoción, y hoy nos subimos al robot móvil más común que existe: el robot diferencial, dos ruedas motrices y una rueda loca.

Las preguntas cambian respecto al manipulador. En un brazo, si conozco los ángulos de las articulaciones, conozco la posición del efector final y no hay ambigüedad. En un robot móvil no pasa lo mismo: conocer cuánto giró cada rueda no basta para saber dónde está el robot, porque la posición depende de toda la historia del movimiento. Esa idea, integrar para estimar la posición, es la odometría, y es el corazón de la clase.

Hoy trabajaremos con el robot que ustedes mismos construyen con el kit LEGO EV3, y con su gemelo en el simulador Webots. Todo lo que calculemos en el tablero lo vamos a comprobar en el laboratorio: vamos a pedirle al robot que haga cuadrados de 50 cm, y vamos a ver que no los cierra. Entender por qué es el objetivo de hoy.

🎨 Prompt sugerido: "Pixel art of a small LEGO-style robot that has ONLY TWO wheels in total, one large wheel on the left side and one on the right side of its body, like a two-wheeled balancing robot, drawing a slightly rotated square path with a blue marker on a gridded workshop floor, several faded overlapping squares showing accumulated drift, tools and a tape measure nearby, warm lighting, wide scene with clear empty space in the upper half for a title. 16-bit retro style, blue, orange and grey palette, no text."

Plan de hoy: tres bloques¶

# Bloque Pregunta que responde
1 Modelo cinemático ¿Qué hace el robot si muevo cada rueda a cierta velocidad?
2 Odometría ¿Dónde está el robot si solo sé cuánto giraron sus ruedas?
3 Errores y calibración ¿Por qué el robot no vuelve al punto de partida, y qué hacemos al respecto?

Al final: las prácticas con el EV3 real y en el simulador Webots.

NOTAS

La clase tiene tres bloques que se encadenan. El primero es la cinemática: ecuaciones que relacionan la velocidad de cada rueda con la velocidad del robot. Es álgebra sencilla, pero de ella depende todo lo demás.

El segundo bloque es la odometría: si la cinemática me dice la velocidad del robot en cada instante, integrando esa velocidad obtengo la posición. Es exactamente lo que hace el EV3 cuando le pedimos vehicle.position.

El tercer bloque es el más importante para el laboratorio: la odometría siempre acumula error. Vamos a separar los errores que se pueden corregir calibrando de los que no, y a ver cómo un sensor adicional, el giroscopio, ayuda con los segundos.

Cierro con las prácticas de la semana, que tienen dos versiones: con el robot real en el laboratorio y en el simulador Webots, con exactamente el mismo programa.

El robot del curso¶

Diseño en BrickLink Studio Gemelo en Webots
  • Ladrillo EV3 + 2 motores grandes (puertos A y D) con encoder de 1°
  • Llanta de 30.4 mm → $r = 0.0152\,m$ · trocha 14 cm → $l = 0.07\,m$
  • Rueda loca de bola al frente · giroscopio en el puerto 1

NOTAS

Este es el robot con el que vamos a trabajar. A la izquierda está el diseño en BrickLink Studio, que es el mismo modelo que ustedes arman con el kit: el ladrillo EV3 encima, un motor grande a cada lado con una llanta pequeña directamente en el eje, y una bola de acero como rueda loca. Encima del ladrillo va el giroscopio.

A la derecha está el mismo robot en el simulador Webots. No es un dibujo aproximado: el modelo 3D sale directamente del archivo de Studio, pieza por pieza, y tiene los mismos motores, los mismos encoders de un grado de resolución y el mismo giroscopio. Por eso los programas que escriban para uno funcionan en el otro.

Fíjense en los números, porque los vamos a usar toda la clase: la llanta mide 30.4 mm de diámetro, o sea un radio de 15.2 mm, y la distancia entre los centros de las llantas, la trocha, es de unos 14 cm. En las ecuaciones del tablero vamos a usar $l$, la mitad de la trocha: 7 cm. En la librería del EV3 el parámetro se llama tread y es la trocha completa, $2l$. Esa diferencia de un factor 2 es un error clásico, así que atención.

Configuración del Robot Diferencial¶

No description has been provided for this image
Símbolo Descripción EV3 del curso
$r$ Radio de la rueda $0.0152\,m$
$l$ Distancia de cada rueda al centro del eje $0.07\,m$
$\dot\phi_R, \dot\phi_L$ Velocidad angular de las ruedas derecha e izquierda hasta $17.5\,rad/s$
$v, \omega$ Velocidad lineal y angular del robot —

NOTAS

El robot diferencial es la plataforma móvil más simple: dos ruedas motrices sobre un mismo eje, cada una con su propio motor, y una o más ruedas locas que solo sostienen el peso. No hay dirección como en un carro: el robot gira haciendo que una rueda vaya más rápido que la otra, de ahí el nombre diferencial.

El punto de referencia del robot es el centro del eje entre las dos ruedas motrices, no el centro del ladrillo ni el centro de masa. Es el único punto cuya velocidad siempre apunta hacia adelante: el robot no se puede mover de lado. Esa restricción, que se llama no holonómica, es lo que hace interesante la planificación de trayectorias en estos robots.

Los ejes siguen la convención de la librería del EV3: $x$ hacia adelante, $y$ hacia la izquierda y $\theta$ positivo en sentido antihorario. Los motores grandes del EV3 giran hasta unas 170 rpm, que son unos 17.5 rad/s: con una llanta de 15 mm eso da una velocidad máxima de apenas 27 cm/s. Es un robot lento, lo que es bueno para medir.

Modelo Cinemático Directo¶

De las velocidades de las ruedas a la velocidad del robot:

$$v = \frac{r}{2}(\dot\phi_R + \dot\phi_L)$$

$$\omega = \frac{r}{2l}(\dot\phi_R - \dot\phi_L)$$

  • $v$ es el promedio de las velocidades de las ruedas
  • $\omega$ es su diferencia, dividida por la distancia entre ellas

NOTAS

Cada rueda que gira a $\dot\phi$ rad/s avanza sobre el piso a $r\dot\phi$ metros por segundo, siempre que no patine. El centro del eje está exactamente en la mitad de las dos ruedas, así que su velocidad es el promedio de las dos: esa es la primera ecuación.

La segunda sale de pensar en un cuerpo rígido que gira: si la rueda derecha va más rápido que la izquierda, el robot gira hacia la izquierda, y lo hace más rápido cuanto mayor sea la diferencia y cuanto más cerca estén las ruedas. Por eso $\omega$ es la diferencia de velocidades lineales dividida por la distancia entre las ruedas, $2l$.

Noten que son dos ecuaciones lineales con dos entradas. Esto es mucho más simple que la cinemática directa de un manipulador, donde teníamos productos de matrices de transformación. La dificultad del robot móvil no está aquí: está en que $v$ y $\omega$ son velocidades, y para saber dónde está el robot hay que integrarlas.

Casos especiales¶

No description has been provided for this image
  • Ruedas iguales → recto ($\omega = 0$) · ruedas opuestas → gira en el sitio ($v = 0$) · una rueda quieta → pivota sobre ella

NOTAS

Estos tres casos cubren casi todo lo que haremos en el laboratorio. Si las dos ruedas giran igual, $\omega$ es cero y el robot va recto. Si giran igual pero en sentidos opuestos, $v$ es cero y el robot gira en el sitio alrededor del centro del eje. Ese es el giro que usan drive_turn(90, 0.0) y las esquinas de nuestros cuadrados.

El tercer caso es interesante: si frenamos la rueda izquierda, el robot pivota sobre ella y el centro del eje describe un círculo de radio $l$. En las gráficas, la línea negra punteada es el centro del robot y las de colores son las ruedas.

Una pregunta para ustedes: en el giro en el sitio, ¿qué rueda recorre más distancia? Ninguna, recorren lo mismo en sentidos opuestos. Y ahí ya se asoma el primer problema de la calibración: si la distancia real entre las ruedas no es la que creemos, el giro no será de 90°.

Modelo Cinemático Inverso¶

De la velocidad deseada del robot a las velocidades de las ruedas:

$$\dot\phi_R = \frac{v + \omega l}{r} \qquad \dot\phi_L = \frac{v - \omega l}{r}$$

Ejemplo con el EV3¶

Se pide Rueda derecha Rueda izquierda
avanzar a 0.2 m/s 13.2 rad/s 13.2 rad/s
girar en el sitio a 1 rad/s 4.6 rad/s −4.6 rad/s
avanzar a 0.2 m/s y girar a 1 rad/s 17.8 rad/s ⚠️ (máx. 17.5) 8.6 rad/s

NOTAS

La cinemática inversa despeja las velocidades de las ruedas. Es lo que usamos para comandar el robot: en vez de pensar en cada motor, pensamos en qué tan rápido queremos avanzar y girar, y las ecuaciones nos dicen qué pedirle a cada motor.

Miren el ejemplo con los números de nuestro EV3. Avanzar a 20 cm/s exige 13.2 rad/s en cada rueda, alrededor del 75 % del máximo. Girar en el sitio a 1 rad/s pide 4.6 rad/s. Pero si pedimos las dos cosas a la vez, la rueda derecha tendría que girar a 17.8 rad/s, por encima de los 17.5 que da el motor.

Ese es un detalle práctico importante: la cinemática inversa no sabe de límites físicos. Si el motor se satura, el robot no hace la curva que pedimos. Un controlador bien hecho escala ambas ruedas por el mismo factor para conservar el radio de la curva, que es exactamente lo que hace el controlador de teleoperación del simulador.

Radio Instantáneo de Curvatura¶

No description has been provided for this image

$$R = \frac{v}{\omega} = l \cdot \frac{\dot\phi_R + \dot\phi_L}{\dot\phi_R - \dot\phi_L}$$

  • $R \to \infty$: movimiento recto · $R = 0$: giro sobre el centro del eje · $R = l$: giro sobre la rueda izquierda

NOTAS

En cada instante, un robot diferencial se mueve sobre un arco de circunferencia. El centro de ese arco se llama centro instantáneo de rotación, ICR, y siempre está sobre la prolongación del eje de las ruedas: por eso el robot no puede moverse de lado.

El radio de ese arco es $R = v/\omega$. Si reemplazamos las ecuaciones de la cinemática directa, queda en función de las velocidades de las ruedas. Cada rueda recorre su propio arco, concéntrico con el del centro: la de adentro tiene radio $R - l$ y la de afuera $R + l$. Eso da una forma rápida de calcular las velocidades de las ruedas para una curva: están en la misma proporción que sus radios.

En ev3_dc, el método drive_turn(angulo, radio) recibe exactamente este $R$. Con radio cero gira en el sitio; con un radio positivo describe un arco. Y cuando el robot se mueve por tiempo con move(velocidad, turn), el parámetro turn es otra forma de fijar la relación entre las dos ruedas y, por lo tanto, el radio.

La cadena completa¶

  • La cinemática da velocidades; la posición exige integrar
  • Los encoders miden $\phi_R$ y $\phi_L$: la pose se estima, no se mide

NOTAS

Este diagrama resume el primer bloque y nos lleva al segundo. Los motores reciben velocidades de rueda, y los encoders miden cuánto giró cada una. La cinemática directa convierte eso en la velocidad del robot. Para llegar a la pose, es decir la posición $x, y$ y la orientación $\theta$, hay que integrar en el tiempo.

La flecha punteada es el camino de vuelta: cuando queremos mover el robot, partimos de la velocidad deseada y la cinemática inversa nos da qué pedirle a los motores.

La idea clave es la segunda viñeta. Ningún sensor del EV3 mide la posición del robot en la mesa. Lo que medimos es cuánto giraron las ruedas, y de ahí estimamos la posición. Toda estimación tiene error, y como integramos, el error de cada instante se suma al de los anteriores. Guarden esa idea para el tercer bloque.

Odometría¶

NOTAS

El término viene del griego hodos, camino, y metron, medida: medir el camino recorrido. Los navegantes lo hacían antes del GPS con la navegación por estima: conociendo el rumbo, la velocidad y el tiempo, marcaban en la carta dónde creían estar. Si el rumbo tenía un pequeño error, al cabo de días de navegación el barco podía estar a muchas millas de donde el mapa decía.

Nuestro robot hace lo mismo, pero con las ruedas: cuenta cuántos grados giró cada una y, con el radio y la trocha, calcula cuánto avanzó y cuánto giró.

🎨 Prompt sugerido: "Pixel art of a small two-wheeled robot on a wooden table next to an old nautical chart, a compass and a pencil tracing a dotted dead-reckoning route, with glowing numbers counting wheel rotations floating above the wheels. 16-bit retro style, warm sepia and teal palette, no text."

Odometría¶

La odometría estima la pose $(x, y, \theta)$ sumando pequeños desplazamientos.

Incrementos en cada paso (medidos por los encoders)¶

$$\Delta s_R = r \cdot \Delta\phi_R, \quad \Delta s_L = r \cdot \Delta\phi_L$$

$$\Delta s = \frac{\Delta s_R + \Delta s_L}{2}, \quad \Delta\theta = \frac{\Delta s_R - \Delta s_L}{2l}$$

Actualización de la pose¶

$$x_{k+1} = x_k + \Delta s \cos\left(\theta_k + \frac{\Delta\theta}{2}\right), \quad y_{k+1} = y_k + \Delta s \sin\left(\theta_k + \frac{\Delta\theta}{2}\right)$$

$$\theta_{k+1} = \theta_k + \Delta\theta$$

NOTAS

En la práctica no integramos velocidades sino incrementos: en cada lectura, el encoder nos dice cuántos grados giró cada rueda desde la lectura anterior. Multiplicando por el radio obtenemos cuánto avanzó cada rueda sobre el piso, y con las mismas ideas de la cinemática directa, el promedio y la diferencia, sabemos cuánto avanzó y cuánto giró el robot en ese paso.

La actualización de la pose proyecta el avance $\Delta s$ en la dirección del robot. El detalle del $\Delta\theta/2$ es importante: durante el paso el robot fue girando, así que usamos la orientación del punto medio del paso y no la del inicio. Con pasos pequeños la diferencia es mínima, pero con pasos grandes mejora mucho la precisión.

Fíjense qué parámetros aparecen: $r$ en los incrementos y $l$ en el giro. Si alguno de los dos está mal, todos los pasos tendrán el mismo error, y ese error se acumula. Es el mismo cálculo que hace TwoWheelVehicle de la librería ev3_dc con los valores radius_wheel y tread que le pasamos.

Odometría en código¶

def odometria(phi_R, phi_L, r, l, x0=0, y0=0, theta0=0):
    """Trayectoria estimada a partir de los ángulos de las ruedas [rad]."""
    x, y, theta = x0, y0, theta0
    trayectoria = [(x, y, theta)]
    for dphiR, dphiL in zip(np.diff(phi_R), np.diff(phi_L)):
        ds_R, ds_L = r * dphiR, r * dphiL
        ds = (ds_R + ds_L) / 2
        dtheta = (ds_R - ds_L) / (2 * l)
        x += ds * np.cos(theta + dtheta / 2)
        y += ds * np.sin(theta + dtheta / 2)
        theta += dtheta
        trayectoria.append((x, y, theta))
    return np.array(trayectoria)

NOTAS

Este es el algoritmo completo: unas diez líneas de Python. Recibe los ángulos acumulados de las ruedas, que es lo que entrega el encoder, y devuelve la trayectoria estimada.

Vale la pena que lo escriban ustedes mismos al menos una vez, aunque la librería ya lo haga. En el simulador, el controlador de teleoperación del robot, ev3_differential.py, tiene exactamente este cálculo; y en las prácticas, ev3.medir_pose_real() permite compararlo con la posición verdadera.

Un detalle de implementación: theta crece sin límite. Si el robot da diez vueltas, $\theta$ vale unos 62.8 radianes. Para mostrarlo es común envolverlo entre $-\pi$ y $\pi$, como hace vehicle.position.o en grados, pero para integrar no importa. Lo vamos a ver con el giroscopio, que sí cuenta las vueltas.

Cuadrado ideal¶

No description has been provided for this image
  • Lados de 50 cm: $\Delta\phi = 0.5 / r = 32.9\,rad$ ≈ 1885° por rueda
  • Giros de 90° en el sitio: $\Delta\phi = \pm\frac{\pi}{2} \cdot \frac{l}{r} = \pm 7.2\,rad$ ≈ ±414°

NOTAS

Si le damos al robot exactamente los ángulos de rueda de un cuadrado de 50 cm y la odometría usa los mismos parámetros con que se calcularon esos ángulos, el resultado es un cuadrado perfecto. Es obvio, pero es importante: la odometría es consistente con los comandos.

Los números son útiles para el laboratorio. Cada lado de 50 cm exige casi 1900 grados de motor, más de cinco vueltas de rueda, y cada esquina de 90° pide unos 414 grados en cada rueda, en sentidos opuestos. El encoder tiene resolución de un grado: en un lado, eso es un error de cuantización de apenas 0.05 %.

La pregunta de fondo es: si la odometría dice que el cuadrado cerró, ¿el robot de verdad volvió al punto de partida? En el laboratorio van a ver que no. La gráfica de la odometría puede cerrar perfectamente mientras el marcador en el piso dibuja algo muy distinto.

Errores en la Odometría¶

NOTAS

Entramos al tercer bloque, el que más les va a servir en el laboratorio. Hasta ahora supusimos que conocemos el radio y la trocha exactos y que las ruedas no patinan. Ninguna de las dos cosas es cierta.

La imagen resume lo que van a ver en el piso: el robot cree que dibuja siempre el mismo cuadrado, pero cada vuelta queda un poco girada respecto a la anterior.

🎨 Prompt sugerido: "Pixel art of a small two-wheeled robot on a gridded floor confidently following a perfect square drawn on a holographic screen above it, while the real marker trail on the floor spirals away in slightly rotated squares, a ghostly outline showing where the robot thinks it is. 16-bit retro style, blue, red and grey palette, no text."

Errores en la Odometría¶

No description has been provided for this image

La incertidumbre en la posición crece sin límite con la distancia recorrida.

NOTAS

Hay dos familias de errores y conviene separarlas porque se atacan de forma distinta.

Los sistemáticos empujan siempre en el mismo sentido. Si el radio efectivo de la llanta es un 1 % menor que el que medimos, el robot recorre un 1 % menos en cada tramo, siempre. Si una rueda es un poco más grande que la otra, el robot se curva siempre hacia el mismo lado. Si la trocha efectiva es mayor que la medida, todos los giros quedan cortos. La buena noticia es que, por ser repetibles, se pueden medir y corregir: eso es calibrar.

Los aleatorios cambian cada vez: una llanta que patina en una mancha del piso, una junta entre baldosas, la cuantización del encoder. No se pueden calibrar, porque no se repiten. Lo único que podemos hacer es acotarlos con información externa: un giroscopio, una marca conocida en el piso, una cámara. Y en ambos casos, como la odometría integra, el error crece con la distancia recorrida y nunca se reinicia solo.

Errores sistemáticos¶

No description has been provided for this image
  • La odometría (roja) no ve el error: usa los mismos parámetros equivocados
  • Cada cuadrado queda girado respecto al anterior: el error de orientación se acumula

NOTAS

Aquí simulamos el caso que más confunde a los estudiantes. El robot recibe los comandos de cuatro cuadrados calculados con los parámetros medidos, y la odometría, que usa esos mismos parámetros, dibuja un cuadrado perfecto. Esa es la línea roja: el robot está convencido de que lo hizo bien.

La línea azul es lo que pasa en el piso. A la izquierda, las dos llantas difieren apenas medio por ciento entre sí, una diferencia imposible de ver a simple vista, y aun así cada lado se curva un poco y los cuadrados se van girando. A la derecha, la trocha efectiva es un 3 % mayor que la medida: cada esquina queda corta en unos 2.6°, y después de 16 esquinas el robot está unos 42° desviado.

Un 3 % en la trocha son apenas 4 mm en nuestro robot. La llanta toca el piso en una franja, no en una línea, y el punto efectivo de contacto no coincide con el centro de la llanta. Por eso la trocha que se mide con la regla nunca es la trocha efectiva.

Errores aleatorios¶

No description has been provided for this image
  • 300 recorridos idénticos de 2 m con patinaje aleatorio del 3 %
  • La nube se ensancha con la distancia: el error de orientación se convierte en error lateral

NOTAS

Ahora el error aleatorio. Simulamos 300 veces el mismo recorrido de 2 metros en línea recta, con un pequeño patinaje aleatorio en cada rueda en cada paso. Cada punto es dónde terminó el robot en uno de los recorridos, en cuatro momentos distintos del trayecto.

Observen dos cosas. La primera: el promedio sigue sobre la línea, porque el error no tiene sesgo. La segunda: la dispersión crece, y crece más rápido que la distancia. La razón es que un pequeño error de orientación al principio hace que todo el resto del recorrido vaya un poco torcido: el error angular se convierte en error lateral, y ese crece con la distancia.

Esta es la razón por la que ningún robot móvil serio navega solo con odometría. Tarde o temprano necesita una referencia externa para reiniciar el error: un giroscopio para la orientación, marcas en el piso, un láser que vea paredes conocidas. Eso es lo que veremos en las próximas semanas con percepción y localización.

Calibración del Robot¶

NOTAS

Si los errores sistemáticos se repiten, se pueden medir. La calibración consiste en hacer experimentos donde un solo parámetro domine el error, medir el resultado con algo más confiable que la odometría, en el laboratorio una regla y en el simulador una medida de la pose real, y despejar el valor efectivo del parámetro.

🎨 Prompt sugerido: "Pixel art of two engineering students kneeling on a workshop floor measuring the path of a small robot that has ONLY TWO wheels in total, one on each side of its body like a two-wheeled balancing robot, with a long tape measure and a protractor, a straight 2 meter line marked with tape and a robot spinning in place leaving circular marks, clipboard with notes nearby. 16-bit retro style, warm orange and blue palette, no text."

Calibración del Robot¶

$$r_{efectivo} = r_{medido} \times \frac{d_{real}}{2\,m} \qquad t_{efectiva} = t_{medida} \times \frac{3600°}{\alpha_{real}}$$

Primero el radio, luego la trocha: el giro depende de los dos.

NOTAS

Este es el procedimiento que van a seguir en el laboratorio, en el mismo orden. Primero miden el radio y la trocha con una regla: son el punto de partida.

Para el radio, el robot avanza 2 metros en línea recta. En línea recta la trocha no importa, porque las dos ruedas giran igual; solo importa el radio. Si el robot recorrió 1.97 m en vez de 2, el radio efectivo es un 1.5 % menor que el medido. Usamos 2 metros, y no 20 cm, para que el error sea grande y fácil de medir.

Para la trocha, el robot gira diez vueltas en el sitio. Si en vez de 3600° gira 3500°, la trocha efectiva es mayor que la medida en la misma proporción. El orden importa: el ángulo de giro depende del cociente entre el radio y la trocha, así que si calibran la trocha con el radio sin corregir, le cargan a la trocha un error que era del radio. Es el mismo procedimiento que propone la documentación de ev3_dc.

¿Basta con calibrar?¶

No description has been provided for this image
  • Calibrar $r$ y $t$ reduce el error a la mitad
  • Lo que queda: $r_R \neq r_L$. El modelo usa un solo radio para las dos ruedas

NOTAS

Estos datos son del EV3 del curso en el simulador, haciendo cuatro cuadrados seguidos. En rojo, con los valores medidos con regla: después de cuatro cuadrados el robot está a 20 cm de donde empezó. En azul, con los parámetros calibrados: el error baja a la mitad, pero no desaparece.

¿Qué queda? El modelo de TwoWheelVehicle supone que las dos ruedas tienen el mismo radio. En el robot simulado, como en el real, una llanta es un poco más grande que la otra. En la calibración del radio ya lo habrán visto: el robot recorre 2 m pero termina unos centímetros desviado hacia un lado. Ese desvío no lo corrige ningún valor de un único radio.

Hay dos caminos. Uno es calibrar un radio para cada rueda, escribiendo la propia odometría. El otro es agregar un sensor que mida directamente la orientación: el giroscopio. Los dos están en las prácticas, el primero como reto para los más avanzados.

Giroscopio: medir el giro directamente¶

Encoders (odometría) Giroscopio EV3
Qué mide giro de cada rueda giro del robot
Orientación se calcula con el radio y la trocha se integra del sensor
Le afecta el patinaje sí no
Le afectan ruedas distintas o una trocha errada sí no
Su propio error — deriva lenta (grados por minuto)
Convención antihorario positivo horario positivo ⚠️

La combinación de los dos (fusión de sensores) es mejor que cada uno por separado.

NOTAS

El giroscopio es el complemento natural de la odometría. Mide la velocidad de giro del cuerpo del robot, sin pasar por las ruedas. Si una rueda patina, si una llanta es más grande que la otra o si la trocha está mal calibrada, el giroscopio sigue midiendo el giro real.

Pero no es perfecto: el sensor mide velocidad angular y la integra para dar el ángulo, y cualquier pequeño sesgo en esa velocidad se acumula como una deriva lenta, de unos pocos grados por minuto en el EV3. Para un cuadrado de un minuto es despreciable; para un recorrido de una hora no lo es.

Un detalle que causa muchos errores: el giroscopio del EV3 mide positivo en sentido horario, visto desde el ícono rojo, y en nuestro robot el ícono mira hacia arriba. La odometría y drive_turn usan la convención matemática, antihorario positivo. Para compararlos hay que cambiar el signo. La idea de combinar dos sensores con errores de naturaleza distinta se llama fusión de sensores, y la vamos a formalizar con el filtro de Kalman en la semana 15.

Del robot real al simulador¶

En el laboratorio En Webots
Marcador en el centro del eje El robot dibuja su trayectoria en el piso
Regla y transportador ev3.medir_pose_real()
time.sleep(t) ev3.sleep(t)

NOTAS

Todas las prácticas de esta semana se pueden hacer con el robot real y en el simulador, con el mismo programa. La única línea que cambia es la importación: ev3_dc habla con el ladrillo por Bluetooth, y ev3_sim habla con el robot en Webots. Los métodos se llaman igual y reciben los mismos parámetros.

Lo que cambia es cómo se mide. En el laboratorio ponen un marcador en el centro del eje y miden con regla lo que dibujó. En el simulador, el robot también dibuja su trayectoria sobre un piso cuadriculado, y además tienen una función que da la pose verdadera: el equivalente a una regla perfecta.

Una advertencia importante: el robot simulado no tiene los parámetros que ustedes miden con la regla. Igual que el real, sus llantas efectivas son un poco distintas entre sí y su trocha efectiva no es la del centro de las llantas. Así que la calibración en el simulador no es un trámite: van a obtener correcciones parecidas a las del laboratorio.

El robot en Webots¶

No description has been provided for this image

Dos cuadrados con los parámetros medidos: el marcador muestra cómo el segundo queda girado respecto al primero.

NOTAS

Esta es una captura real del simulador. El robot hizo dos cuadrados de 50 cm con los parámetros medidos con regla, y el marcador dejó su trayectoria sobre la cuadrícula, que tiene líneas cada 10 cm y líneas gruesas cada 50 cm.

Fíjense que el segundo cuadrado está girado varios grados respecto al primero. Es exactamente el efecto de la trocha efectiva mayor que la medida que vimos en la simulación de errores sistemáticos: cada esquina queda corta y los errores se suman. Mientras tanto, la odometría del robot jura que los dos cuadrados coinciden.

En el laboratorio van a ver algo muy parecido con el robot real, con una diferencia: en el real, además, cada ejecución sale un poco distinta por el piso y la batería. En el simulador los resultados se repiten casi exactamente, lo que ayuda a aislar el efecto de cada parámetro.

Prácticas de la semana¶

# Práctica Qué se aprende
1 Cuadrados por tiempo los límites del lazo abierto
2 Cuadrados con encoder la odometría y su error
3 Calibración del radio $r_{efectivo}$ con 2 m en línea recta
4 Calibración de la trocha $t_{efectiva}$ con 10 vueltas
5 Cuadrados con giroscopio comparar y corregir la orientación
6 Cuadrados calibrados el error que queda después de calibrar

Guías: Semana 12 → EV3 Real y Semana 12 → EV3 en Webots

NOTAS

Estas son las seis prácticas, en el orden en que conviene hacerlas. Cada una ataca un problema de los que vimos hoy.

Por tiempo, el robot no usa ningún sensor, y van a ver lo difícil que es cerrar un cuadrado así. Con encoders aparece la odometría y la diferencia entre lo que el robot cree y lo que hace. Las dos calibraciones corrigen el radio y la trocha, en ese orden. Con el giroscopio comparan la orientación medida con la calculada, y tienen que escribir un giro controlado por el sensor. Y en la última repiten los cuadrados con todo calibrado para ver el error que queda.

Las guías están en el sitio del curso, en dos versiones: con el robot real y con el simulador. El proyecto de Webots se descarga desde la guía de preparación. Recuerden instalar matplotlib, porque las prácticas 5 y 6 grafican la trayectoria.

¿Qué nos llevamos hoy?¶

  1. Su robot debe recorrer un arco de 50 cm de radio hacia la izquierda. ¿Qué rueda debe girar más rápido, en qué proporción, y qué pasa si el radio que le piden es menor que $l$?

  2. Después de cuatro cuadrados, la gráfica de odometría cierra perfectamente, pero el marcador muestra cuadrados girados unos 8° entre sí. Un compañero dice que el programa de odometría tiene un error. ¿Tiene razón? ¿Qué experimento haría para saberlo?

  3. Ya calibraron el radio y la trocha, pero en 2 m en línea recta el robot sigue terminando 7 cm a la izquierda. ¿Qué parámetro falta, y qué harían para corregirlo sin cambiar las llantas?

NOTAS

Para cerrar, trabajen en parejas, sin mirar las diapositivas anteriores, unos dos minutos por pregunta. No son preguntas de definición: son situaciones que les van a pasar en el laboratorio.

Pregunta 1 (cinemática). Queremos que lleguen a que la rueda de afuera, la derecha, gira más rápido, y que las velocidades están en la proporción de los radios de sus arcos: $(R + l)/(R - l)$, con $R = 0.5$ y $l = 0.07$, da 1.32. Si el radio pedido es menor que $l$, el ICR queda entre las dos ruedas y la rueda izquierda tiene que girar hacia atrás; con $R = l$ se detiene. Si no llegan a esto, retomen la diapositiva del radio instantáneo de curvatura.

Pregunta 2 (odometría). El compañero no tiene razón: la odometría es coherente con los parámetros que le dieron; el problema son los parámetros. Un cuadrado que se gira siempre en el mismo sentido es un error sistemático, y el sospechoso principal es la trocha: los giros quedan cortos o largos siempre igual. El experimento es la calibración de las 10 vueltas. Si dudan, vuelvan a la diapositiva de errores sistemáticos.

Pregunta 3 (errores y calibración). Lo que falta es la diferencia entre el radio de la rueda izquierda y el de la derecha: el modelo usa un solo radio y no la puede representar. Se puede corregir calibrando un radio por rueda con ese mismo desvío lateral, o midiendo la orientación con el giroscopio y corrigiendo el rumbo mientras avanza. Retomen la diapositiva de "¿Basta con calibrar?". Con esto cerramos la teoría y pasamos al laboratorio.