Bienvenido: Ingresar
location: Robotica / RoMAARobot / RoMAAControlJoystick

Programas de Control mediante Joystick

Objetivos

A fin de disponer de un modo simple de probar la plataforma móvil se desarrollaron diferentes programas para controlar el vehículo mediante un joystick comandando directamente las velocidades de ambos motores mediante los ejes (controles) del joystick.

Desarrollo

Los programas desarrollados son los siguientes:

  1. Control. PWM a 14KHz y 8-bits, UART 9600bps 8N1. Primer programa de control con 8-bits de resolución del PWM.

  2. Control. PWM a 20KHz y 12-bits, UART 38400bps 8N1. Siminar al anterior con modificación de la señal del PWM.

  3. Control y lectura de encoders. Se agregó decodificación de encoders y petición y reset de cuenta desde la PC.

  4. Control lazo cerrado con trama ASCII y lectura de encoders. Se modificó la trama para enviar una referencia signada y cerrar el lazo mediante un control Proporcional (Kp).

El código fuente de los programas se encuentran en =//champaqui/DesarrollosCIII/plataforma_movil/control_joystick/= (=$ctrl_joy)

Se muestran a continuación las diferentes versiones en la que ha ido evolucionando el software de control de la plataforma móvil.

Software PC

Del lado de la PC se necesita poder manejar el puerto serie para la comunicación con el uC ARM y el Joystick USB.

Para el Joystick USB se utiliza la librería "Joystick Wrapper Library" libjsw2 (libjsw-dev: headers files). Para gnome existe la aplicación "jscalibrator" que hace uso de libjsw para calibrar el Joystick que genera un archivo de calibración generalmente en ~/.joystick.

En en caso del puerto serial se uso en algunos programas el manejo director de la interfaz termios (termios.h) en Linux, que es compatible con cualquier sistema POSIX [1]; y en otros programas la librería LibSerial [2] (la cual hace uso de termios) que es una colección de clases C++ tipo objetos iostream.

1) Tracción - PWM con 8 bits

Se envian comandos de velocidad a los motores Izquierdo y Derecho con una referencia para el PWM de 8-bits de ancho.

ARM

El programa configura un PWM para cada llaveH/motor con una frecuencia de 14KHz y 0-255 de cuenta (8-bits), donde un valor de cuenta de 128 corresponde a un ciclo de trabajo del PWM de 50%. Se utiliza la UART del uC a 9600bps en configuración 8N1.

La trama recibida tiene el siguiente formato:

0xFF

motor speed 1

motor speed 2

El código del programa para el ARM se encuentra en =$ctrl_joy/ARM/pwm_8bits/=

PC

==- joyLR8b:== Control motor izq. y der. con cada eje del joystick

==- joySteer8b:== Control de velocidad lineal y dirección con cada eje del joystick

El código fuente y binario se encuentra en =$ctrl_joy/PC/pwm_8bits/=

Para compilar el programa se debe ejecutar:

gcc -o joyLR8b joyLR8b.c -ljsw

2) Tracción - PWM con 12 bits

ARM

Configura el PWM para trabajar con 12-bits de ancho con una frecuencia de 20KHz y la UART a 38400bps 8N1. Los valores de referencia del PWM van de 0-3000 con 1500 para un ciclo de trabajo de 50%. Se utiliza la UART del uC a 38400bps en configuración 8N1.

La trama recibida tiene el siguiente formato:

byte1

byte2

byte3

byte4

byte5

0xFF

00xxxxxx

00xxxxxx

00xxxxxx

00xxxxxx

donde los 12 bits de las velocidades de ambos motores se envian de a 6 bits.

El código del programa para el ARM se encuentra en =$ctrl_joy/ARM/pwm_12bits/=

PC

==- joyLR12b:== Control motor izq. y der. con cada eje del joystick

==- joySteer12b:== Control de velocidad lineal y dirección con cada eje del joystick

El código fuente y binario se encuentra en =$ctrl_joy/PC/pwm_12bits/=

Para compilar el programa se debe ejecutar:

gcc -o joyLR12b joyLR12b.c -ljsw

3) Tracción - PWM con 12 bits y lectura de encoders

Se envian comandos de velocidad a los motores Izquierdo y Derecho con una referencia para el PWM de 12-bits de ancho.

ARM

Configura el PWM para trabajar con 12-bits de ancho con una frecuencia de 20KHz y la UART a 38400bps 8N1.

La trama recibida tiene el siguiente formato:

byte1

byte2

byte3

byte4

byte5

0xFF

abxxxxxx

00xxxxxx

00xxxxxx

00xxxxxx

Los dos bits mas significativos del segundo byte enviado, indica el comando, los cuales son:

Trama de seteo de velocidad

Trama de lectura de encoders

Trama de reset contadores de encoders

El código del programa para el ARM se encuentra en =$ctrl_joy/ARM/pwm_enc/=

PC

==- joyLR12b_enc:== Control motor izq. y der. con cada eje del joystick y lectura/reset de encoders

El código fuente y binario se encuentra en =$ctrl_joy/PC/pwm_enc/=

Para compilar el programa se debe ejecutar:

g++ -o joyLR12b_enc joyLR12b_enc.cpp -ljsw -lserial

4) Tracción y cuenta de encoders a lazo cerrado (trama ASCII)

ARM

La trama serie es la siguiente:

Para setear las velocidades de los motores la trama queda

por ejemplo : "*s+010-020".

El código del programa para el ARM se encuentra en =$ctrl_joy/ARM/pwm_lazo_irq_enc/=

PC

==- joy_enc_ascii:== Control motor izq. y der. y lectura/reset de la cuenta de los encoders

El código fuente y binario se encuentra en =$ctrl_joy/PC/pwm_lazo_irq_enc/=

Para compilar el programa se debe ejecutar:

g++ -o joy_enc_ascii joy_enc_ascii.cpp -ljsw -lserial

Uso del programa

$ ./joy_enc_ascii -h
Usage: ./joy_enc_ascii [options <arg>] ...
options: 
         -t tty_dev     : serial port device (default: /dev/ttyS0)
         -b baudrate    : serial port baudrate (default:  38400)
                          9600 - 19200 - 38400 - 57600 - 115200
         -j joy_dev     : joystick device (default: /dev/input/js0)
         -c calib_file  : calibration file (default: ~/.joystick)
         -p info_level  : print information level, info_level: 1, 2, 3 (default: 3)
                          1: all debug info - 2: speed info - 3: encoders info
         -h             : this help

Referencias

[1] Serial Programming Guide for POSIX Operating Systems

[2] LibSerial

None: Robotica/RoMAARobot/RoMAAControlJoystick (última edición 2011-07-13 04:00:37 efectuada por GonzaloPerezPaina)