Código de controlador personalizado en VEXcode V5

El uso del controlador puede facilitar la conducción y el movimiento del robot para completar una tarea. Sin embargo, existen limitaciones para usar el programa Drive, y dependiendo de la construcción de su robot o la tarea en cuestión, es posible que desee diferentes controles. Codificar el controlador le permite optimizar el controlador para que se adapte mejor a su robot y a la tarea en cuestión. Hay varias formas de codificar el controlador en VEXcode V5. Cada uno tiene sus ventajas y limitaciones, y algunos métodos son más adecuados para ciertas situaciones dependiendo del resultado deseado.

Este artículo le guiará a través de tres opciones diferentes para la codificación personalizada del controlador en VEXcode V5. Cada método se describirá con sus ventajas, limitaciones y un caso de uso de ejemplo para ayudarlo a guiarlo al elegir un método. A los efectos de este artículo, todos los ejemplos de código que se muestran se crearon para el Clawbot. Sin embargo, los mismos conceptos podrían aplicarse a muchas otras compilaciones que se encuentran enbuilds.vex.com y compilaciones personalizadas.

Opción 1: Asignación de botones en la configuración del dispositivo

Esta opción es excelente cuando está utilizando una compilación estándar, como un Speedbot o Clawbot, y desea comenzar a funcionar rápidamente.

Esta opción le permite asignar motores, un tren motriz o grupos de motores a los botones del Controlador en la Configuración del dispositivo. Para obtener más información sobre cómo asignar botones al controlador en la configuración del dispositivo, consulte este artículo.

Menú Dispositivos VEXcode V5 con las opciones del controlador mostradas. El diagrama de controles de botón muestra que los dos joysticks accionan el robot en una configuración de accionamiento del tanque. Los botones Arriba y Abajo controlan un ArmMotorGroup, y los botones del eje R controlan un ClawMotor.

Resumen de la opción 1: Asignación de botones en la configuración del dispositivo

Ventajas Limitaciones Ejemplo de Situación
  • Configuración rápida sin necesidad de codificación
  • Método más simple
  • Fácilmente ajustable
  • Puede asignar motores individuales, un tren de transmisión estándar y grupos de motores a los botones
  • Las asignaciones de botones están limitadas al número de botones en el controlador
  • La transmisión no puede exceder los 4 motores o ser personalizada (solo se admite una transmisión estándar, no una transmisión H, holonómica u otra transmisión personalizada)
  • Manipular una compilación estándar como un Speedbot, Clawbot o una simple modificación de esas compilaciones estándar. Por ejemplo, un Speedbot con una entrada unida a la parte delantera controlada por un grupo motor.
  • Manipular qué botones corresponden a diferentes comportamientos en el robot rápidamente sin mucha codificación

Opción 2: Usar un bucle para siempre

Si está utilizando una compilación personalizada en lugar de una compilación estándar, o desea poder tener más personalización en su Controller, esta opción es buena. Usar un bucle Forever es una gran introducción para crear código personalizado para tu Controller.

Esta opción coloca todas las condiciones para el Controlador, y sus botones asociados, en un bucle Forever. Esto proporciona más flexibilidad, especialmente con diseños de compilación personalizados, pero también requiere cierta experiencia en codificación. Sin embargo, una consideración al usar esta opción es la longitud y complejidad de su proyecto. Cuantas más condiciones se agreguen, más larga será la pila de código. Esto significa que se deben ejecutar varios bloques en orden, y cuando hay muchos bloques, esto puede ralentizar la ejecución del proyecto. La ejecución más lenta del proyecto puede crear un retraso entre presionar los botones del controlador y ver el comportamiento del robot.

El ejemplo específico que se muestra a continuación es una forma en que puede usar un bucle Forever con un robot de diseño personalizado (como un robot con una transmisión personalizada) para conducir el robot y manipular la garra y el brazo para interactuar con los objetos.

