API de NetworkTables
Limelight OS incluye un Cliente NetworkTables 4. Se conecta automáticamente al Servidor NetworkTables 4 que se ejecuta en 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 (por ejemplo, "limelight"). Si se asigna un nombre de host / alias 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
Use 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 recuperar 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 Mira al Objetivo (LL1: -27 grados a 27 grados / LL2: -29.8 a 29.8 grados) |
ty | double | Desplazamiento Vertical Desde la Mira 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). Sumar a "cl" para obtener la latencia total. |
cl | double | Latencia de captura del pipeline (ms). Tiempo entre el final de la exposición de la fila media del sensor hasta el inicio del pipeline de seguimiento. |
t2d | double | Array 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] |
getpipe | int | Índice verdadero 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 estar habilitado por pipeline en la pestaña 'output' |
tclass | string | Nombre de clase del resultado principal del detector neural o resultado del clasificador neural |
tc | doubleArray | Obtener el color HSV promedio debajo de la región de la mira (región de 3x3 píxeles) como un NumberArray |
hb | double | valor de latido. Aumenta una vez por frame, se reinicia en 2 mil millones |
hw | doubleArray | Métricas de HW [fps, temperatura cpu, uso de ram, temp] |
crosshairs | doubleArray | Miras 2D [cx0, cy0, cx1, cy1] |
tcclass | string | Nombre de la clase computada del pipeline clasificador |
tdclass | string | Nombre de la detección principal del pipeline detector |
AprilTag y Datos 3D
Use 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 recuperar estos datos:
clave | tipo | descripción |
---|---|---|
botpose | doubleArray | Transformació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), conteo de tags, extensión de tags, distancia promedio de tags a la cámara, área promedio de tags (porcentaje de imagen) |
botpose_wpiblue | doubleArray | Transformación del robot en el espacio de campo (origen WPILIB estación azul). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), conteo de tags, extensión de tags, distancia promedio de tags a la cámara, área promedio de tags (porcentaje de imagen) |
botpose_wpired | doubleArray | Transformación del robot en el espacio de campo (origen WPILIB estación roja). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), conteo de tags, extensión de tags, distancia promedio de tags a la cámara, área promedio de tags (porcentaje de imagen) |
botpose_orb | doubleArray | Transformació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), conteo de tags, extensión de tags, distancia promedio de tags a la cámara, área promedio de tags (porcentaje de imagen) |
botpose_orb_wpiblue | doubleArray | Transformación del robot en el espacio de campo (Megatag2) (origen WPILIB estación azul). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), conteo de tags, extensión de tags, distancia promedio de tags a la cámara, área promedio de tags (porcentaje de imagen) |
botpose_orb_wpired | doubleArray | Transformación del robot en el espacio de campo (Megatag2) (origen WPILIB estación roja). Traslación (X,Y,Z) en metros, Rotación (Roll,Pitch,Yaw) en grados, latencia total (cl+tl), conteo de tags, extensión de tags, distancia promedio de tags a la cámara, área promedio de tags (porcentaje de imagen) |
camerapose_targetspace | doubleArray | Transformació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_cameraspace | doubleArray | Transformació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_robotspace | doubleArray | Transformació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_targetspace | doubleArray | Transformació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_robotspace | doubleArray | Transformación 3D de la cámara en el sistema de coordenadas del robot (array (6)) |
tid | int | ID del AprilTag principal en vista |
stddevs | doubleArray | Desviaciones Estándar 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 objetivo tx/ty. Ignorar 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 | Anular IDs 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
Utiliza 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 de 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 de limelight |
---|---|
0 .. 9 | Seleccionar pipeline 0..9 |
stream | Establece el modo de transmisión de limelight |
---|---|
0 | Estándar - Transmisiones lado a lado si hay una webcam conectada a Limelight |
1 | PiP 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 |
2 | PiP Secundario - 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ín o Máx X del rectángulo de recorte (-1 a 1) |
[1] | X1 - Valor Mín o Máx X del rectángulo de recorte (-1 a 1) |
[2] | Y0 - Valor Mín o Máx Y del rectángulo de recorte (-1 a 1) |
[3] | Y1 - Valor Mín o Máx Y del rectángulo de recorte (-1 a 1) |
- 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
Python
Los scripts de Python permiten datos entrantes y salientes arbitrarios.
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 sin procesar
Esquinas:
Habilite "send contours" en la pestaña "Output" para transmitir las coordenadas de las esquinas:
tcornxy | Array 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
rawdetections | [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
rawbarcodes | array de cadenas de datos de códigos de barras |