Saltar al contenido principal

API de NetworkTables

Limelight OS cuenta con un Cliente NetworkTables 4. Se conecta automáticamente al Servidor NetworkTables 4 que se ejecuta en los Robots FRC basándose en el Número / ID de Equipo 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 Apuntado

Utilice 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 al Objetivo (LL1: -27 grados a 27 grados / LL2: -29.8 a 29.8 grados)
tydoubleDesplazamiento Vertical Desde la Mira al Objetivo (LL1: -20.5 grados a 20.5 grados / LL2: -24.85 a 24.85 grados)
txncdoubleDesplazamiento Horizontal Desde el Píxel Principal al Objetivo (grados)
tyncdoubleDesplazamiento Vertical Desde el Píxel Principal al Objetivo (grados)
tadoubleÁrea del Objetivo (0% de la imagen a 100% de la imagen)
tldoubleContribución de latencia del pipeline (ms). Sumar 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 de marca de tiempo coincidente: [objetivoVálido, conteoObjetivos, latenciaObjetivo, latenciaCaptura, tx, ty, txnc, tync, ta, tid, índiceClaseObjetivoDetector, índiceClaseObjetivoClasificador, píxelesLadoLargoObjetivo, píxelesLadoCortoObjetivo, píxelesExtensionHorizontalObjetivo, píxelesExtensionVerticalObjetivo, gradosInclinaciónObjetivo]
getpipeintÍndice verdadero del pipeline activo de la cámara (0 .. 9)
getpipetypestringTipo de Pipeline, por ejemplo "pipe_color"
jsonstringVolcado JSON completo de los resultados de apuntado. Debe estar habilitado por pipeline en la pestaña 'output'
tclassstringNombre de clase del resultado principal del detector neural o del 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 2 mil millones
hwdoubleArrayMétricas de HW [fps, temp cpu, uso de ram, temp]
crosshairsdoubleArrayMiras 2D [cx0, cy0, cx1, cy1]
tcclassstringNombre de la clase computada 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 del campo. Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de etiquetas, extensión de etiquetas, distancia promedio de etiquetas desde la cámara, área promedio de etiquetas (porcentaje de imagen)
botpose_wpibluedoubleArrayTransformación del robot en el espacio del campo (origen WPILIB de la estación del conductor azul). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de etiquetas, extensión de etiquetas, distancia promedio de etiquetas desde la cámara, área promedio de etiquetas (porcentaje de imagen)
botpose_wpireddoubleArrayTransformación del robot en el espacio del campo (origen WPILIB de la estación del conductor rojo). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de etiquetas, extensión de etiquetas, distancia promedio de etiquetas desde la cámara, área promedio de etiquetas (porcentaje de imagen)
botpose_orbdoubleArrayTransformació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), recuento de etiquetas, extensión de etiquetas, distancia promedio de etiquetas desde la cámara, área promedio de etiquetas (porcentaje de imagen)
botpose_orb_wpibluedoubleArrayTransformación del robot en el espacio del campo (Megatag2) (origen WPILIB de la estación del conductor azul). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de etiquetas, extensión de etiquetas, distancia promedio de etiquetas desde la cámara, área promedio de etiquetas (porcentaje de imagen)
botpose_orb_wpireddoubleArrayTransformación del robot en el espacio del campo (Megatag2) (origen WPILIB de la estación del conductor rojo). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), recuento de etiquetas, extensión de etiquetas, distancia promedio de etiquetas desde la cámara, área promedio de etiquetas (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
camerapose_robotspace_setdoubleArrayESTABLECER la pose de la cámara en el sistema de coordenadas del robot.
priorityidintESTABLECER el ID requerido para el apuntado 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 los ids fiduciales válidos para la localización (array)
fiducial_offset_setdoubleArrayESTABLECER el Desplazamiento del Punto de Interés 3D [x,y,z]

Controles de la Cámara

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

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

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:

Habilite "enviar contornos" en la pestaña "Salida" para transmitir las coordenadas de las esquinas:

tcornxyArray numérico de coordenadas de esquinas [x0,y0,x1,y1......]

Objetivos sin procesar:

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

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

Fiduciales sin procesar:

Obtener todos los fiduciales válidos (sin filtrar)

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

Detecciones sin procesar:

Obtener todos los resultados válidos (sin filtrar) de detección neural

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

Códigos de barras sin procesar:

Obtener todos los resultados válidos (sin filtrar) de códigos de barras

rawbarcodesarray de cadenas de datos de códigos de barras