Paso 7: Software: lado de la PC
Puesto que la CE está actuando como el cerebro de este proyecto, la mayoría de las interacciones con los Phidgets se encargará de por él. Sin embargo, a menos que usted está preponiendo el robot autónomas, algún tipo de conexión a un PC externo debe hacerse por lo que se puede controlar. En última instancia, esto significa que tendremos un programa ejecutándose en el equipo que toma la entrada del usuario y un programa en el SBC que controla los controladores de motor etc.... Comunicación entre los dos programas se tratarán de utilizar el Diccionario Phidget.
La PC encarga de tomar la entrada del usuario y traducirla a una serie de velocidades de motor deseados, mostrando cierta información y controles y ver la webcam de la alimentación. Ya que la rueda de mecanum permite debe ser controlable en 3 ejes independientes (x, y y una rotación) el método más popular de control de este tipo de robot es un estilo de joystick doble con un joystick de control x y y movimiento y el otro joystick control de rotación. Terminamos con un joystick solo que tenía un eje adicional construido en él, pero en la práctica todo lo que le permite controlar la posición en 3 canales diferentes funcionaría. El joystick que se conecta directamente a los puertos de entrada analógicos en un 1018, esto es bueno ya que facilita el código para la toma de entrada de la palanca de mando.
Tomar entrada
Esta función recopila datos de cada canal de la palanca de mando cada vez que hay un cambio en uno de los canales y luego envía a una función que convierte la posición de la palanca de mando en una magnitud, dirección (x e y del vector) y una rotación (el eje final de la palanca de mando). La matemática en cada valor del sensor es centrar alrededor de 0 en lugar de 500 (o 2000 en el caso de RawValue). El canal 3 de nuestro joystick ha gama más limitada que las otras dos, por lo tanto, sólo dividimos por 1500, no 2000.
Convertir entrada
La función que convierte estos datos en algo utilizable se ve así:
Calcular la velocidad de la rueda
Una vez que tenemos una dirección, el rumbo y la rotación es necesario calcular la cantidad de energía para dar cada motor para conseguir el movimiento deseado. En un vehículo normal sería bastante sencillo pero con rueda de mecanum hay un poco de trabajo involucrados.
La primera cosa que podría parecer extraña aquí es la magnitud = magnitud * Math.Sqrt(2.0); línea. Se trata de un artefacto de cómo función de palancas de mando. Para entender mejor, echar un vistazo en el siguiente diagrama:
Puesto que las palancas de mando tienen un rango circular de movimiento que tenga el problema será sólo alcance un máximo X o Y valor cuando estés en el eje X o Y. Así que si estás en cualquier rumbo distinto de 0, 90, 180 o 270 ° usted nunca será capaz de viajar a toda velocidad. Escalando la magnitud por la raíz cuadrada de 2 puede ser que llegar a toda velocidad en todos los títulos, y puesto que las velocidades de rueda todos Haz normalizadas después usted no tiene que preocuparse por exceder la velocidad máxima que pueden alcanzar los motores.
Cuando calcular la dirección y la velocidad para girar las ruedas en basada en la palanca de mando de entrada hay dos maneras comunes de representar un punto en un plano 2d: coordenadas cartesianas y coordenadas polares. Para generalizar nuestro código a cualquier controlador hemos usado polar, aunque el algoritmo se puede quizás más fácilmente entender si en cambio observamos en el más tradicional sistema de coordenadas cartesianas. Vamos a usar otra vez el caso de palancas de mando doble se utiliza para controlar el robot:
Mediante la suma de vectores de fuerza para cada una de las principales indicaciones podemos obtener un vector resultante que será de la magnitud correcta y dirección. Observe que el diagrama sólo muestra las indicaciones para valores positivos de X, Y y Z (MovementX, MovementY y RotationX). Para valores negativos que las flechas revertirse simplemente, las matemáticas mantiene igual. Lo último que hacemos es normalizar los valores, por lo que son de una magnitud de escala 0 y 1, por la velocidad máxima del motor para que sean un porcentaje proporcional de velocidad máxima y agregue el modificador de dirección:
La frontLeftDir, frontRightDir etc.... los modificadores se utilizan para invertir los valores de los motores que están orientados en la dirección opuesta. Recuerda que dos de los motores se enfrentan a una forma y los otros dos se enfrentan a otro lado. Esto significa que necesitamos invertir los valores ya que los motores se parecen trabajar en reversa (piénsese en atornillar un perno en desde arriba y abajo el perno).
Código completo
Puede descargar el proyecto de Visual Studio completo aquí:
Este proyecto incluye código para interfaz con la webcam. Usted puede aprender más sobre la entretela con webcams en la Cartilla de Webcam USB.