RoverC Pro controlado con un joysitck usando MicroPython.
El sistema configura una red WiFi con SSID roverc.pro
y contraseña roverc.pro
.
Después, se lanza un socket UDP escuchando en el puerto 1234
y procesando comandos
de 7 bytes.
El dato que se envía tiene el siguiente formato:
Count (4 bytes) |
X coord (signed byte) |
Y coord (signed byte) |
Button pressed (1 byte) |
---|
El valor Count
se usa para ignorar posibles paquetes que lleguen desordenados.
El joycon está controlado con MicroPython y un ESP32 Nano. El código lee periódicamente
los valores del ADC (cada
En segundo plano, una tarea comprueba continuamente si todavía se está conectado al RoverC.Pro. En caso contrario, el bucle principal se detiene hasta que se recupera la conexión con el vehículo.
El conexionado es el siguiente:
Joystick | GND |
+5V |
VRx |
VRy |
SW |
---|---|---|---|---|---|
ESP32 Nano | GND |
3V3 |
A0 |
A1 |
D12 |
NOTA: aunque la conexión del joycon pone
+5V
, funciona correctamente con3V3
.
-
La detección del eje
$Y$ está invertida. No funciona correctamente en según qué posiciones. -
Cuando el RoverC Pro se desconecta, los paquetes UDP se acumulan en la interfaz de red hardware, causando
ENOMEM
.
El joystick proporciona valores de coordenadas
El vehículo M5Stack sobre el que se han realizado las pruebas cuenta con cuatro
ruedas:
El cálculo de las rotaciones de cada motor viene determinado por:
donde:
-
$N$ es el factor de normalización. -
$x$ es la coordenada$X$ recibida desde el joystick, con$x \in [-127, 127]$ . -
$y$ es la coordenada$Y$ recibida desde el joystick, con$y \in [-127, 127]$ .
El factor de normalización se calcula teniendo en cuenta
Para calcularlo, el proceso es muy simple:
- Se obtiene
$c'$ que referencia a la coordenada más próxima al límite, tal que:
- A partir de
$c'$ se obtiene el factor de normalización$k$ . Como el joystick produce coordenadas$X, Y$ en un cuadrado el factor es común a ambos ejes:
- Se puede obtener por consiguiente tanto
$r$ y$r_{max}$ , tal que:
- Finalmente, se define el factor de normalización
$N$ como$r$ sobre$r_{max}$ :
El RoverC Pro interpreta los giros de rueda de la siguiente manera:
-
$v \in \left[0, 128\right)$ ,$v$ representa una aceleración positiva en el eje. -
$v \in \left(256, 128\right]$ ,$v$ representa una aceleración negativa en el eje.
Por ende, para una coordenada