Este proyecto implementa un sistema de control para el robot móvil e-puck2, utilizando un modelo inspirado en los vehículos de Braitenberg para la interacción con obstáculos, junto con un seguimiento de posición y orientación basado en odometría. El robot se controla mediante una conexión serial desde un ordenador y ofrece funcionalidades de autonomía básica, pausa, y apagado a través de pulsaciones del teclado.
- Robot móvil e-puck2
- Ordenador con un puerto serial
- Conexión USB entre el robot y el ordenador
- Python 3.7 o superior
- Librerías necesarias:
pyserial
keyboard
math
time
struct
Instale las dependencias ejecutando:
pip install pyserial keyboard
El programa controla el robot e-puck2 de forma autónoma, basándose en los estímulos captados por sus sensores de proximidad. Las principales funcionalidades son:
- Movimiento Autónomo: El robot ajusta las velocidades de sus ruedas para evitar obstáculos utilizando un modelo de Braitenberg.
- Odometría: El robot calcula su posición
(x, y)
y orientación en el plano mediante los desplazamientos acumulados de sus ruedas. - Control por Teclado:
- Pausa/Resume (
s
): Detiene o reanuda la ejecución. - Apagado (
t
): Finaliza la ejecución y detiene el robot.
- Pausa/Resume (
- Gestión de Sensores: Lee valores de proximidad de los 8 sensores del robot para determinar su entorno.
El código se organiza principalmente en la clase Epuck2Robot
, que encapsula toda la lógica del control. Sus principales componentes son:
Se establece la comunicación serial con el robot, se preparan comandos para transmitir datos y se configuran variables para controlar el movimiento y la odometría.
El método set_motor_speed
ajusta las velocidades de las ruedas. Estas velocidades se envían al robot en formato binario mediante send_command
.
El método read_proximity_sensors
solicita al robot los valores de sus sensores de proximidad. Si no se reciben datos suficientes debido a errores de comunicación, se devuelven valores predeterminados.
El método compute_braitenberg_speeds
calcula las velocidades de las ruedas usando una matriz de coeficientes predefinidos (BRAITENBERG_COEFFICIENTS
) que define cómo los sensores afectan el movimiento.
El método compute_odometry
actualiza las coordenadas (x, y)
y la orientación del robot en el plano. Esto se realiza calculando:
- Distancias recorridas por las ruedas.
- Desplazamiento lineal promedio.
- Cambio de orientación angular.
La orientación se normaliza en el rango [-π, π]
.
El método run
implementa el ciclo principal del robot. Mientras el robot está activo:
- Lee los valores de los sensores.
- Calcula las velocidades de las ruedas.
- Actualiza las posiciones de las ruedas y la odometría.
- Detecta pulsaciones del teclado para pausar o apagar el robot.
- Respeta un intervalo de tiempo definido entre iteraciones para garantizar una ejecución estable.
El método cleanup
detiene el robot y cierra la conexión serial de manera segura.
El comportamiento del robot está inspirado en los vehículos de Braitenberg. Cada sensor de proximidad influye en las velocidades de las ruedas según una matriz de coeficientes:
Sensor | Coeficiente Rueda Izquierda | Coeficiente Rueda Derecha |
---|---|---|
1 | 0.942 | -0.22 |
2 | 0.63 | -0.1 |
3 | 0.5 | -0.06 |
... | ... | ... |
Este modelo permite que el robot gire o acelere según los estímulos detectados.
El cálculo de posiciones se basa en:
- Radio de las ruedas (
WHEEL_RADIUS
) - Distancia entre ruedas (
AXLE_LENGTH
)
La posición y orientación se actualizan mediante las siguientes fórmulas: