Lecture des valeurs de tableau publiées par NetworkTables

Cet article décrit comment lire les valeurs publiées par les NetworkTables à l’aide d’un programme exécuté sur le robot. Ceci est utile lors de l’utilisation de la vision par ordinateur où les images sont traitées sur votre ordinateur portable de la station de pilote et les résultats étant stockés dans NetworkTables via un processeur de vision séparé comme un raspberry pi, ou un outil sur le robot comme GRIP, ou un programme python pour faire le traitement d’image.

Très souvent, les valeurs concernent un ou plusieurs domaines d’intérêt tels que les objectifs ou les pièces de jeu et plusieurs instances sont renvoyées. Dans l’exemple ci-dessous, plusieurs valeurs de x, y, largeur, hauteur et zones sont envoyés par le processeur d’image et le programme du robot peut trier les valeurs qui sont intéressantes grâce à un traitement plus poussé.

Vérifiez les clés NetworkTables en cours de publication

Image of OutlineViewer with the NetworkTables keys

Vous pouvez vérifier les noms des clés NetworkTables utilisées pour publier les valeurs à l’aide de l’application Outline Viewer. Il s’agit d’un programme Java dans votre répertoire utilisateur dans le dossier wpilib /<YEAR>/ tools. L’application est démarrée en sélectionnant le menu « WPILib » dans Visual Studio Code puis « Start Tool » puis « OutlineViewer ». Dans cet exemple, avec le programme de traitement d’image en cours d’exécution (GRIP), vous pouvez voir les valeurs mises dans NetworkTables.

Dans ce cas, les valeurs sont stockées dans une table appelée GRIP et une sous-table appelée myContoursReport. Vous pouvez voir que les valeurs sont entre crochets et il y a 2 valeurs dans ce cas pour chaque clé. Les noms de clé NetworkTables sont centerX, centerY, area, height et width.

Les deux exemples suivants sont des programmes simples qui illustrent l’utilisation de NetworkTables. Tout le code est dans la méthode robotInit(), il n’est donc exécuté qu’au démarrage du programme. Dans vos programmes, vous obtiendrez plus probablement les valeurs dans le code qui gère vers quelle direction le robot doit viser pour atteindre une cible, ou une boucle de contrôle pendant les périodes autonome ou téléopérée.

Écrire un programme pour accéder aux clés

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

Les étapes pour obtenir les valeurs et aussi les imprimer sont les suivantes:

  1. Déclarer la variable de table qui contiendra l’instance de la sous-table contenant les valeurs.

  2. Initialiser l’instance de sous-table afin qu’elle puisse être utilisée plus tard pour récupérer les valeurs.

  3. Lisez le tableau de valeurs de NetworkTables. Dans le cas d’un programme communicant, il est possible que le programme produisant la sortie lue ici ne soit pas encore disponible au démarrage du programme du robot. Pour éviter que les données ne soient prêtes, un tableau de valeurs par défaut est fourni. Cette valeur par défaut sera renvoyée si la clé NetworkTables n’a pas encore été publiée. Ce code boucle sur la valeur des zones toutes les 20 ms.

Les sorties du programme

Image of Riolog showing the values

Dans ce cas, le programme ne regarde seulement que le tableau des zones, mais dans un exemple réel, toutes les valeurs seraient plus susceptibles d’être utilisées. En utilisant le Riolog dans VS Code ou le journal (log) du Driver Station, vous pouvez voir les valeurs au fur et à mesure qu’elles sont récupérées. Ce programme utilise un exemple d’image statique afin que les zones ne changent pas, mais vous pouvez imaginer qu’avec une caméra sur votre robot, les valeurs changeraient constamment.