Ir al contenido

Preparación del simulador

Las prácticas con el EV3 real también se pueden hacer en Webots con un modelo del mismo robot: ladrillo EV3, dos motores grandes, rueda loca de bola y el giroscopio en el puerto 1. El modelo sale directamente del diseño en BrickLink Studio.

  1. Webots R2025a.

  2. Python 3 con matplotlib:

    Ventana de terminal
    pip install matplotlib

    Webots usa el comando python del sistema. Si tiene varias versiones de Python, elija la correcta en Tools → Preferences → Python command.

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

CarpetaContenido
worlds/un mundo por práctica (cuadrado_tiempo.wbt, cuadrado_encoder.wbt, …) y ev3_differential.wbt para manejar el robot con las flechas
controllers/el programa en Python de cada práctica; es el archivo que usted modifica
python/ev3_sim.pyversión simulada de la librería ev3_dc
protos/el modelo del robot (Ev3DifferentialMicro.proto) y sus mallas

Para hacer una práctica, abra el mundo correspondiente en Webots (File → Open World). El programa se edita con el editor de Webots o con VS Code. Después de guardar un cambio, reinicie la simulación con Ctrl+Shift+T y ejecútela con ▶.

Los programas son casi los mismos que en el robot real. Solo cambia la importación:

import ev3_dc as ev3 # robot real
import ev3_sim as ev3 # simulador
En el laboratorioEn el simulador
time.sleep(t)ev3.sleep(t) (time.sleep no avanza la simulación)
Marcador en el centro de rotaciónEl robot dibuja su trayectoria en el piso (nodo Pen llamado marcador)
Regla y transportadorev3.medir_pose_real() devuelve la pose verdadera: x, y, o, distancia y giro_total
Baldosas del pisoPiso cuadriculado: líneas cada 10 cm y líneas gruesas cada 50 cm
protocol, host (MAC)Se aceptan pero se ignoran
Motores en los puertos A (izquierdo) y D (derecho), giroscopio en el puerto 1Igual

El robot parte del punto (−1,−1)(-1, -1) del piso, mirando hacia +x+x. medir_pose_real() da la posición medida desde ese punto de partida, con los mismos ejes que la odometría: xx hacia adelante y yy a la izquierda.

Con una regla sobre el modelo se miden estos valores. Son los que hay que usar al comenzar:

ParámetroValor medido
Radio de la rueda (llanta de 30.4 mm)rmedido=0.0152 mr_{medido} = 0.0152\,m
Distancia entre ruedas (trocha)tmedida=0.1400 mt_{medida} = 0.1400\,m

Igual que en un robot real, los valores efectivos del robot simulado no son exactamente los medidos: las llantas no son idénticas y el punto de contacto no está donde uno cree. Por eso las calibraciones tienen sentido también en el simulador. No busque los valores en el archivo del mundo; descúbralos calibrando.

El giroscopio simulado se comporta como el EV3: entrega enteros, mide positivo en sentido horario y tiene algo de ruido y deriva.

vehicle = ev3.TwoWheelVehicle(radius_wheel, tread, speed=20, tracking_callback=f)
vehicle.drive_straight(0.5).start(thread=False) # avanzar 0.5 m
vehicle.drive_turn(90, 0.0).start(thread=False) # girar 90° a la izquierda en el sitio
(vehicle.drive_straight(0.5) + vehicle.drive_turn(90, 0.0)).start(thread=False)
vehicle.move(20, 0); ev3.sleep(2.0); vehicle.stop() # movimiento por tiempo
vehicle.position # odometría: x, y [m], o [°]
gyro = ev3.Gyro(ev3.PORT_1, ev3_obj=vehicle)
gyro.state.angle, gyro.state.rate # °, °/s (horario positivo)
ev3.medir_pose_real() # "regla": pose verdadera