API NetworkTables
Limelight OS intègre un client NetworkTables 4. Il se connecte automatiquement au serveur NetworkTables 4 fonctionnant sur les robots FRC en fonction du numéro d'équipe / ID configuré dans l'interface des paramètres.
Toutes les données sont publiées dans une table correspondant au nom de l'appareil (ex: "limelight"). Si un nom d'hôte / surnom est attribué à votre caméra, le nom de la table correspondra au nom complet du limelight (ex: "limelight-top").
LimelightLib WPIJava et LimelightLib WPICPP interagissent avec les appareils Limelight via NetworkTables.
Données de ciblage de base
Utilisez le code suivant :
- Java
- LabView
- C++
- Python
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDouble(0);

nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumber("<variablename>",0.0);
NetworkTables.getTable("limelight").getNumber('<variablename>');
pour récupérer ces données :
| clé | type | description |
|---|---|---|
| tv | int | 1 si une cible valide existe. 0 si aucune cible valide n'existe |
| tx | double | Décalage horizontal du réticule vers la cible (LL1: -27 degrés à 27 degrés / LL2: -29.8 à 29.8 degrés) |
| ty | double | Décalage vertical du réticule vers la cible (LL1: -20.5 degrés à 20.5 degrés / LL2: -24.85 à 24.85 degrés) |
| txnc | double | Décalage horizontal du pixel principal vers la cible (degrés) |
| tync | double | Décalage vertical du pixel principal vers la cible (degrés) |
| ta | double | Surface de la cible (0% à 100% de l'image) |
| tl | double | Contribution de latence du pipeline (ms). Ajouter à "cl" pour obtenir la latence totale. |
| cl | double | Latence du pipeline de capture (ms). Temps entre la fin de l'exposition de la ligne centrale du capteur et le début du pipeline de suivi. |
| t2d | double | Tableau contenant plusieurs valeurs pour les statistiques à horodatage synchronisé : [targetValid, targetCount, targetLatency, captureLatency, tx, ty, txnc, tync, ta, tid, targetClassIndexDetector , targetClassIndexClassifier, targetLongSidePixels, targetShortSidePixels, targetHorizontalExtentPixels, targetVerticalExtentPixels, targetSkewDegrees] |
| getpipe | int | Index réel du pipeline actif de la caméra (0 .. 9) |
| getpipetype | string | Type de pipeline ex: "pipe_color" |
| json | string | Export JSON complet des résultats de ciblage. Doit être activé par pipeline dans l'onglet 'output' |
| tclass | string | Nom de classe du résultat principal du détecteur neuronal ou du classificateur neuronal |
| tc | doubleArray | Obtenir la couleur HSV moyenne sous la région du réticule (région de 3x3 pixels) sous forme de NumberArray |
| hb | double | Valeur de battement de cœur. Augmente d'une unité par image, se réinitialise à 2 milliards |
| hw | doubleArray | Métriques matérielles [fps, température CPU, utilisation RAM, température] |
| crosshairs | doubleArray | Réticules 2D [cx0, cy0, cx1, cy1] |
| tcclass | string | Nom de la classe calculée par le pipeline de classification |
| tdclass | string | Nom de la détection principale du pipeline de détection |
AprilTag et données 3D
Utilisez le code suivant :
- Java
- C++
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDoubleArray(new double[6]);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumberArray("<variablename>",std::vector<double>(6));
pour récupérer ces données :
| clé | type | description |
|---|---|---|
| botpose | doubleArray | Transformation du robot dans l'espace du terrain. Translation (X,Y,Z) en mètres, Rotation (Roll,Pitch,Yaw) en degrés, latence totale (cl+tl), nombre de tags, étendue des tags, distance moyenne des tags à la caméra, surface moyenne des tags (pourcentage de l'image) |
| botpose_wpiblue | doubleArray | Transformation du robot dans l'espace du terrain (origine WPILIB station de pilotage bleue). Translation (X,Y,Z) en mètres, Rotation (Roll,Pitch,Yaw) en degrés, latence totale (cl+tl), nombre de tags, étendue des tags, distance moyenne des tags à la caméra, surface moyenne des tags (pourcentage de l'image) |
| botpose_wpired | doubleArray | Transformation du robot dans l'espace du terrain (origine WPILIB station de pilotage rouge). Translation (X,Y,Z) en mètres, Rotation (Roll,Pitch,Yaw) en degrés, latence totale (cl+tl), nombre de tags, étendue des tags, distance moyenne des tags à la caméra, surface moyenne des tags (pourcentage de l'image) |
| botpose_orb | doubleArray | Transformation du robot dans l'espace du terrain (Megatag2). Translation (X,Y,Z) en mètres, Rotation (Roll,Pitch,Yaw) en degrés, latence totale (cl+tl), nombre de tags, étendue des tags, distance moyenne des tags à la caméra, surface moyenne des tags (pourcentage de l'image) |
| botpose_orb_wpiblue | doubleArray | Transformation du robot dans l'espace du terrain (Megatag2) (origine WPILIB station de pilotage bleue). Translation (X,Y,Z) en mètres, Rotation (Roll,Pitch,Yaw) en degrés, latence totale (cl+tl), nombre de tags, étendue des tags, distance moyenne des tags à la caméra, surface moyenne des tags (pourcentage de l'image) |
| botpose_orb_wpired | doubleArray | Transformation du robot dans l'espace du terrain (Megatag2) (origine WPILIB station de pilotage rouge). Translation (X,Y,Z) en mètres, Rotation (Roll,Pitch,Yaw) en degrés, latence totale (cl+tl), nombre de tags, étendue des tags, distance moyenne des tags à la caméra, surface moyenne des tags (pourcentage de l'image) |
| camerapose_targetspace | doubleArray | Transformation 3D de la caméra dans le système de coordonnées de l'AprilTag principal visible (tableau (6)) [tx, ty, tz, pitch, yaw, roll] (mètres, degrés) |
| targetpose_cameraspace | doubleArray | Transformation 3D de l'AprilTag principal visible dans le système de coordonnées de la caméra (tableau (6)) [tx, ty, tz, pitch, yaw, roll] (mètres, degrés) |
| targetpose_robotspace | doubleArray | Transformation 3D de l'AprilTag principal visible dans le système de coordonnées du robot (tableau (6)) [tx, ty, tz, pitch, yaw, roll] (mètres, degrés) |
| botpose_targetspace | doubleArray | Transformation 3D du robot dans le système de coordonnées de l'AprilTag principal visible (tableau (6)) [tx, ty, tz, pitch, yaw, roll] (mètres, degrés) |
| camerapose_robotspace | doubleArray | Transformation 3D de la caméra dans le système de coordonnées du robot (tableau (6)) |
| tid | int | ID de l'AprilTag principal visible |
| stddevs | doubleArray | Écarts-types MegaTag [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw] |
| camerapose_robotspace_set | doubleArray | DÉFINIR la pose de la caméra dans le système de coordonnées du robot. |
| priorityid | int | DÉFINIR l'ID requis pour le ciblage tx/ty. Ignorer les autres cibles. N'affecte pas la localisation |
| robot_orientation_set | doubleArray | DÉFINIR l'orientation du robot et les vitesses angulaires en degrés et degrés par seconde [yaw,yawrate,pitch,pitchrate,roll,rollrate] |
| fiducial_id_filters_set | doubleArray | Remplacer les IDs de fiduciaires valides pour la localisation (tableau) |
| fiducial_offset_set | doubleArray | DÉFINIR le décalage du point d'intérêt 3D [x,y,z] |
Contrôles de la caméra
Utilisez le code suivant :
- Java
- LabView
- C++
- Python
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").setNumber(<value>);

