Codificación del robot VEX AI

Este artículo cubrirá un proyecto de ejemplo que muestra un panel de control que informa el estado de las comunicaciones de robot a robot utilizando 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 cerebro V5 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 la extensión de código VS para V5. Descargue la extensión de código VS para V5 aquí.


NVIDIA Jetson Nano para VEX V5 Brain Communications

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

Diagrama que ilustra el proceso de uso de VEX AI, mostrando los componentes clave y el flujo de trabajo para una implementación efectiva en los sistemas de robótica V5.

Datos de ubicación del robot:

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

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

Diagrama que ilustra los componentes del sistema de IA de VEX y sus interacciones, mostrando cómo la IA de VEX mejora la funcionalidad de la robótica en la categoría V5.

Detección de imagen (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 del cuadro de detección de imágenes y objetos. La resolución de la imagen es de 640 x 480.

 

Diagrama que ilustra las características y componentes de VEX AI, destacando sus aplicaciones y beneficios en robótica, como parte de la Descripción de la Categoría V5.

Detección de mapa (tipo dos):

  • Estos datos representan la ubicación del objeto en el campo en el mismo sistema de coordenadas que el sensor GPS, reportado en metros.
  • Cada objeto también contiene la ubicación del objeto en relación con el centro del campo. Los valores para 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 baldosas de campo (altura).

Objeto de detección (tipo tres):

Diagrama que ilustra los componentes del sistema VEX AI y sus interacciones, destacando las características y funcionalidades clave dentro de la plataforma de robótica V5.

  • 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 la IA de VEX en la detección. Esto es después de un filtro en el model.py que elimina las detecciones de baja probabilidad.
  • Además, la profundidad del objeto se informa en metros desde la VEX AI Intel Camera.
  • La detección de imágenes y la detección de mapas 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:

Main.cpp

Diagrama que ilustra las características y funcionalidades de VEX AI en la categoría V5, mostrando cómo utilizar eficazmente la tecnología para aplicaciones de robótica.

El estándar incluye para proyectos VEX:

Diagrama que ilustra los componentes del sistema VEX AI y sus interacciones, como parte de la descripción de la categoría V5 en la sección Uso de VEX AI.

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.

#define MANAGER_ROBOT 1

Diagrama que ilustra las características y componentes de VEX AI en el contexto de la robótica V5, destacando las funcionalidades clave y las pautas de uso.

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:

//#define 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

    Diagrama que ilustra las características y componentes de VEX AI en el sistema de robótica V5, destacando sus capacidades para mejorar el rendimiento y la programación del robot.

    Una de las mayores diferencias entre vaIC Y VRC es que no hay 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, hay rutinas separadas para cada período autónomo. Debido a que la API de VEX no admite dos devoluciones de llamada diferentes, tiene que haber un indicador en el programa para determinar qué rutina se va a ejecutar. En este programa de ejemplo, el "firstAutoFlag" se utiliza para llamar a la función de aislamiento la primera vez que se habilita la función autónoma, y 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 la coincidencia necesita restablecerse, el programa de demostración tendría que reiniciarse para que el primer AutoFlag pueda restablecerse.

  • Principal()

    Diagrama que ilustra las características y funcionalidades de VEX AI dentro de la categoría V5, destacando los componentes clave y sus interacciones para una programación y automatización robóticas mejoradas.

    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 actuales. El código para esa tarea está contenido en el archivo dashboard.cpp. La devolución de llamada autónoma también se registra para manejar cuando se inician los períodos autónomos.

    El bucle while() principal 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 al Jetson y duerme durante 66 milisegundos. La frecuencia 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 unos 15 Hz.

    Nota: los datos del mapa de Jetson solo deben ser solicitados por una sola tarea.

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

Last Updated: