Ir al contenido

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.

  1. Webots R2025a.

  2. Python 3 con las librerías de las prácticas:

    Ventana de terminal
    pip install opencv-contrib-python numpy scipy matplotlib thread_task keyboard

    Webots usa el comando python del sistema: debe ser el mismo Python donde instaló estas librerías (Tools → Preferences → Python command).

  3. El proyecto del simulador: ev3-webots-camara.zip. Descomprímalo en cualquier carpeta.

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 laboratorioEn el simulador
La aplicación del celular transmite el videoEl simulador transmite la cámara del robot en http://127.0.0.1:8080/video
El programa habla con el EV3 por BluetoothEl programa habla con el robot simulado por la red local, con ev3_sim.py
Se empuja el robot con la manoSin programa conectado, el robot se maneja con las flechas (haga clic en la vista 3D primero)
Regla y transportadorev3.medir_pose_real()

Sus programas corren afuera de Webots, en la terminal o en VS Code, igual que con el robot real.

En C01, C02, C03, C06 y C07 llene el bloque del inicio así:

IP = '127.0.0.1'
PUERTO = 8080
IPHONE = False

No 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.

  1. Copie python/ev3_sim.py del proyecto en la misma carpeta de su programa.

  2. Cambie la importación:

    import ev3_dc as ev3 # robot real
    import ev3_sim as ev3 # simulador
  3. Use en RADIUS_WHEEL y TREAD_DISTANCE las medidas del robot simulado, tomadas con regla:

    ParámetroValor medido
    Radio de la rueda0.0152 m
    Trocha (distancia completa entre ruedas)0.1400 m

    Igual 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.

  4. La MAC y el protocol se aceptan pero se ignoran. time.sleep, thread_task.Periodic y 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.

  • No hay conexión con el simulador: la simulación no está corriendo. Ejecútela con ▶.
  • El puerto 8080 está ocupado en 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.