Aller au contenu principal

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 utilisateur des paramètres.

Toutes les données sont publiées dans une table correspondant 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% de l'image à 100% de l'image)
tldoubleContribution de latence du pipeline (ms). Ajoutez à "cl" pour obtenir la latence totale.
cldoubleLatence de capture du pipeline (ms). Temps entre la fin de l'exposition de la rangée centrale 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, indexClasseCibleClassificateur, pixelsLongCoteCible, pixelsCourtCoteCible, pixelsEtenduHorizontaleCible, pixelsEtenduVerticaleCible, degreesInclinaisonCible]
getpipeintVrai index du pipeline actif de la caméra (0 .. 9)
getpipetypestringType de pipeline, par exemple "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 résultat du classificateur neuronal
tcdoubleArrayObtenir la couleur HSV moyenne sous la région du réticule (région de 3x3 pixels) sous forme de NumberArray
hbdoubleValeur de battement de cœur. Augmente une fois par 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
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 de lacet, tangage, vitesse de tangage, roulis, vitesse de roulis]
fiducial_id_filters_setdoubleArrayRemplacer les ID 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 de la 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. Ceci est accessible dans le code du robot.
llrobotNumberArray envoyé par le robot. Ceci 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 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 renvoyés dans l'espace d'écran normalisé (-1 à 1) plutôt qu'en degrés.

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

Fiduciaires bruts :

Obtenez tous les fiduciaires valides (non filtrés)

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

Détections brutes :

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

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

Codes-barres bruts :

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

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