Création d’un programme côté client

Si tout ce que vous avez à faire est de faire communiquer votre programme de robot avec GRIP ou un tableau de bord fonctionnant sur l’ordinateur portable de Driver Station, les exemples précédents d’écriture de programmes de robot sont suffisants. Mais si vous souhaitez écrire un code client personnalisé qui s’exécuterait sur la station de pilotes ou sur un coprocesseur, vous devez savoir comment construire des programmes avec des NetworkTables pour ces plates-formes (non roboRIO).

Un programme client de base ressemble à l’exemple suivant.

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);
    }
  }
}

Dans cet exemple, une instance de NetworkTables est créée et un NetworkTableEntry s’il est créé pour référencer les valeurs de « x » et « y » à partir d’une table appelée « datatable ».

Ensuite, cette instance est démarrée en tant que client NetworkTables avec le numéro d’équipe (le roboRIO est toujours le serveur). De plus, si le programme est en cours d’exécution sur l’ordinateur de Driver Station, en utilisant la méthode startDSClient (), NetworkTables obtiendra l’adresse IP du robot à partir de Driver Station.

Ensuite, ce programme boucle simplement une fois par seconde et obtient les valeurs de x et y et les imprime sur la console. Dans un programme plus réaliste, le client pourrait traiter ou générer des valeurs calculés de ces lectures et les retourner au robot.

La construction du programme

Lors de la création et de l’exécution du programme, vous aurez besoin de bibliothèques supplémentaires à inclure dans votre programme côté client. Ceux-ci sont:

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

https://frcmaven.wpi.edu/artifactory/release/edu/wpi/first/ntcore/ntcore-jni/ (bibliothèques natives ntcore pour toutes les plates-formes de bureau)

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

Note

Le fichier JAR fonctionne sous Windows, macOS et Linux.

Construire avec Gradle

Les dépendances ci-dessus peuvent être ajoutées au bloc dependencies dans un fichier build.gradle. Les librairies ntcore-java et wpiutil-java sont requises au moment de la compilation et les dépendances JNI sont requises au moment de l’exécution. Les dépendances JNI pour toutes les plates-formes prises en charge doivent être rajoutées au build.gradle si une prise en charge multiplateforme de l’application est souhaitée.

Tout d’abord, le repertoire Maven FRC® doit être ajouté au bloc repositories. Notez que cela n’est pas nécessaire si vous utilisez le plugin GradleRIO avec votre application.

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

Ensuite, les dépendances peuvent être ajoutées au bloc dependencies. Ici, VERSION doit être remplacé par le dernier numéro de version des dépendances suivantes. Cela correspond généralement au numéro de version de la dernière version de WPILib.

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

    // Add wpiutil-java
    compile "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.
    runtime "edu.wpi.first.ntcore:ntcore-jni:VERSION:windowsx86"
    runtime "edu.wpi.first.ntcore:ntcore-jni:VERSION:windowsx86-64"
    runtime "edu.wpi.first.ntcore:ntcore-jni:VERSION:linuxx86-64"
    runtime "edu.wpi.first.ntcore:ntcore-jni:VERSION:linuxraspbian"
    runtime "edu.wpi.first.ntcore:ntcore-jni:VERSION:osxx86-64"
}