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.
Requisitos
Sección titulada «Requisitos»-
Python 3 con
matplotlib:Ventana de terminal pip install matplotlibWebots usa el comando
pythondel sistema. Si tiene varias versiones de Python, elija la correcta en Tools → Preferences → Python command. -
El proyecto del simulador: ev3-webots.zip. Descomprímalo en cualquier carpeta.
Contenido del proyecto
Sección titulada «Contenido del proyecto»| Carpeta | Contenido |
|---|---|
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.py | versió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 ▶.
Del robot real al simulador
Sección titulada «Del robot real al simulador»Los programas son casi los mismos que en el robot real. Solo cambia la importación:
import ev3_dc as ev3 # robot realimport ev3_sim as ev3 # simulador| En el laboratorio | En el simulador |
|---|---|
time.sleep(t) | ev3.sleep(t) (time.sleep no avanza la simulación) |
| Marcador en el centro de rotación | El robot dibuja su trayectoria en el piso (nodo Pen llamado marcador) |
| Regla y transportador | ev3.medir_pose_real() devuelve la pose verdadera: x, y, o, distancia y giro_total |
| Baldosas del piso | Piso 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 1 | Igual |
El robot parte del punto del piso, mirando hacia . medir_pose_real() da la posición medida desde ese punto de partida, con los mismos ejes que la odometría: hacia adelante y a la izquierda.
Medidas del robot
Sección titulada «Medidas del robot»Con una regla sobre el modelo se miden estos valores. Son los que hay que usar al comenzar:
| Parámetro | Valor medido |
|---|---|
| Radio de la rueda (llanta de 30.4 mm) | |
| Distancia entre ruedas (trocha) |
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.
Referencia rápida de ev3_sim
Sección titulada «Referencia rápida de ev3_sim»vehicle = ev3.TwoWheelVehicle(radius_wheel, tread, speed=20, tracking_callback=f)vehicle.drive_straight(0.5).start(thread=False) # avanzar 0.5 mvehicle.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 tiempovehicle.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