flowchart TD
A[Inicio] --> C[Inicializar Robot]
C -->|e-puck|F[Inicializar Dispositivos]
F --> G[Habilitar Cámara, Acelerómetro, Motores, Sensores]
G --> H[Bucle Principal: robot step con time_step]
H -->|No es -1| I[Leer Sensores de Distancia]
I --> J{Verificar step_count % 30 == 0}
J -->|Sí| K[Registrar Acelerómetro, Odometría, Sensores]
J -->|No| L[Inicializar Velocidades a BASE_SPEED]
K --> L
L --> M[Aplicar Algoritmo Difuso]
M --> N[Por cada sensor: Calcular valor difuso, Actualizar velocidades]
N --> O[Aplicar Reglas Difusas]
O --> P[Regla 1: Garantizar Movimiento Adelante]
P --> Q[Regla 2: Suavizar Giros Extremos]
Q --> R[Regla 3: Limitar Velocidades]
R --> S{Verificar step_count % 30 == 0}
S -->|Sí| T[Registrar Velocidades y Comportamiento]
S -->|No| U[Establecer Velocidades de Motores]
T --> U
U --> H
H -->|Es -1| V[Fin]
Actividad 1: Aplicación de la IA a la Robótica
Descripción Detallada del controlador para el robot
Este documento describe el funcionamiento de un algoritmo de control para un robot (e-puck) de Webots, diseñado para la esquivar obstáculos mediante una combinación de sensores de distancia y lógica difusa. El diagrama de flujo a continuación ilustra el proceso completo, desde la inicialización hasta la toma de decisiones en el bucle principal.
Diagrama de Flujo del Algoritmo
Descripción Paso a Paso del Algoritmo
1. Inicialización y Preparación del Sistema
Inicialización y Timesteps: El código verifica el modelo del robot (e-puck o e-puck2) para ajustar los
time_steps, que son los intervalos de tiempo en los que el simulador avanza.Configuración de Motores: Los motores de las ruedas izquierda y derecha se configuran para un control de velocidad, permitiendo un movimiento continuo y controlado.
Sensores de Distancia: Se habilitan ocho sensores de distancia (
ps0aps7) que rodean la parte frontal del robot. Estos son el principal “sentido” del robot para la detección de obstáculos.Otros Sensores: El robot también usa una cámara, un acelerómetro y sensores de posición en las ruedas. Estos se utilizan principalmente para el registro de datos (como la odometría) y para monitorear el estado del robot.
Inicio (
A): El proceso se pone en marcha.Inicializar Robot (
B): El software del robot se prepara para la operación, cargando su modelo en el simulador.Verificar Modelo del Robot (
C): Se comprueba el tipo de robot en uso.Configurar Parámetros (
E): Si el robot es un e-puck, se configurantime_stepen256msycamera_time_stepen1024ms.Inicializar Dispositivos (
F): Los sensores y actuadores del robot son inicializados.Habilitar Dispositivos (
G): Se activan dispositivos clave como la cámara, el acelerómetro, los motores y los sensores de distancia.
2. Bucle de Control Principal
El corazón del controlador es un bucle principal que se ejecuta continuamente. En cada paso de tiempo, el robot toma decisiones de movimiento basadas en su entorno.
Lógica de Funcionamiento:
- Velocidad Base: El robot comienza con una velocidad base (
BASE_SPEED = 3.5), lo que le da un movimiento constante hacia adelante. - Lectura de Sensores: El robot lee los valores de sus ocho sensores de distancia. A mayor valor, más cerca está un obstáculo.
- Fuzzificación Simple: En lugar de usar los valores crudos de los sensores, se aplica un proceso de fuzzificación. El valor de cada sensor se normaliza y se invierte, y luego se multiplica por un factor de sensibilidad (
OBSTACLE_SENSITIVITY). Esto convierte la distancia del obstáculo en una influencia de movimiento (sensor_fuzzy), donde un obstáculo más cercano tiene una mayor influencia. - Aplicación de Coeficientes Braitenberg: Se utiliza una matriz de coeficientes (
fuzzy_braitenberg_coefficients) para combinar los valores fuzzificados con las velocidades de las ruedas. La lógica de Braitenberg establece que los sensores de un lado del robot afectan la velocidad de los motores del lado opuesto. Esto provoca un giro que aleja al robot del obstáculo. Por ejemplo, un obstáculo en el lado izquierdo hace que la rueda derecha acelere y la izquierda desacelere.
- Bucle Principal (
H): El programa entra en un ciclo continuo que avanza la simulación entime_steps. - Leer Sensores de Distancia (
I): En cada iteración, el robot lee los valores de sus sensores para detectar obstáculos. - Verificar Contador de Pasos (
J): Se comprueba si elstep_countes divisible por 30 para ejecutar acciones de registro a intervalos específicos.- Si es múltiplo (
K): Se registran datos del acelerómetro, odometría y sensores de proximidad. - Si no lo es (
L): Las velocidades de los motores se restablecen a una velocidad base,BASE_SPEED.
- Si es múltiplo (
3. Lógica de Control: Algoritmo Difuso-Braitenberg
- Aplicar Algoritmo (
M): Se ejecuta el algoritmo Difuso-Braitenberg para controlar el movimiento. - Calcular Valor Difuso (
N): Por cada sensor, se calcula un “valor difuso” que representa el grado de proximidad. - Aplicar Reglas Difusas (
O): Un conjunto de reglas de lógica difusa se aplican para determinar la respuesta de los motores.- Regla 1 (
P): Asegura que el robot se mueva hacia adelante. - Regla 2 (
Q): Suaviza giros bruscos. - Regla 3 (
R): Limita las velocidades máximas para mantener el control.
- Regla 1 (
4. Ejecución y Finalización
- Verificar Contador de Pasos (
S): Se repite la verificación delstep_count.- Si es múltiplo (
T): Se registran las velocidades y el comportamiento final. - Si no lo es (
U): Las velocidades de los motores se actualizan con los valores calculados por el algoritmo.
- Si es múltiplo (
- Establecer Velocidades (
U–>H): El flujo vuelve al inicio del bucle. - Fin (
V): El programa termina cuando la simulación concluye.