nt::NetworkTableInstance::GetDefault().GetTable("limelight")->PutNumber("<variablename>",<value>);
NetworkTables.getTable("limelight").putNumber('<variablename>',<value>)
pour définir ces données :
| ledMode | Définit l'état des LED du limelight |
|---|---|
| [0] | utiliser le mode LED défini dans le pipeline actuel |
| [1] | forcer éteint |
| [2] | forcer clignotement |
| [3] | forcer allumé |
| pipeline | Définit le pipeline actuel du limelight |
|---|---|
| 0 .. 9 | Sélectionner le pipeline 0..9 |
| stream | Définit le mode de streaming du limelight |
|---|---|
| 0 | Standard - Flux côte à côte si une webcam est connectée au Limelight |
| 1 | PiP Principal - Le flux de la caméra secondaire est placé dans le coin inférieur droit du flux de la caméra principale |
| 2 | PiP Secondaire - Le flux de la caméra principale est placé dans le coin inférieur droit du flux de la caméra secondaire |
| crop | (Tableau) Définit le rectangle de recadrage. Le pipeline doit utiliser le rectangle de recadrage par défaut dans l'interface web. Le tableau doit contenir exactement 4 entrées. |
|---|---|
| [0] | X0 - Valeur X min ou max du rectangle de recadrage (-1 à 1) |
| [1] | X1 - Valeur X min ou max du rectangle de recadrage (-1 à 1) |
| [2] | Y0 - Valeur Y min ou max du rectangle de recadrage (-1 à 1) |
| [3] | Y1 - Valeur Y min ou max du rectangle de recadrage (-1 à 1) |
| throttle_set | (int) Nous recommandons de définir cette valeur entre 100-200 lorsque désactivé. Définit le nombre d'images à ignorer entre les images traitées pour réduire l'augmentation de température. Les sorties ne sont pas remises à zéro pendant les images ignorées. |
|---|
- Java
- C++
double[] cropValues = new double[4];
cropValues[0] = -1.0;
cropValues[1] = 1.0;
cropValues[2] = -1.0;
cropValues[3] = 1.0;
NetworkTableInstance.getDefault().getTable("limelight").getEntry("crop").setDoubleArray(cropValues);
wip
Contrôles IMU
| clé | type | description |
|---|---|---|
| imumode_set | int | Définir le mode IMU. 0 - utiliser IMU externe, 1 - utiliser IMU externe, initialiser IMU interne, 2 - utiliser interne, 3 - utiliser interne avec convergence assistée MT1, 4 - utiliser IMU interne avec convergence assistée par IMU externe |
| imuassistalpha_set | double | Alpha / force du filtre complémentaire. Des valeurs plus élevées feront converger l'IMU interne vers la source d'assistance plus rapidement. La valeur par défaut est définie à une valeur basse de 0.001 car nous faisons maintenant plus confiance à l'IMU interne qu'auparavant. Les modes d'assistance sont conçus pour "tirer" très doucement l'IMU interne vers la source d'assistance choisie. |
Python
Les scripts Python permettent des données entrantes et sortantes arbitraires.
| llpython | NumberArray envoyé par les scripts Python. Accessible dans le code du robot. |
| llrobot | NumberArray envoyé par le robot. Accessible dans les SnapScripts Python. |
Données brutes
Coins :
Activez "send contours" dans l'onglet "Output" pour diffuser les coordonnées des coins :
| tcornxy | Tableau de nombres des coordonnées des coins [x0,y0,x1,y1......] |
Cibles brutes :
Limelight publie trois contours bruts sur NetworkTables qui ne sont pas influencés par votre mode de regroupement. C'est-à-dire qu'ils sont filtrés avec les paramètres de votre pipeline, mais jamais regroupés. X et Y sont retournés en espace d'écran normalisé (-1 à 1) plutôt qu'en degrés.
| rawtargets | [txnc,tync,ta,txnc2,tync2,ta2....] |
Fiduciaires bruts :
Obtenir tous les fiduciaires valides (non filtrés)
| rawfiducials | [id, txnc, tync, ta, distToCamera, distToRobot, ambiguity, id2.....] |
Détections brutes :
Obtenir tous les résultats de détection neuronale valides (non filtrés)
| rawdetections | [id, txnc, tync, ta, corner0x, corner0y, corner1x, corner1y, corner2x, corner2y, corner3x, corner3y, id2.....] |
Codes-barres bruts :
Obtenir tous les résultats de codes-barres valides (non filtrés)
| rawbarcodes | tableau de chaînes des données de codes-barres |