API de NetworkTables
Limelight OS incluye un Cliente de NetworkTables 4. Se conecta automáticamente al Servidor de NetworkTables 4 que se ejecuta en los Robots FRC basándose en el Número de Equipo / ID configurado en la interfaz de Configuración.
Todos los datos se publican en una tabla que coincide con el nombre del dispositivo (ej. "limelight"). Si se asigna un hostname / apodo a tu cámara, el nombre de la tabla coincidirá con el nombre completo del limelight (ej. "limelight-top").
LimelightLib WPIJava y LimelightLib WPICPP interactúan con los dispositivos Limelight a través de NetworkTables.
Datos Básicos de Seguimiento
Usa el siguiente código:
- 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>');
para obtener estos datos:
| clave | tipo | descripción |
|---|---|---|
| tv | int | 1 si existe un objetivo válido. 0 si no existen objetivos válidos |
| tx | double | Desplazamiento Horizontal Desde la Cruceta al Objetivo (LL1: -27 grados a 27 grados / LL2: -29.8 a 29.8 grados) |
| ty | double | Desplazamiento Vertical Desde la Cruceta al Objetivo (LL1: -20.5 grados a 20.5 grados / LL2: -24.85 a 24.85 grados) |
| txnc | double | Desplazamiento Horizontal Desde el Píxel Principal al Objetivo (grados) |
| tync | double | Desplazamiento Vertical Desde el Píxel Principal al Objetivo (grados) |
| ta | double | Área del Objetivo (0% de la imagen a 100% de la imagen) |
| tl | double | Contribución de latencia del pipeline (ms). Suma a "cl" para obtener la latencia total. |
| cl | double | Latencia del pipeline de captura (ms). Tiempo entre el final de la exposición de la fila central del sensor y el inicio del pipeline de seguimiento. |
| t2d | double | Array que contiene varios valores para estadísticas de marca de tiempo sincronizada: [targetValid, targetCount, targetLatency, captureLatency, tx, ty, txnc, tync, ta, tid, targetClassIndexDetector , targetClassIndexClassifier, targetLongSidePixels, targetShortSidePixels, targetHorizontalExtentPixels, targetVerticalExtentPixels, targetSkewDegrees] |
| getpipe | int | Índice real del pipeline activo de la cámara (0 .. 9) |
| getpipetype | string | Tipo de Pipeline ej. "pipe_color" |
| json | string | Volcado JSON completo de los resultados de seguimiento. Debe habilitarse por pipeline en la pestaña 'output' |
| tclass | string | Nombre de clase del resultado principal del detector neuronal o resultado del clasificador neuronal |
| tc | doubleArray | Obtiene el color HSV promedio debajo de la región de la cruceta (región de 3x3 píxeles) como un NumberArray |
| hb | double | Valor de heartbeat. Incrementa una vez por frame, se reinicia en 2 mil millones |
| hw | doubleArray | Métricas de HW [fps, temp cpu, uso de ram, temp] |
| crosshairs | doubleArray | Crucetas 2D [cx0, cy0, cx1, cy1] |
| tcclass | string | Nombre de la clase calculada del pipeline clasificador |
| tdclass | string | Nombre de la detección principal del pipeline detector |
AprilTag y Datos 3D
Usa el siguiente código:
- Java
- C++
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDoubleArray(new double[6]);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumberArray("<variablename>",std::vector<double>(6));
para obtener estos datos:
| clave | tipo | descripción |
|---|---|---|
| botpose | doubleArray | Transformación del robot en el espacio del campo. Traslación (X,Y,Z) en metros, Rotación(Roll,Pitch,Yaw) en grados, latencia total (cl+tl), cantidad de tags, extensión de tags, distancia promedio del tag a la cámara, área promedio del tag (porcentaje de imagen) |
| botpose_wpiblue | doubleArray | Transformación del robot en el espacio del campo (origen WPILIB estación de conductores azul). Traslación (X,Y,Z) en metros, Rotación(Roll,Pitch,Yaw) en grados, latencia total (cl+tl), cantidad de tags, extensión de tags, distancia promedio del tag a la cámara, área promedio del tag (porcentaje de imagen) |
| botpose_wpired | doubleArray | Transformación del robot en el espacio del campo (origen WPILIB estación de conductores roja). Traslación (X,Y,Z) en metros, Rotación(Roll,Pitch,Yaw) en grados, latencia total (cl+tl), cantidad de tags, extensión de tags, distancia promedio del tag a la cámara, área promedio del tag (porcentaje de imagen) |
| botpose_orb | doubleArray | Transformación del robot en el espacio del campo (Megatag2). Traslación (X,Y,Z) en metros, Rotación(Roll,Pitch,Yaw) en grados, latencia total (cl+tl), cantidad de tags, extensión de tags, distancia promedio del tag a la cámara, área promedio del tag (porcentaje de imagen) |
| botpose_orb_wpiblue | doubleArray | Transformación del robot en el espacio del campo (Megatag2) (origen WPILIB estación de conductores azul). Traslación (X,Y,Z) en metros, Rotación(Roll,Pitch,Yaw) en grados, latencia total (cl+tl), cantidad de tags, extensión de tags, distancia promedio del tag a la cámara, área promedio del tag (porcentaje de imagen) |
| botpose_orb_wpired | doubleArray | Transformación del robot en el espacio del campo (Megatag2) (origen WPILIB estación de conductores roja). Traslación (X,Y,Z) en metros, Rotación(Roll,Pitch,Yaw) en grados, latencia total (cl+tl), cantidad de tags, extensión de tags, distancia promedio del tag a la cámara, área promedio del tag (porcentaje de imagen) |
| camerapose_targetspace | doubleArray | Transformación 3D de la cámara en el sistema de coordenadas del AprilTag principal visible (array (6)) [tx, ty, tz, pitch, yaw, roll] (metros, grados) |
| targetpose_cameraspace | doubleArray | Transformación 3D del AprilTag principal visible en el sistema de coordenadas de la Cámara (array (6)) [tx, ty, tz, pitch, yaw, roll] (metros, grados) |
| targetpose_robotspace | doubleArray | Transformación 3D del AprilTag principal visible en el sistema de coordenadas del Robot (array (6)) [tx, ty, tz, pitch, yaw, roll] (metros, grados) |
| botpose_targetspace | doubleArray | Transformación 3D del robot en el sistema de coordenadas del AprilTag principal visible (array (6)) [tx, ty, tz, pitch, yaw, roll] (metros, grados) |
| camerapose_robotspace | doubleArray | Transformación 3D de la cámara en el sistema de coordenadas del robot (array (6)) |
| tid | int | ID del AprilTag principal visible |
| stddevs | doubleArray | Desviaciones Estándar de MegaTag [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw] |
| camerapose_robotspace_set | doubleArray | ESTABLECER la pose de la cámara en el sistema de coordenadas del robot. |
| priorityid | int | ESTABLECER el ID requerido para el seguimiento tx/ty. Ignora otros objetivos. No afecta la localización |
| robot_orientation_set | doubleArray | ESTABLECER Orientación del Robot y velocidades angulares en grados y grados por segundo[yaw,yawrate,pitch,pitchrate,roll,rollrate] |
| fiducial_id_filters_set | doubleArray | Sobrescribir IDs de fiduciales válidos para localización (array) |
| fiducial_offset_set | doubleArray | ESTABLECER el Desplazamiento del Punto de Interés 3D [x,y,z] |
Controles de Cámara
Usa el siguiente código:
- 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>)
para establecer estos datos:
| ledMode | Establece el estado del LED del limelight |
|---|---|
| [0] | usar el Modo LED establecido en el pipeline actual |
| [1] | forzar apagado |
| [2] | forzar parpadeo |
| [3] | forzar encendido |
| pipeline | Establece el pipeline actual del limelight |
|---|---|
| 0 .. 9 | Seleccionar pipeline 0..9 |
| stream | Establece el modo de streaming del limelight |
|---|---|
| 0 | Estándar - Streams lado a lado si hay una webcam conectada al Limelight |
| 1 | PiP Principal - El stream de la cámara secundaria se coloca en la esquina inferior derecha del stream de la cámara principal |
| 2 | PiP Secundario - El stream de la cámara principal se coloca en la esquina inferior derecha del stream de la cámara secundaria |
| crop | (Array) Establece el rectángulo de recorte. El pipeline debe utilizar el rectángulo de recorte predeterminado en la interfaz web. El array debe tener exactamente 4 entradas. |
|---|---|
| [0] | X0 - Valor X Mín o Máx del rectángulo de recorte (-1 a 1) |
| [1] | X1 - Valor X Mín o Máx del rectángulo de recorte (-1 a 1) |
| [2] | Y0 - Valor Y Mín o Máx del rectángulo de recorte (-1 a 1) |
| [3] | Y1 - Valor Y Mín o Máx del rectángulo de recorte (-1 a 1) |
| throttle_set | (int) Recomendamos establecer esto en 100-200 mientras está deshabilitado. Establece el número de frames a omitir entre frames procesados para reducir el aumento de temperatura. Las salidas no se ponen a cero durante los frames omitidos. |
|---|
- 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
Controles de IMU
| clave | tipo | descripción |
|---|---|---|
| imumode_set | int | Establecer el modo imu. 0 - usar imu externo, 1 - usar imu externo, sembrar imu interno, 2 - usar interno, 3 - usar interno con convergencia asistida por MT1, 4 - usar IMU interno con convergencia asistida por IMU externo |
| imuassistalpha_set | double | Alpha / fuerza del filtro complementario. Valores más altos harán que el imu interno converja hacia la fuente de asistencia más rápidamente. El valor predeterminado está establecido en un valor bajo 0.001 porque ahora confiamos más en el IMU interno que antes. Los modos de asistencia están diseñados para "tirar" muy suavemente el imu interno hacia la fuente de asistencia elegida. |
Python
Los scripts de Python permiten datos arbitrarios de entrada y salida.
| llpython | NumberArray enviado por scripts de python. Esto es accesible dentro del código del robot. |
| llrobot | NumberArray enviado por el robot. Esto es accesible dentro de los SnapScripts de python. |
Datos Crudos
Esquinas:
Habilita "send contours" en la pestaña "Output" para transmitir coordenadas de esquinas:
| tcornxy | Array de números de coordenadas de esquinas [x0,y0,x1,y1......] |
Objetivos Crudos:
Limelight publica tres contornos crudos a NetworkTables que no están influenciados por tu modo de agrupación. Es decir, están filtrados con los parámetros de tu pipeline, pero nunca agrupados. X e Y se devuelven en espacio de pantalla normalizado (-1 a 1) en lugar de grados.
| rawtargets | [txnc,tync,ta,txnc2,tync2,ta2....] |
Fiduciales Crudos:
Obtener todos los fiduciales válidos (sin filtrar)
| rawfiducials | [id, txnc, tync, ta, distToCamera, distToRobot, ambiguity, id2.....] |
Detecciones Crudas:
Obtener todos los resultados de detección neuronal válidos (sin filtrar)
| rawdetections | [id, txnc, tync, ta, corner0x, corner0y, corner1x, corner1y, corner2x, corner2y, corner3x, corner3y, id2.....] |
Códigos de Barras Crudos:
Obtener todos los resultados de códigos de barras válidos (sin filtrar)
| rawbarcodes | array de strings de datos de códigos de barras |