El espacio de trabajo VEXcode V5 con la opción 2 bloquea el proyecto abierto. El proyecto tiene una pila de bloques y tiene dispositivos configurados. El menú Dispositivos se abre a un lado y enumera los siguientes dispositivos: Controller1, ClawMotor en el puerto 3, ArmMotor en el puerto 8, LeftMotor en el puerto 1 y RightMotor en el puerto 10. En el espacio de trabajo está la pila de bloques para manejar la entrada del controlador. La pila lee Cuando se inicia, configure la parada de ArmMotor para mantener y configure la parada de ClawMotor para mantener. El resto de la pila está contenida en un bucle Forever. Lee Forever, establece la velocidad del motor izquierdo en Controller1 3 position %, gira el motor izquierdo hacia adelante, establece la velocidad del motor derecho en Controller1 2 position % y gira el motor derecho hacia adelante. A continuación, si Controller1 Up presionado, gire ArmMotor hacia arriba; de lo contrario, si Controller1 Down presionado, gire ArmMotor hacia abajo; de lo contrario, detenga ArmMotor. Por último, si se presiona Controller1A, gire ClawMotor para abrir, de lo contrario, si se presiona Controller1B, gire ClawMotor para cerrar y, de lo contrario, detenga ClawMotor.

Descargue el archivo de proyecto VEXcode V5 "Opción 2" >

Explicación del Código de la Opción 2.

Pieza de código Explicación
Primer plano de la pila de bloques en el proyecto Opción 2 VEXcode V5. Dos bloques están resaltados y están fuera del bucle Forever de la pila, leen set ArmMotor stop to hold y set ClawMotor stop to hold. Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "Hold" asegurará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.
Primer plano de la pila de bloques en el proyecto Opción 2 VEXcode V5. Cuatro bloques se resaltan dentro del bucle Forever de la pila. Leen Forever, establecen la velocidad del motor izquierdo en Controller1 3 position %, hacen girar el motor izquierdo hacia adelante, establecen la velocidad del motor derecho en Controller1 2 position % y hacen girar el motor derecho hacia adelante.

 

Controlador V5 para visualizar su disposición de botones.

Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "Hold" asegurará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.

Se utiliza un bucle Forever para comprobar continuamente qué botones se están presionando en el controlador.

Los bloques [Establecer velocidad del motor] se utilizan para establecer la velocidad del motor en la posición actual del controlador a lo largo de los ejes 2 y 3. Esto es el equivalente a poner un coche en marcha. Eso no necesariamente hace que el auto se mueva, solo lo configura.

Cada eje del joystick devuelve un valor entre -100 y +100, y devuelve un valor de cero cuando está centrado. Esto significa que los ejes del joystick, cuando se presionan, equivalen a -100% a 100%. Cuanto más se empujen los ejes hacia 100 o -100, más rápido girará el motor.

El bloque [Spin] se utiliza para mover realmente el motor. Esto es el equivalente a presionar el gas en el coche una vez que se ha establecido la dirección. Esto permite que cada motor sea controlado por uno de los cuatro ejes del controlador. 

Primer plano de la pila de bloques en el proyecto Opción 2 VEXcode V5. Un bloque if, else if, else está resaltado dentro del bucle Forever de la pila. Se lee si Controller1 Up presionado y luego girar ArmMotor hacia arriba, de lo contrario si Controller1 Down presionado y luego girar ArmMotor hacia abajo, y de lo contrario detener ArmMotor.

 

Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "Hold" asegurará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.

El bloque [If then if then else] se utiliza para asignar ciertos comportamientos a los botones que se presionan o liberan en el Controlador. En esta sección del código, las condiciones establecidas son si se presionan los botones Arriba o Abajo. Si es así, ocurrirán ciertos comportamientos, como levantar y bajar el brazo. También está la parte else de la condición, si no se presiona ninguno de los botones, el brazo está configurado para dejar de moverse.

Tenga en cuenta que la siguiente sección del código en el proyecto para la Garra sigue la misma explicación.

Resumen de la opción 2: usar un bucle para siempre

Ventajas Limitaciones Ejemplo de Situación
  • Puede acomodar construcciones personalizadas, especialmente transmisiones con más de 4 motores
  • Puede asignar múltiples comportamientos a un solo botón
  • Puede asignar comportamientos a diferentes ejes en el controlador (a diferencia de las únicas opciones de Left Arcade, Right Arcade, Split Arcade y Tank Drive en la configuración del dispositivo)
  • Requiere cierta cantidad de conocimientos de codificación (condicionales, bucles y conocimiento de los botones/joysticks en el controlador)
  • Posibilidad de una ejecución más lenta del proyecto o retraso en el tiempo de respuesta del botón. Dado que todos los comandos están contenidos dentro de un solo bucle Forever, la ejecución del código podría ejecutarse lentamente dependiendo de las condiciones establecidas y la longitud del código.
  • Uso del controlador con un robot personalizado, especialmente con un tren de transmisión no estándar
  • Al querer asignar varios comportamientos a un solo botón. Por ejemplo, cuando se presiona el botón Arriba, la garra puede abrirse, avanzar y luego cerrarse alrededor de un objeto.

Opción 3: Uso de eventos

Si desea mucha personalización para su controlador, el uso de eventos es la mejor opción para usted. Una pulsación de botón puede desencadenar múltiples comportamientos del robot, como presionar un botón para abrir la garra, levantar el brazo y avanzar una distancia establecida. Intentar codificar múltiples comportamientos por botón dentro de un bucle Forever haría que la ejecución del proyecto se ralentizara drásticamente; el uso de Eventos le permite hacerlo de manera más efectiva.

Esta opción utiliza Eventos para dividir el flujo del proyecto. Esto es similar a usar un bucle Forever, pero permite que el código esté más organizado, de modo que la ejecución del botón tenga un tiempo de respuesta más rápido. Un tiempo de respuesta más rápido significa que no verá un retraso entre presionar los botones del controlador y ver el comportamiento del robot. Este ejemplo muestra los mismos comportamientos que el proyecto anterior, pero utilizando Eventos en lugar de Forever Loop.

VEXcode EXP Workspace con la opción 3 bloquea el proyecto abierto. El proyecto cuenta con 11 pequeñas pilas de bloques y cuenta con dispositivos configurados. El menú Dispositivos se abre a un lado y enumera los siguientes dispositivos: Controller1, ClawMotor en el puerto 3, ArmMotor en el puerto 8, LeftMotor en el puerto 1 y RightMotor en el puerto 10. En el espacio de trabajo se encuentran las 11 pequeñas pilas de bloques que manejan la entrada del controlador. La primera pila lee Cuando se inicia, configure la parada de ArmMotor para mantener y luego configure la parada de ClawMotor para mantener. La segunda pila lee Cuando se cambia el eje 3 del Controlador1, establezca la velocidad del Motor Izquierdo en el % de posición del Controlador1 y luego gire el Motor Izquierdo hacia adelante. La tercera pila lee Cuando se cambia el eje 2 del controlador 1, establezca la velocidad del motor derecho en la posición 2% del controlador 1 y luego gire el motor derecho hacia adelante. La cuarta pila lee Cuando se presiona el botón Arriba del Controlador1, gire el ArmMotor hacia arriba. La quinta pila lee Cuando se suelta el botón Arriba del Controlador1, detenga ArmMotor. La sexta pila lee Cuando se presiona el botón Controller1 Down, gire ArmMotor hacia abajo. La séptima pila lee Cuando se suelta el botón Abajo del Controlador1, detenga ArmMotor. La octava pila lee Cuando se presiona el botón A del Controlador1, gire ClawMotor para abrirlo. La novena pila lee Cuando se suelta el botón A del Controlador1, detenga ClawMotor. La décima pila lee Cuando se presiona el Botón B del Controlador1, cierre el ClawMotor. La undécima y última pila dice Cuando se suelta el botón B del Controlador1, detenga ClawMotor.

Descargue el archivo de proyecto VEXcode V5 "Opción 3" >

Explicación del Código de la Opción 3.

Pieza de código Explicación
Primer plano de una pila de bloques en el proyecto Opción 3 VEXcode V5. La pila lee Cuando se inicia, configure la parada de ArmMotor para mantener y luego configure la parada de ClawMotor para mantener.
Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "Hold" asegurará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.
Primer plano de dos pilas de bloques en el proyecto Opción 3 VEXcode V5. La primera pila lee Cuando se cambia el eje 3 del Controlador1, establezca la velocidad del Motor Izquierdo en el % de posición del Controlador1 y luego gire el Motor Izquierdo hacia adelante. La segunda pila lee Cuando se cambia el eje 2 del controlador 1, establezca la velocidad del motor derecho en la posición 2% del controlador 1 y luego gire el motor derecho hacia adelante.

 

Controlador V5 para visualizar su disposición de botones.

Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "Hold" asegurará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.

Los bloques de {When controller axis} eventos se utilizan para desencadenar ciertos comportamientos cuando se cambia uno de los cuatro ejes del controlador mediante los joysticks.

Los bloques [Establecer velocidad del motor] se utilizan para establecer la velocidad del motor en la posición actual del controlador a lo largo de los ejes A y D. Esto es el equivalente a poner un coche en marcha. Eso no necesariamente hace que el auto se mueva, solo lo configura.

Cada eje del joystick devuelve un valor entre -100 y +100, y devuelve un valor de cero cuando está centrado. Esto significa que los ejes del joystick, cuando se presionan, equivalen a -100% a 100%. Cuanto más se empujen los ejes hacia 100 o -100, más rápido girará el motor.

El bloque [Spin] se utiliza para mover realmente el motor. Esto es el equivalente a presionar el gas en el coche una vez que se ha establecido la dirección. Esto permite que cada motor sea controlado por uno de los cuatro ejes del controlador. 

Primer plano de cuatro pilas de bloques en el proyecto Opción 3 VEXcode V5. La primera pila lee Cuando se presiona el botón Arriba del Controlador1, gire el ArmMotor hacia arriba. La segunda pila lee Cuando se suelta el botón Arriba del Controlador1, detenga ArmMotor. La tercera pila lee Cuando se presiona el botón Controller1 Down, gire ArmMotor hacia abajo. La cuarta pila lee Cuando se suelta el botón Abajo del Controlador1, detenga ArmMotor.

 

Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "Hold" asegurará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.

Los bloques de {When controller axis} eventos se utilizan para asignar ciertos comportamientos a los botones que se presionan o liberan en el Controlador. En esta sección del código, las condiciones establecidas son si se presionan los botones Arriba o Abajo. Si es así, ocurrirán ciertos comportamientos, como levantar, bajar o detenerse el brazo.

Tenga en cuenta que la última sección del código en el proyecto para la Garra sigue la misma explicación.

Resumen de la opción 3: Uso de eventos

Ventajas Limitaciones Ejemplo de Situación
  • Puede acomodar construcciones personalizadas, especialmente transmisiones con más de 4 motores
  • Puede asignar múltiples comportamientos a un solo botón
  • Puede asignar comportamientos a diferentes ejes en el controlador (a diferencia de las únicas opciones de Left Arcade, Right Arcade, Split Arcade y Tank Drive en la configuración del dispositivo)
  • Ejecución de código más rápida y, por lo tanto, capacidad de respuesta del botón (ya que cada condición se solicita por separado y no se incrusta en una sola pila de código)
  • Requiere el mayor conocimiento de codificación de las opciones (condicionales, bucles, eventos y conocimiento de los botones/joysticks en el controlador)
  • Uso del controlador con un robot personalizado, especialmente con un tren de transmisión no estándar
  • Cuando se desea asignar varios comportamientos a un solo botón sin retraso. Por ejemplo, cuando se presiona el botón Arriba, la garra puede abrirse, avanzar y luego cerrarse alrededor de un objeto.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: