Aller au contenu principal

API NetworkTables

Limelight OS dispose d'un client NetworkTables 4. Il se connecte automatiquement au serveur NetworkTables 4 qui s'exécute sur les robots FRC en fonction du numéro d'équipe / ID configuré dans l'interface utilisateur des paramètres.

Toutes les données sont publiées dans une table qui correspond au nom de l'appareil (par exemple "limelight"). Si un nom d'hôte / surnom est attribué à votre caméra, le nom de la table correspondra au nom complet de la limelight (par exemple "limelight-top").

LimelightLib WPIJava et LimelightLib WPICPP interagissent avec les appareils Limelight via NetworkTables.

Données de Ciblage de Base

Utilisez le code suivant :

NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDouble(0);

pour récupérer ces données :

clétypedescription
tvint1 si une cible valide existe. 0 si aucune cible valide n'existe
txdoubleDécalage horizontal du réticule à la cible (LL1 : -27 degrés à 27 degrés / LL2 : -29.8 à 29.8 degrés)
tydoubleDécalage vertical du réticule à la cible (LL1 : -20.5 degrés à 20.5 degrés / LL2 : -24.85 à 24.85 degrés)
txncdoubleDécalage horizontal du pixel principal à la cible (degrés)
tyncdoubleDécalage vertical du pixel principal à la cible (degrés)
tadoubleZone de la cible (0% à 100% de l'image)
tldoubleContribution de latence du pipeline (ms). Ajouter à "cl" pour obtenir la latence totale.
cldoubleLatence de capture du pipeline (ms). Temps entre la fin de l'exposition de la ligne médiane du capteur et le début du pipeline de suivi.
t2ddoubleTableau contenant plusieurs valeurs pour les statistiques horodatées : [cibleValide, nombreCibles, latenceCible, latenceCapture, tx, ty, txnc, tync, ta, tid, indexClasseCibleDetecteur, indexClasseCibleClassifieur, pixelsLongCoteCible, pixelsCourtCoteCible, pixelsEtendueHorizontaleCible, pixelsEtendueVerticaleCible, degreesInclinaisonCible]
getpipeintIndex actif réel du pipeline de la caméra (0 .. 9)
getpipetypestringType de pipeline, par ex. "pipe_color"
jsonstringDump JSON complet des résultats de ciblage. Doit être activé par pipeline dans l'onglet 'output'
tclassstringNom de classe du résultat principal du détecteur neuronal ou du classificateur neuronal
tcdoubleArrayObtenir la couleur HSV moyenne sous la région du réticule (région de 3x3 pixels) sous forme de tableau de nombres
hbdoublevaleur de pulsation. Augmente à chaque image, se réinitialise à 2 milliards
hwdoubleArrayMétriques matérielles [fps, temp cpu, utilisation ram, temp]
crosshairsdoubleArrayRéticules 2D [cx0, cy0, cx1, cy1]
tcclassstringNom de la classe calculée par le pipeline de classification
tdclassstringNom de la détection principale du pipeline de détection

AprilTag et données 3D

Utilisez le code suivant :

NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDoubleArray(new double[6]);

pour récupérer ces données :

clétypedescription
botposedoubleArrayTransformation du robot dans l'espace du terrain. Translation (X,Y,Z) en mètres, Rotation (Roulis,Tangage,Lacet) en degrés, latence totale (cl+tl), nombre de tags, portée des tags, distance moyenne des tags par rapport à la caméra, surface moyenne des tags (pourcentage de l'image)
botpose_wpibluedoubleArrayTransformation du robot dans l'espace du terrain (origine WPILIB côté bleu). Translation (X,Y,Z) en mètres, Rotation (Roulis,Tangage,Lacet) en degrés, latence totale (cl+tl), nombre de tags, portée des tags, distance moyenne des tags par rapport à la caméra, surface moyenne des tags (pourcentage de l'image)
botpose_wpireddoubleArrayTransformation du robot dans l'espace du terrain (origine WPILIB côté rouge). Translation (X,Y,Z) en mètres, Rotation (Roulis,Tangage,Lacet) en degrés, latence totale (cl+tl), nombre de tags, portée des tags, distance moyenne des tags par rapport à la caméra, surface moyenne des tags (pourcentage de l'image)
botpose_orbdoubleArrayTransformation du robot dans l'espace du terrain (Megatag2). Translation (X,Y,Z) en mètres, Rotation (Roulis,Tangage,Lacet) en degrés, latence totale (cl+tl), nombre de tags, portée des tags, distance moyenne des tags par rapport à la caméra, surface moyenne des tags (pourcentage de l'image)
botpose_orb_wpibluedoubleArrayTransformation du robot dans l'espace du terrain (Megatag2) (origine WPILIB côté bleu). Translation (X,Y,Z) en mètres, Rotation (Roulis,Tangage,Lacet) en degrés, latence totale (cl+tl), nombre de tags, portée des tags, distance moyenne des tags par rapport à la caméra, surface moyenne des tags (pourcentage de l'image)
botpose_orb_wpireddoubleArrayTransformation du robot dans l'espace du terrain (Megatag2) (origine WPILIB côté rouge). Translation (X,Y,Z) en mètres, Rotation (Roulis,Tangage,Lacet) en degrés, latence totale (cl+tl), nombre de tags, portée des tags, distance moyenne des tags par rapport à la caméra, surface moyenne des tags (pourcentage de l'image)
camerapose_targetspacedoubleArrayTransformation 3D de la caméra dans le système de coordonnées de l'AprilTag principal en vue (tableau (6)) [tx, ty, tz, tangage, lacet, roulis] (mètres, degrés)
targetpose_cameraspacedoubleArrayTransformation 3D de l'AprilTag principal en vue dans le système de coordonnées de la caméra (tableau (6)) [tx, ty, tz, tangage, lacet, roulis] (mètres, degrés)
targetpose_robotspacedoubleArrayTransformation 3D de l'AprilTag principal en vue dans le système de coordonnées du robot (tableau (6)) [tx, ty, tz, tangage, lacet, roulis] (mètres, degrés)
botpose_targetspacedoubleArrayTransformation 3D du robot dans le système de coordonnées de l'AprilTag principal en vue (tableau (6)) [tx, ty, tz, tangage, lacet, roulis] (mètres, degrés)
camerapose_robotspacedoubleArrayTransformation 3D de la caméra dans le système de coordonnées du robot (tableau (6))
tidintID de l'AprilTag principal en vue
stddevsdoubleArrayÉcarts-types MegaTag [MT1x, MT1y, MT1z, MT1roulis, MT1tangage, MT1lacet, MT2x, MT2y, MT2z, MT2roulis, MT2tangage, MT2lacet]
camerapose_robotspace_setdoubleArrayDÉFINIR la pose de la caméra dans le système de coordonnées du robot.
priorityidintDÉFINIR l'ID requis pour le ciblage tx/ty. Ignorer les autres cibles. N'affecte pas la localisation
robot_orientation_setdoubleArrayDÉFINIR l'orientation du robot et les vitesses angulaires en degrés et degrés par seconde [lacet, vitesse_lacet, tangage, vitesse_tangage, roulis, vitesse_roulis]
fiducial_id_filters_setdoubleArrayRemplacer les IDs fiduciaires valides pour la localisation (tableau)
fiducial_offset_setdoubleArrayDÉFINIR le décalage du point d'intérêt 3D [x,y,z]

Contrôles de la Caméra

Utilisez le code suivant :

NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").setNumber(<value>);

pour définir ces données :

ledModeDéfinit l'état LED de la limelight
[0]utiliser le mode LED défini dans le pipeline actuel
[1]forcer l'arrêt
[2]forcer le clignotement
[3]forcer l'allumage
pipelineDéfinit le pipeline actuel de la limelight
0 .. 9Sélectionner le pipeline 0..9
streamDéfinit le mode de streaming de la limelight
0Standard - Flux côte à côte si une webcam est connectée à la Limelight
1PiP Principal - Le flux de la caméra secondaire est placé dans le coin inférieur droit du flux de la caméra principale
2PiP 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 avoir 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)
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);

Python

Les scripts Python permettent des données entrantes et sortantes arbitraires.

llpythonNumberArray envoyé par les scripts Python. Celui-ci est accessible dans le code du robot.
llrobotNumberArray envoyé par le robot. Celui-ci est accessible dans les SnapScripts Python.

Données brutes

Coins :

Activez "send contours" dans l'onglet "Output" pour diffuser les coordonnées des coins :

tcornxyTableau de nombres des coordonnées des coins [x0,y0,x1,y1......]

Cibles brutes :

Limelight publie trois contours bruts vers NetworkTables qui ne sont pas influencés par votre mode de regroupement. C'est-à-dire qu'ils sont filtrés avec vos paramètres de pipeline, mais jamais regroupés. X et Y sont renvoyés dans l'espace écran normalisé (-1 à 1) plutôt qu'en degrés.

rawtargets[txnc,tync,ta,txnc2,tync2,ta2....]

Fiducials bruts :

Obtenir tous les fiducials valides (non filtrés)

rawfiducials[id, txnc, tync, ta, distToCamera, distToRobot, ambiguity, id2.....]

Détections brutes :

Obtenir tous les résultats valides (non filtrés) de détection neurale

rawdetections[id, txnc, tync, ta, corner0x, corner0y, corner1x, corner1y, corner2x, corner2y, corner3x, corner3y, id2.....]

Codes-barres bruts :

Obtenir tous les résultats valides (non filtrés) de codes-barres

rawbarcodestableau de chaînes de caractères de données de codes-barres