Lectura de valores de matriz escritos por Tablas de Enrutamiento

Este artículo describe cómo leer los valores publicados por NetworkTables utilizando un programa que se ejecuta en el robot. Esto es útil cuando se utiliza la visión por ordenador, donde las imágenes se procesan en la Driver Station y los resultados se almacenan en NetworkTables, posiblemente utilizando un procesador de visión independiente como una frambuesa pi, o una herramienta en el robot como GRIP, o un programa de python para hacer el procesamiento de imágenes.

Comúnmente los valores son para una o más áreas de interés tales como objetivos o piezas de juego y son regresadas múltiples instancias. En el ejemplo a continuación, varios valores x, y, ancho, altura, y áreas son entregados por el procesamiento de imagen y el programa del robot puede decidir cuál de los valores entregados son de interés para los siguientes procesamientos.

Verifica las claves de NetworkTables que se publican

Image of OutlineViewer with the NetworkTables keys

Puede verificar los nombres de las claves de NetworkTables utilizadas para publicar los valores utilizando la aplicación Outline Viewer. Es un programa Java que se encuentra en su directorio de usuario en la carpeta wpilib/<YEAR>/tools. La aplicación se inicia seleccionando el menú «WPILib» en Visual Studio Code y luego Start Tool y luego «OutlineViewer». En este ejemplo, con el programa de procesamiento de imágenes en marcha (GRIP) puede ver los valores que se introducen en NetworkTables.

En este caso los valores se almacenan en una tabla llamada GRIP y una subtabla llamada myContoursReport. Puede ver que los valores están entre paréntesis y que hay 2 valores en este caso para cada clave. Los nombres de las claves de NetworkTables son centerX, centerY, area, height y width.

Los dos ejemplos siguientes son programas extremadamente simplificados que solamente ilustran el uso de las Tablas de Enrutamiento. Todo el código se encuentra en el método robotInit() que solo se ejecuta cuando el programa inicia. En sus programas, usted buscará obtener los valores del código que evalúen en que dirección apuntar el robot en un comando o un bucle de control durante los periodos de autónomo o teleoperado.

Escritura de un programa para acceder a los índices

NetworkTable table;
double[] areas;
double[] defaultValue = new double[0];

@Override
public void robotInit() {
  table = NetworkTableInstance.getDefault().getTable("GRIP/mycontoursReport");
}

@Override
public void teleopPeriodic() {
    double[] areas = table.getEntry("area").getDoubleArray(defaultValue);

    System.out.print("areas: " );

    for (double area : areas) {
      System.out.print(area + " ");
    }

    System.out.println();
}

Los pasos para obtener los valores y, en este programa, escribirlos son:

  1. Declarar la tabla variable que guardará la instancia de la subtabla que tendrá los valores.

  2. Inicializar la instancia de la subtabla para que pueda ser usada después para recuperar los valores.

  3. Lea la matriz de valores de NetworkTables. En el caso de los programas en comunicación, es posible que el programa que produce la salida que se lee aquí no esté todavía disponible cuando el programa del robot se inicia. Para evitar problemas de que los datos no estén listos, se suministra un array de valores por defecto. Este valor por defecto será devuelto si la clave NetworkTables aún no ha sido publicada. Este código hará un bucle sobre el valor de las áreas cada 20ms.

Salidas del Programa

Image of Riolog showing the values

En este caso el programa solamente está buscando en la matriz de las areas, pero en un ejemplo real sería más probable usar todos los valores. Usando el Riolog en VS Code o la Driver Station Log puede ver los valores así como son enviados. Este programa está usando de muestra una imagen estática así que las areas no cambian, pero puede imaginar que con la cámara en el robot, los valores estarían constantemente cambiando.