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:
- 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 central 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, por ejemplo "pipe_color" |
json | string | Volcado JSON completo de los resultados de apuntado. Debe estar habilitado por pipeline en la pestaña 'output' |
tclass | string | Nombre de clase del resultado principal del detector neural o del 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 fotograma, se reinicia a 2 mil millones |
hw | doubleArray | Métricas de HW [fps, temp cpu, uso de ram, temp] |
crosshairs | doubleArray | Miras 2D [cx0, cy0, cx1, cy1] |
tcclass | string | Nombre de la clase computada por el pipeline clasificador |
tdclass | string | Nombre de la detección principal del pipeline detector |
AprilTag y Datos 3D
Utilice 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 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_wpiblue | doubleArray | Transformació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_wpired | doubleArray | Transformació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_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), recuento de etiquetas, extensión de etiquetas, distancia promedio de etiquetas desde la cámara, área promedio de etiquetas (porcentaje de imagen) |
botpose_orb_wpiblue | doubleArray | Transformació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_wpired | doubleArray | Transformació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_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 |
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 apuntado tx/ty. Ignorar otros objetivos. No afecta la localización |
robot_orientation_set | doubleArray | ESTABLECER la 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 los ids fiduciales válidos para la localización (array) |
fiducial_offset_set | doubleArray | ESTABLECER el Desplazamiento del Punto de Interés 3D [x,y,z] |
Controles de la 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 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) |
- 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 de entrada y salida 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 "enviar contornos" en la pestaña "Salida" 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
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
rawbarcodes | array de cadenas de datos de códigos de barras |