Código de controlador personalizado en VEXcode IQ

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 IQ. 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 IQ. 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 BaseBot 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ú VEXcode IQ Devices con las opciones de Controller 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 del eje E 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 BaseBot, Clawbot o una simple modificación de esas compilaciones estándar. Por ejemplo, un BaseBot 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.

VEXcode IQ Workspace 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: IQ 2nd gen Brain, ClawMotor en el puerto 4, ArmMotor en el puerto 10, Controller, LeftMotor en el puerto 1 y RightMotor en el puerto 6. Por último, 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 la posición % del controlador A, gira el motor izquierdo hacia adelante, establece la velocidad del motor derecho en la posición % del controlador D y gira el motor derecho hacia adelante. A continuación, si se presiona el Controlador E Arriba, gire el ArmMotor hacia arriba; de lo contrario, si se presiona el Controlador E Abajo, gire el ArmMotor hacia abajo; de lo contrario, detenga el ArmMotor. Por último, si se presiona Controller F Up, gire ClawMotor para abrir, de lo contrario, si se presiona Controller F Down, gire ClawMotor para cerrar y, de lo contrario, detenga ClawMotor.

Descarga el archivo de proyecto VEXcode IQ (2ª generación) “Opción 2” >

Nota: Si se utiliza un Clawbot de primera generación, el motor del brazo deberá invertirse en la configuración del dispositivo para que funcione según lo previsto en el proyecto anterior.

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 IQ. 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 IQ. Cuatro bloques se resaltan dentro del bucle Forever de la pila. Leen Forever, establecen la velocidad del motor izquierdo en la posición % del controlador A, giran el motor izquierdo hacia adelante, establecen la velocidad del motor derecho en la posición % del controlador D y giran el motor derecho hacia adelante. Diagrama del controlador IQ (2nd Gen) con sus botones y joysticks etiquetados. La vista es desde la parte frontal del controlador. Los ejes del joystick izquierdo están etiquetados como A y B. El botón central del joystick izquierdo está etiquetado como L3. Los dos botones redondos debajo del joystick izquierdo están etiquetados como E Arriba y E Abajo. Los ejes del joystick derecho están etiquetados como C y D. El botón central del joystick derecho está etiquetado como R3. Los dos botones redondos debajo del joystick derecho están etiquetados como F Arriba y F Abajo.

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 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 la pila de bloques en el proyecto Opción 2 VEXcode IQ. Un bloque if, else if, else está resaltado dentro del bucle Forever de la pila. Se lee si el controlador E está presionado hacia arriba y luego gira el motor del brazo hacia arriba, de lo contrario, si el controlador E está presionado hacia abajo, gira el motor del brazo hacia abajo y, de lo contrario, detiene el motor del brazo.

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 E Arriba o E 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 F Up, 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.

Espacio de trabajo VEXcode IQ con el proyecto de bloques Opción 3 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: IQ 2nd gen Brain, ClawMotor en el puerto 4, ArmMotor en el puerto 10, Controller, LeftMotor en el puerto 1 y RightMotor en el puerto 6. Por último, están 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 A del controlador, establezca la velocidad del motor izquierdo en la posición % del controlador A y luego gire el motor izquierdo hacia adelante. La tercera pila lee Cuando se cambia el controlador D, establezca la velocidad del motor derecho en la posición % del controlador D y luego gire el motor derecho hacia adelante. La cuarta pila lee Cuando se presiona el botón del controlador E Arriba, gire el ArmMotor hacia arriba. La quinta pila lee Cuando se suelta el botón E Up del controlador, detenga ArmMotor. La sexta pila lee Cuando se presiona el botón del controlador E hacia abajo, gire el ArmMotor hacia abajo. La séptima pila lee Cuando se suelta el botón E Down del controlador, detenga ArmMotor. La octava pila lee Cuando se presiona el botón F Up del controlador, gire ClawMotor para abrirlo. La novena pila lee Cuando se suelta el botón F Up del controlador, detenga ClawMotor. La décima pila lee Cuando se presiona el botón F Down del controlador, cierre el ClawMotor. La undécima y última pila dice Cuando se suelta el botón F Down del controlador, detenga ClawMotor.

Descarga el archivo de proyecto VEXcode IQ (2ª generación) “Opción 3” >

Nota: si se utiliza un Clawbot de primera generación, el motor del brazo deberá invertirse en la configuración del dispositivo para que funcione según lo previsto en el proyecto anterior.

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 IQ. 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 IQ. La primera pila lee Cuando se cambia el eje A del controlador, establezca la velocidad del motor izquierdo en la posición % del controlador A y luego gire el motor izquierdo hacia adelante. La segunda pila lee Cuando se cambia el eje D del controlador, establezca la velocidad del motor derecho en la posición % del controlador D y luego gire el motor derecho hacia adelante. Diagrama del controlador IQ (2nd Gen) con sus botones y joysticks etiquetados. La vista es desde la parte frontal del controlador. Los ejes del joystick izquierdo están etiquetados como A y B. El botón central del joystick izquierdo está etiquetado como L3. Los dos botones redondos debajo del joystick izquierdo están etiquetados como E Arriba y E Abajo. Los ejes del joystick derecho están etiquetados como C y D. El botón central del joystick derecho está etiquetado como R3. Los dos botones redondos debajo del joystick derecho están etiquetados como F Arriba y F Abajo.

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 IQ. La primera pila lee Cuando se presiona el botón del controlador E Arriba, gire el ArmMotor hacia arriba. La segunda pila lee Cuando se suelta el botón E Up del controlador, detenga ArmMotor. La tercera pila lee Cuando se presiona el botón del controlador E hacia abajo, gire el ArmMotor hacia abajo. La cuarta pila dice Cuando se suelta el botón E Down del controlador, 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 E Arriba o E 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)
  • Si se utiliza un cerebro VEX IQ de 1ª generación, tener demasiados eventos en un proyecto puede provocar que el proyecto no se ejecute, debido a las limitaciones de procesamiento del cerebro.
  • 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 F Up, 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: