Creando un programa personalizado

Si todo lo que necesitas es que tu programa de robot se comunique con GRIP o con un dashboard que se ejecute en la laptop de la Driver Station, entonces los ejemplos anteriores de escritura de programas de robot son suficientes. Pero si quieres escribir algún código de cliente personalizado que se ejecute en la estación de controladores o en un coprocesador, entonces necesitas saber cómo construir programas NetworkTables para esas plataformas (que no son de RoboRIO).

Un programa personalizado básico es como el siguiente ejemplo.

package networktablesdesktopclient;

import edu.wpi.first.networktables.NetworkTable;
import edu.wpi.first.networktables.NetworkTableEntry;
import edu.wpi.first.networktables.NetworkTableInstance;

public class NetworkTablesDesktopClient {
  public static void main(String[] args) {
    new NetworkTablesDesktopClient().run();
  }

  public void run() {
    NetworkTableInstance inst = NetworkTableInstance.getDefault();
    NetworkTable table = inst.getTable("datatable");
    NetworkTableEntry xEntry = table.getEntry("x");
    NetworkTableEntry yEntry = table.getEntry("y");
    inst.startClientTeam(TEAM);  // where TEAM=190, 294, etc, or use inst.startClient("hostname") or similar
    inst.startDSClient();  // recommended if running on DS computer; this gets the robot IP from the DS
    while (true) {
      try {
        Thread.sleep(1000);
      } catch (InterruptedException ex) {
        System.out.println("interrupted");
        return;
      }
      double x = xEntry.getDouble(0.0);
      double y = yEntry.getDouble(0.0);
      System.out.println("X: " + x + " Y: " + y);
    }
  }
}

En este ejemplo una instancia de una Tabla de Enrutamiento es creada y una entrada de Tabla de Enrutamiento es creada para referenciar valores de “x” y “y” de una tabla llamada “datatable”.

A continuación, esta instancia se inicia como cliente de NetworkTables con el número de equipo (el roboRIO es siempre el servidor). Además, si el programa se ejecuta en la Driver Station, mediante el método startDSClient(), NetworkTables obtendrá la dirección IP del robot de la Driver Station.

Luego este programa de muestra simplemente se repite una vez por segundo y obtiene los valores de “x” y “y” y los captura en la consola. En un programa más realista, el cliente podría estar procesando o generando valores para que el robot los consuma.

Compilando el programa

Al compilar y ejecutar el programa usted requerirá algunas librerías adicionales a incluir en su programa client-side. Son las siguientes:

https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/ntcore/ntcore-java/ (archivos ntcore de Java)

https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/ntcore/ntcore-jni/ (ntcore native librerías para todas las plataformas de escritorio)

https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/wpiutil/wpiutil-java/ (archivos wpiutil de Java)

Nota

La aplicación jar de escritorio es para Windows, macOS, and Linux.

Compilando usando using Gradle

Las dependencias de arriba pueden ser añadidas al bloque de dependencias en un archivo de complilación gradle. Las liberias ntcore-java and wpiutil-java son requeridas en compile-time y las dependencias JNI son requeridas en el runtime. Las dependencias JNI para todas las plataformas deberán ser añadidas al build-gradle si el soporte de la multiplataforma para la aplicación es deseada.

Primero, el repositorio FRC® Maven debe ser añadido al bloque repositories. Nota, esto no es requerido si se esta usando el plugin GradleRIO en la aplicación.

repositories {
    maven { url "https://frcmaven.wpi.edu/artifactory/release/" }
}

Entonces, las dependencias pueden ser añadidas al bloque de dependencias. La versión deberá ser reemplazada con el número de versión más actualizada. Esto usualmente corresponde al número de versión más actualizada de WPILib.

dependencies {
    // Add ntcore-java
    implementation "edu.wpi.first.ntcore:ntcore-java:VERSION"

    // Add wpiutil-java
    implementation "edu.wpi.first.wpiutil:wpiutil-java:VERSION"

    // Add ntcore-jni for runtime. We are adding all supported platforms
    // so that our application will work on all supported platforms.
    implementation "edu.wpi.first.ntcore:ntcore-jni:VERSION:windowsx86"
    implementation "edu.wpi.first.ntcore:ntcore-jni:VERSION:windowsx86-64"
    implementation "edu.wpi.first.ntcore:ntcore-jni:VERSION:linuxx86-64"
    implementation "edu.wpi.first.ntcore:ntcore-jni:VERSION:linuxraspbian"
    implementation "edu.wpi.first.ntcore:ntcore-jni:VERSION:osxx86-64"
}