Simulador: EV3 con cámara en Webots
Si no tiene el robot o el celular a mano, todas las prácticas de esta semana se pueden hacer en Webots con el mismo robot de la semana 12, ahora con un celular en un soporte que mira hacia el piso. El piso tiene una pista de cinta negra de 1 cm en la mitad de arriba y ocho marcadores ArUco en la mitad de abajo.
Requisitos
Sección titulada «Requisitos»-
Python 3 con las librerías de las prácticas:
Ventana de terminal pip install opencv-contrib-python numpy scipy matplotlib thread_task keyboardWebots usa el comando
pythondel sistema: debe ser el mismo Python donde instaló estas librerías (Tools → Preferences → Python command). -
El proyecto del simulador: ev3-webots-camara.zip. Descomprímalo en cualquier carpeta.
Cómo funciona
Sección titulada «Cómo funciona»Abra worlds/ev3_camara.wbt en Webots (File → Open World); para el ejercicio de la práctica 5 use worlds/ejercicio_cuadrado.wbt, donde el robot parte sobre el marcador 1 y ejecute la simulación con ▶ (tiempo real, no el modo rápido). Mientras corre, el simulador hace lo mismo que el celular y el ladrillo EV3:
| En el laboratorio | En el simulador |
|---|---|
| La aplicación del celular transmite el video | El simulador transmite la cámara del robot en http://127.0.0.1:8080/video |
| El programa habla con el EV3 por Bluetooth | El programa habla con el robot simulado por la red local, con ev3_sim.py |
| Se empuja el robot con la mano | Sin programa conectado, el robot se maneja con las flechas (haga clic en la vista 3D primero) |
| Regla y transportador | ev3.medir_pose_real() |
Sus programas corren afuera de Webots, en la terminal o en VS Code, igual que con el robot real.
Cámara (prácticas 1, 2 y 4)
Sección titulada «Cámara (prácticas 1, 2 y 4)»En C01, C02, C03, C06 y C07 llene el bloque del inicio así:
IP = '127.0.0.1'PUERTO = 8080IPHONE = FalseNo hay que cambiar nada más: la imagen llega horizontal, de 640 × 480, y al rotarla 90° en sentido horario el frente del robot queda arriba, como con el celular.
El piso mide 2 × 2 m y tiene una cuadrícula con líneas cada 10 cm y líneas más marcadas cada 50 cm, que lo dividen en 16 cuadros grandes.
- Mitad de arriba: la pista, un óvalo con rectas de 70 cm y curvas de 35 cm de radio. El robot parte sobre la recta inferior, con la cinta en el centro de la imagen.
- Mitad de abajo: ocho marcadores ArUco del diccionario
DICT_4X4_50, de 3 cm de lado, uno en el centro de cada cuadro grande. En la fila más cercana a la pista están los IDs 27, 8, 9 y 47, de izquierda a derecha; en la fila del fondo, los IDs 0, 1, 2 y 3. Maneje el robot con las flechas hasta ponerlos frente a la cámara.
En C07 use el tamaño de estos marcadores, MARKER_SIZE = 0.03, y en ARUCO_ID el ID que vaya a medir.
EV3 (prácticas 3 y 5)
Sección titulada «EV3 (prácticas 3 y 5)»-
Copie
python/ev3_sim.pydel proyecto en la misma carpeta de su programa. -
Cambie la importación:
import ev3_dc as ev3 # robot realimport ev3_sim as ev3 # simulador -
Use en
RADIUS_WHEELyTREAD_DISTANCElas medidas del robot simulado, tomadas con regla:Parámetro Valor medido Radio de la rueda 0.0152mTrocha (distancia completa entre ruedas) 0.1400mIgual que en la semana 12, los valores efectivos del robot simulado no son exactamente los medidos: si calibró el robot simulado en la semana 12, use esos valores.
-
La
MACy elprotocolse aceptan pero se ignoran.time.sleep,thread_task.Periodicy los hilos funcionan normalmente, porque la simulación corre en tiempo real.
Si su programa se cierra sin detener el robot, el simulador lo detiene solo al segundo y vuelve a quedar en manos del teclado.
Problemas frecuentes
Sección titulada «Problemas frecuentes»No hay conexión con el simulador: la simulación no está corriendo. Ejecútela con ▶.El puerto 8080 está ocupadoen la consola de Webots: hay otra simulación abierta o algún programa usando ese puerto. Ciérrelo y reinicie la simulación con Ctrl+Shift+T.- El robot reacciona lento o la imagen va a saltos: la simulación no alcanza el tiempo real. Revise el indicador de velocidad en la barra de Webots, cierre otros programas y reduzca el tamaño de la ventana 3D.