Codificando el robot VEX AI

Este artículo cubrirá un proyecto de ejemplo que muestra un panel que informa el estado de las comunicaciones de robot a robot mediante VEXlink y también el estado del Jetson. El proyecto ai_demo está alojado en nuestro Github. Este proyecto de demostración recopila datos del procesador Jetson a través de una conexión serie USB. Una vez que se reciben los datos, se muestran en la pantalla del V5 Brain y también se transmiten a un robot V5 asociado que está conectado a través de VEXlink.

Nota: este proyecto requiere la última versión de VS Code Extension para V5. Descargue la extensión VS Code para V5 aquí.


Comunicaciones cerebrales NVIDIA Jetson Nano a VEX V5

El procesador Jetson contiene una aplicación que recopila los siguientes datos del software VEX AI:

Sobrebajo.png

Datos de ubicación del robot:

  • Ubicación X,Y del robot en metros desde el centro del campo.
  • Azimut (rumbo), elevación (inclinación) y rotación (giro) del robot, todo en radianes.

Datos de detección de objetos (tres tipos):

Píxel (0,0).png

Detección de imágenes (tipo uno):
  • Estos datos representan un objeto detectado por la cámara Intel VEX AI.
  • Estos datos describen el objeto con referencia a la imagen de la cámara.
  • Los valores de X, Y, ancho y alto están en unidades de píxeles. Los valores de píxeles hacen referencia a la esquina superior izquierda de la imagen y al cuadro de detección de objetos. La resolución de la imagen es 640x480.

 

AI XY (1).png

Detección de mapas (tipo dos):

  • Estos datos representan la ubicación del objeto en el campo en el mismo sistema de coordenadas que el sensor GPS, expresado en metros.
  • Cada objeto también contiene la ubicación del objeto en relación con el centro del campo. Los valores de X e Y están en unidades de metros desde el centro del campo en sus respectivos ejes. El valor de Z está a metros de las losetas de campo (altura).

Objeto de detección (tipo tres):

Estructuras.PNG

  • Esto encapsula toda la información sobre los objetos detectados.
  • Cada objeto contiene un valor que representa la clasificación del objeto detectado. (ID de clase: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
  • Cada objeto también contiene una probabilidad que representa la confianza de VEX AI en la detección. Esto es después de un filtro en model.py que elimina las detecciones de baja probabilidad.
  • Además, la profundidad del objeto se informa en metros desde la cámara Intel VEX AI.
  • La Detección de Imagen y la Detección de Mapa se adjuntan a cada objeto para representar las coordenadas del objeto en la imagen así como en el mundo real.

Un desglose del programa ai_demo:

principal.cpp

imagen5.png

El estándar incluye para proyectos VEX:

imagen7.png

Declara una instancia de la clase Jetson. Esta clase se utiliza para enviar solicitudes de datos al Jetson, así como para recibir datos a través de la conexión serie USB.

#definir MANAGER_ROBOT 1

Definir_manager_robot_1.png

Declare una instancia de la clase robot_link. Este objeto se utilizará para conectar y transferir datos entre este robot y un robot asociado. Este mismo proyecto se puede descargar en dos robots separados. Un robot necesitará tener la línea:

//#definir MANAGER_ROBOT 1

Antes de cargar el código en el segundo robot, deberá comentar esa línea:

La clase robot_link configura el VEXlink del robot y maneja la transmisión y recepción de datos entre los dos robots. No vamos a entrar en detalles en este artículo sobre cómo funciona esa clase. Sería una buena idea entender primero cómo funciona VEXlink. Para obtener información más detallada sobre el uso de la API VEXlink V5, este documento explica las nuevas bibliotecas y cómo usarlas de manera efectiva para la comunicación de robot a robot.

  • Controladores de eventos de competencia

    primeraAutoFlag.png

    Una de las mayores diferencias entre VAIC y VRC es que no existe un período de control del conductor. En cambio, hay dos períodos autónomos, el período de aislamiento y el período de interacción. En este ejemplo, existen rutinas separadas para cada período autónomo. Debido a que la API VEX no admite dos devoluciones de llamada diferentes, debe haber un indicador en el programa para determinar qué rutina se ejecutará. En este programa de ejemplo, "firstAutoFlag" se utiliza para llamar a la función de aislamiento la primera vez que se habilita la función autónoma y a la función de interacción cuando se habilita la función autónoma por segunda vez. Una cosa a tener en cuenta es que si por alguna razón es necesario restablecer la coincidencia, será necesario reiniciar el programa de demostración para que se pueda restablecer el primer AutoFlag.

  • Principal()

    Principal (1).PNG

    Esta es la tarea principal de este proyecto. Comienza llamando a vexcodeInit() para configurar correctamente el entorno VEXcode. A continuación, se declara un objeto AI_RECORD local para almacenar los datos que recibimos del Jetson. También se configura una tarea separada para manejar la actualización de la pantalla con los datos más recientes. El código para esa tarea está contenido en el archivo Dashboard.cpp. La devolución de llamada autónoma también está registrada para manejar cuando se inician los períodos autónomos.

    El bucle principal while() comienza copiando los datos más recientes del objeto jetson_comms en nuestro objeto AI_RECORD local. Luego pasa la información de ubicación del robot al objeto de enlace para que pueda transmitirse a nuestro robot asociado. Una vez que termina de procesar los datos, solicita más datos del Jetson y duerme durante 66 milisegundos. La tasa de sondeo para estos datos es de 15 Hz. No hay razón para sondear más rápido ya que los datos del sistema de IA se actualizan a aproximadamente 15 Hz.

    Nota: los datos del mapa Jetson solo deben solicitarse mediante una única tarea.

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

Last Updated: