Saltar al contenido principal

API de NetworkTables

Limelight OS incluye un Cliente NetworkTables 4. Se conecta automáticamente al Servidor NetworkTables 4 que se ejecuta en Robots FRC basado 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 (por ejemplo, "limelight"). Si se asigna un nombre de host / apodo a tu cámara, el nombre de la tabla coincidirá con el nombre completo de limelight (por ejemplo, "limelight-top").

LimelightLib WPIJava y LimelightLib WPICPP interactúan con los dispositivos Limelight a través de NetworkTables.

Datos Básicos de Seguimiento

Utiliza el siguiente código:

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

para recuperar estos datos:

clavetipodescripción
tvint1 si existe un objetivo válido. 0 si no existen objetivos válidos
txdoubleDesplazamiento Horizontal Desde la Mira Hasta el Objetivo (LL1: -27 grados a 27 grados / LL2: -29.8 a 29.8 grados)
tydoubleDesplazamiento Vertical Desde la Mira Hasta el Objetivo (LL1: -20.5 grados a 20.5 grados / LL2: -24.85 a 24.85 grados)
txncdoubleDesplazamiento Horizontal Desde el Píxel Principal Hasta el Objetivo (grados)
tyncdoubleDesplazamiento Vertical Desde el Píxel Principal Hasta el Objetivo (grados)
tadoubleÁrea del Objetivo (0% de la imagen a 100% de la imagen)
tldoubleContribución de latencia del pipeline (ms). Añadir a "cl" para obtener la latencia total.
cldoubleLatencia de captura del pipeline (ms). Tiempo entre el final de la exposición de la fila central del sensor hasta el inicio del pipeline de seguimiento.
t2ddoubleArray que contiene varios valores para estadísticas con marca de tiempo: [targetValid, targetCount, targetLatency, captureLatency, tx, ty, txnc, tync, ta, tid, targetClassIndexDetector, targetClassIndexClassifier, targetLongSidePixels, targetShortSidePixels, targetHorizontalExtentPixels, targetVerticalExtentPixels, targetSkewDegrees]
getpipeintÍndice activo real del pipeline de la cámara (0 .. 9)
getpipetypestringTipo de Pipeline, por ejemplo "pipe_color"
jsonstringVolcado JSON completo de los resultados de seguimiento. Debe habilitarse por pipeline en la pestaña 'output'
tclassstringNombre de clase del resultado principal del detector neural o resultado del clasificador neural
tcdoubleArrayObtener el color HSV promedio debajo de la región de la mira (región de 3x3 píxeles) como un NumberArray
hbdoublevalor de latido. Aumenta una vez por fotograma, se reinicia a los 2 mil millones
hwdoubleArrayMétricas de hardware [fps, temperatura de CPU, uso de RAM, temperatura]
crosshairsdoubleArrayMiras 2D [cx0, cy0, cx1, cy1]
tcclassstringNombre de la clase calculada por el pipeline clasificador
tdclassstringNombre de la detección principal del pipeline detector

AprilTag y Datos 3D

Utilice el siguiente código:

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

para recuperar estos datos:

