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 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 :

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 vers la cible (LL1: -27 degrés à 27 degrés / LL2: -29.8 à 29.8 degrés)
tydoubleDécalage vertical du réticule vers la cible (LL1: -20.5 degrés à 20.5 degrés / LL2: -24.85 à 24.85 degrés)
txncdoubleDécalage horizontal du pixel principal vers la cible (degrés)
tyncdoubleDécalage vertical du pixel principal vers la cible (degrés)
tadoubleSurface de la cible (0% à 100% de l'image)
tldoubleContribution de latence du pipeline (ms). Ajouter à "cl" pour obtenir la latence totale.
cldoubleLatence 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.
t2ddoubleTableau 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]
getpipeintIndex réel du pipeline actif de la caméra (0 .. 9)
getpipetypestringType de pipeline ex: "pipe_color"
jsonstringExport 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 NumberArray
hbdoubleValeur de battement de cœur. Augmente d'une unité par image, se réinitialise à 2 milliards
hwdoubleArrayMétriques matérielles [fps, température CPU, utilisation RAM, température]
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 (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_wpibluedoubleArrayTransformation 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_wpireddoubleArrayTransformation 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_orbdoubleArrayTransformation 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_wpibluedoubleArrayTransformation 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_wpireddoubleArrayTransformation 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_targetspacedoubleArrayTransformation 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_cameraspacedoubleArrayTransformation 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_robotspacedoubleArrayTransformation 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_targetspacedoubleArrayTransformation 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_robotspacedoubleArrayTransformation 3D de la caméra dans le système de coordonnées du robot (tableau (6))
tidintID de l'AprilTag principal visible
stddevsdoubleArrayÉcarts-types MegaTag [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw]
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 [yaw,yawrate,pitch,pitchrate,roll,rollrate]
fiducial_id_filters_setdoubleArrayRemplacer les IDs de 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 des LED du limelight
[0]utiliser le mode LED défini dans le pipeline actuel
[1]forcer éteint
[2]forcer clignotement
[3]forcer allumé
pipelineDéfinit le pipeline actuel du limelight
0 .. 9Sélectionner le pipeline 0..9
streamDéfinit le mode de streaming du limelight
0Standard - Flux côte à côte si une webcam est connectée au 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 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.
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);

Contrôles IMU

clétypedescription
imumode_setintDé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_setdoubleAlpha / 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.

llpythonNumberArray envoyé par les scripts Python. Accessible dans le code du robot.
llrobotNumberArray 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 :

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 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