clavetipodescripción
botposedoubleArrayTransformación del robot en el espacio de campo. Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de tags, extensión de tags, distancia promedio de tags desde la cámara, área promedio de tags (porcentaje de imagen)
botpose_wpibluedoubleArrayTransformación del robot en el espacio de campo (origen WPILIB de la estación azul). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de tags, extensión de tags, distancia promedio de tags desde la cámara, área promedio de tags (porcentaje de imagen)
botpose_wpireddoubleArrayTransformación del robot en el espacio de campo (origen WPILIB de la estación roja). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de tags, extensión de tags, distancia promedio de tags desde la cámara, área promedio de tags (porcentaje de imagen)
botpose_orbdoubleArrayTransformación del robot en el espacio de campo (Megatag2). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de tags, extensión de tags, distancia promedio de tags desde la cámara, área promedio de tags (porcentaje de imagen)
botpose_orb_wpibluedoubleArrayTransformación del robot en el espacio de campo (Megatag2) (origen WPILIB de la estación azul). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de tags, extensión de tags, distancia promedio de tags desde la cámara, área promedio de tags (porcentaje de imagen)
botpose_orb_wpireddoubleArrayTransformación del robot en el espacio de campo (Megatag2) (origen WPILIB de la estación roja). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de tags, extensión de tags, distancia promedio de tags desde la cámara, área promedio de tags (porcentaje de imagen)
camerapose_targetspacedoubleArrayTransformación 3D de la cámara en el sistema de coordenadas del AprilTag principal en vista (array (6)) [tx, ty, tz, pitch, yaw, roll] (metros, grados)
targetpose_cameraspacedoubleArrayTransformación 3D del AprilTag principal en vista en el sistema de coordenadas de la Cámara (array (6)) [tx, ty, tz, pitch, yaw, roll] (metros, grados)
targetpose_robotspacedoubleArrayTransformación 3D del AprilTag principal en vista en el sistema de coordenadas del Robot (array (6)) [tx, ty, tz, pitch, yaw, roll] (metros, grados)
botpose_targetspacedoubleArrayTransformación 3D del robot en el sistema de coordenadas del AprilTag principal en vista (array (6)) [tx, ty, tz, pitch, yaw, roll] (metros, grados)
camerapose_robotspacedoubleArrayTransformación 3D de la cámara en el sistema de coordenadas del robot (array (6))
tidintID del AprilTag principal en vista
stddevsdoubleArrayDesviaciones Estándar de MegaTag [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw]
camerapose_robotspace_setdoubleArrayESTABLECER la pose de la cámara en el sistema de coordenadas del robot.
priorityidintESTABLECER el ID requerido para el objetivo tx/ty. Ignorar otros objetivos. No afecta la localización
robot_orientation_setdoubleArrayESTABLECER la orientación del robot y velocidades angulares en grados y grados por segundo [yaw,yawrate,pitch,pitchrate,roll,rollrate]
fiducial_id_filters_setdoubleArrayAnular IDs fiduciales válidos para localización (array)
fiducial_offset_setdoubleArrayESTABLECER el desplazamiento del punto de interés 3D [x,y,z]

Controles de Cámara

Utilice el siguiente código:

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

para establecer estos datos:

ledModeEstablece el estado del LED de limelight
[0]usar el Modo LED establecido en el pipeline actual
[1]forzar apagado
[2]forzar parpadeo
[3]forzar encendido
pipelineEstablece el pipeline actual de limelight
0 .. 9Seleccionar pipeline 0..9
streamEstablece el modo de transmisión de limelight
0Estándar - Transmisiones lado a lado si hay una webcam conectada a Limelight
1PiP Principal - La transmisión de la cámara secundaria se coloca en la esquina inferior derecha de la transmisión de la cámara principal
2PiP Secundaria - La transmisión de la cámara principal se coloca en la esquina inferior derecha de la transmisión 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 mínimo o máximo de X del rectángulo de recorte (-1 a 1)
[1]X1 - Valor mínimo o máximo de X del rectángulo de recorte (-1 a 1)
[2]Y0 - Valor mínimo o máximo de Y del rectángulo de recorte (-1 a 1)
[3]Y1 - Valor mínimo o máximo de Y 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.
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);

Controles de IMU

clavetipodescripción
imumode_setintEstablecer el modo IMU. 0 - usar IMU externo, 1 - usar IMU externo, inicializar IMU interno, 2 - usar interno, 3 - usar interno con convergencia asistida por MT1, 4 - usar IMU interno con convergencia asistida por IMU externo
imuassistalpha_setdoubleFiltro complementario alfa / fuerza. Valores más altos harán que el IMU interno converja más rápidamente en la fuente de asistencia. El valor predeterminado se establece 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" suavemente del IMU interno hacia la fuente de asistencia elegida.

Python

Los scripts de Python permiten datos arbitrarios de entrada y salida.

llpythonNumberArray enviado por scripts de Python. Esto es accesible dentro del código del robot.
llrobotNumberArray enviado por el robot. Esto es accesible dentro de los SnapScripts de Python.

Datos sin procesar

Esquinas:

Habilita "send contours" en la pestaña "Output" para transmitir coordenadas de esquinas:

tcornxyArray de números con coordenadas de esquinas [x0,y0,x1,y1......]

Objetivos sin procesar:

Limelight publica tres contornos sin procesar en NetworkTables que no están influenciados por tu modo de agrupación. Es decir, se filtran con los parámetros de tu pipeline, pero nunca se agrupan. X e Y se devuelven en espacio de pantalla normalizado (-1 a 1) en lugar de grados.

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

Marcadores fiduciales sin procesar:

Obtén todos los marcadores fiduciales válidos (sin filtrar)

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

Detecciones sin procesar:

Obtén todos los resultados válidos (sin filtrar) de detección neuronal

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

Códigos de barras sin procesar:

Obtén todos los resultados válidos (sin filtrar) de códigos de barras

rawbarcodes array de strings con datos de códigos de barras