Especificación de Resultados JSON
La salida de resultados JSON de Limelight es una colección de arrays que contienen resultados de seguimiento. Existen arrays separados para resultados retrorreflectivos, fiduciales, clasificadores neuronales y detectores neuronales. JSON es legible por humanos y fácil de analizar en cualquier lenguaje en cualquier plataforma, por lo que es perfecto para la mayoría de los casos de uso.
La misma salida de resultados JSON puede obtenerse usando las APIs REST/HTTP, Websocket y NetworkTables.
Analizar esta salida JSON es increíblemente fácil con nuestras bibliotecas de FRC.
Limelightlib tiene funcionalidad integrada que analiza el volcado JSON en un objeto LimelightResults.
https://github.com/LimelightVision/limelightlib-wpijava
https://github.com/LimelightVision/limelightlib-wpicpp
Cada resultado JSON contiene las siguientes entradas:
| Nombre de Clave | Descripción del Valor |
|---|---|
| tl | Latencia de seguimiento (milisegundos consumidos por el bucle de seguimiento en este frame) |
| cl | Latencia de captura (milisegundos entre el final de la exposición de la fila central y el inicio del bucle de seguimiento) |
| tx | Desplazamiento Horizontal Desde la Cruz al Objetivo (LL1: -27 grados a 27 grados / LL2: -29.8 a 29.8 grados) |
| ty | Desplazamiento Vertical Desde la Cruz al Objetivo (LL1: -20.5 grados a 20.5 grados / LL2: -24.85 a 24.85 grados) |
| txnc | Desplazamiento Horizontal Desde el Píxel Principal al Objetivo (grados) |
| tync | Desplazamiento Vertical Desde el Píxel Principal al Objetivo (grados) |
| ta | Área normalizada sin distorsión del objetivo (0-100) |
| PythonOut | Datos de salida de pipelines Python SnapScript |
| stdev_mt1 | Desviación Estándar MT1 [x, y, z, roll, pitch, yaw] (metros, grados) |
| stdev_mt2 | Desviación Estándar MT2 [x, y, z, roll, pitch, yaw] (metros, grados) |
| pID | Índice actual del Pipeline |
| pTYPE | Tipo actual del Pipeline ej. "pipe_color" |
| ts | Marca de tiempo en milisegundos desde el arranque. |
| v | Indicador de validez. 1 = objetivos válidos, 0 = sin objetivos válidos |
| botpose | Posición del robot (MegaTag): x,y,z, roll, pitch, yaw (metros, grados) |
| botpose_wpired | Posición del robot (MegaTag, estación de conductores WPI Rojo): x,y,z, roll, pitch, yaw (metros, grados) |
| botpose_wpiblue | Posición del robot (MegaTag, estación de conductores WPI Azul): x,y,z, roll, pitch, yaw (metros, grados) |
| botpose_orb | Posición del robot (MegaTag2): x,y,z, roll, pitch, yaw (metros, grados) |
| botpose_orb_wpired | Posición del robot (MegaTag2, estación de conductores WPI Rojo): x,y,z, roll, pitch, yaw (metros, grados) |
| botpose_orb_wpiblue | Posición del robot (MegaTag2, estación de conductores WPI Azul): x,y,z, roll, pitch, yaw (metros, grados) |
| botpose_avgarea | Área promedio de las etiquetas usadas para calcular la posición del robot |
| botpose_avgdist | Distancia máxima entre etiquetas usadas para calcular la posición del robot (metros) |
| botpose_span | Distancia máxima entre etiquetas usadas para calcular la posición del robot (metros) |
| botpose_tagcount | Número de etiquetas usadas para calcular la posición del robot |
| Retro | Array de resultados del pipeline de Color/Retrorreflectivo |
| Fiducial | Array de resultados del pipeline de AprilTag |
| Detector | Array de resultados del pipeline de Detector Neuronal |
| Classifier | Array de resultados del pipeline de Clasificador |
| Barcode | Array de resultados del pipeline de Código de Barras |
Resultados de Color/Retrorreflectivo
El array "Retro" contiene entradas con la siguiente estructura:
| Nombre de Clave | Descripción del Valor |
|---|---|
| t6c_ts | Posición de la Cámara en el espacio del objetivo calculada por solvepnp (x,y,z,rx,ry,rz) |
| t6r_fs | Posición del Robot en el espacio del campo calculada por solvepnp (x,y,z,rx,ry,rz) |
| t6r_ts | Posición del Robot en el espacio del objetivo calculada por solvepnp (x,y,z,rx,ry,rz) |
| t6t_cs | Posición del Objetivo en el espacio de la cámara calculada por solvepnp (x,y,z,rx,ry,rz) |
| t6t_rs | Posición del Objetivo en el espacio del robot calculada por solvepnp (x,y,z,rx,ry,rz) |
| ta | El tamaño del objetivo como porcentaje de la imagen (0-1) |
| tx | Coordenada X del centro del objetivo en grados relativa a la cruz. Positivo-derecha, centro-cero |
| tx_nocross | Coordenada X del centro del objetivo en grados relativa al píxel principal. Positivo-derecha, centro-cero |
| txp | Coordenada X del centro del objetivo en píxeles relativa a la cruz. Positivo-derecha, centro-cero |
| ty | Coordenada Y del centro del objetivo en grados relativa a la cruz. Positivo-abajo, centro-cero |
| ty_nocross | Coordenada Y del centro del objetivo en grados relativa al píxel principal. Positivo-derecha, centro-cero |
| typ | Coordenada Y del centro del objetivo en píxeles relativa a la cruz. Positivo-abajo, centro-cero |
| pts | Array de esquinas (píxeles) [x0,y0,x1,y1.....]. Debe habilitarse en la pestaña de salida |
Ejemplo JSON para Pipelines de Color / Retrorreflectivo
{
"Barcode": [],
"Classifier": [],
"Detector": [],
"Fiducial": [],
"PythonOut": [],
"Retro": [
{
"pts": [],
"t6c_ts": [],
"t6r_fs": [],
"t6r_ts": [],
"t6t_cs": [],
"t6t_rs": [],
"ta": 0.00531171215698123,
"tx": -4.535492777705656,
"tx_nocross": -4.428826910553056,
"txp": 542.53076171875,
"ty": -1.1722867231218714,
"ty_nocross": -0.09285491974145543,
"typ": 504.5538635253906
},
{
"pts": [],
"t6c_ts": [],
"t6r_fs": [],
"t6r_ts": [],
"t6t_cs": [],
"t6t_rs": [],
"ta": 0.005779948551207781,
"tx": 8.465099348209478,
"tx_nocross": 8.571765215362078,
"txp": 822.1087036132812,
"ty": -2.524207730360601,
"ty_nocross": -1.444775926980185,
"typ": 533.6112060546875
},
],
"botpose": [
0,
0,
0,
0,
0,
0
],
"botpose_avgarea": 0,
"botpose_avgdist": 0,
"botpose_orb": [
0,
0,
0,
0,
0,
0
],
"botpose_orb_wpiblue": [
0,
0,
0,
0,
0,
0
],
"botpose_orb_wpired": [
0,
0,
0,
0,
0,
0
],
"botpose_span": 0,
"botpose_tagcount": 0,
"botpose_wpiblue": [
0,
0,
0,
0,
0,
0
],
"botpose_wpired": [
0,
0,
0,
0,
0,
0
],
"cl": 37.619998931884766,
"focus_metric": 0,
"pID": 0,
"pTYPE": "pipe_color",
"stdev_mt1": [
0,
0,
0,
0,
0,
0
],
"stdev_mt2": [
0,
0,
0,
0,
0,
0
],
"t6c_rs": [
0,
0,
0,
0,
0,
0
],
"ta": 0.39156023412942886,
"tl": 22.64053726196289,
"ts": 215248.979204,
"tx": -4.3848327488723555,
"txnc": -4.278166881719756,
"ty": -1.1144596937982527,
"tync": -0.035027890417836716,
"v": 1
}
Resultados de AprilTag/Fiducial
El array "Fiducial" contiene entradas con la siguiente estructura:
| Nombre de Clave | Descripción del Valor |
|---|---|
| fid | ID de la etiqueta fiducial |
| fam | Familia Fiducial (16H5C, 25H9C, 36H11C, etc) |
| pts | Devuelve puntos de esquina individuales. Debe habilitarse. |
| skew | Actualmente sin uso |
| t6c_ts | Posición de la Cámara en el espacio del objetivo calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, grados) |
| t6r_fs | Posición del Robot en el espacio del campo calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, grados) |
| t6r_fs_orb | Posición del Robot en el espacio del campo calculada por este fiducial (Megatag2) (x,y,z,pitch,yaw,roll) (metros, grados) |
| t6r_ts | Posición del Robot en el espacio del objetivo calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, grados) |
| t6t_cs | Posición del Objetivo en el espacio de la cámara calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, grados) |
| t6t_rs | Posición del Objetivo en el espacio del robot calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, grados) |
| ta | El tamaño del objetivo como porcentaje de la imagen (0-1) |
| tx | Coordenada X del centro del objetivo en grados relativa a la cruz. Positivo-derecha, centro-cero |
| tx_nocross | Coordenada X del centro del objetivo en grados relativa al píxel principal. Positivo-derecha, centro-cero |
| txp | Coordenada X del centro del objetivo en píxeles relativa a la cruz. Positivo-derecha, centro-cero |
| ty | Coordenada Y del centro del objetivo en grados relativa a la cruz. Positivo-abajo, centro-cero |
| ty_nocross | Coordenada Y del centro del objetivo en grados relativa al píxel principal. Positivo-derecha, centro-cero |
| typ | Coordenada Y del centro del objetivo en píxeles relativa a la cruz. Positivo-abajo, centro-cero |
| pts | Array de esquinas (píxeles) [x0,y0,x1,y1.....]. Debe habilitarse en la pestaña de salida |
Ejemplo JSON para Pipelines de AprilTag
{
"Classifier": [],
"Detector": [],
"Fiducial": [
{
"fID": 2,
"fam": "16H5C",
"pts": [],
"skew": [],
"t6c_ts": [
0.33247368976801916,
-0.05672695778305914,
-2.5042031405987144,
-4.680849607956358,
-5.171154989721864,
4.528697946312339
],
"t6r_fs": [
4.738896418276903,
-1.5926603672041666,
0.5194469577830592,
4.522658587661256,
4.258580454853879,
5.5236539893713275
],
"t6r_ts": [
0.33247368976801916,
-0.05672695778305914,
-2.5042031405987144,
-4.680849607956358,
-5.171154989721864,
4.528697946312339
],
"t6t_cs": [
-0.09991902572799474,
-0.1234042720218289,
2.5218203039582496,
4.278368708252767,
5.508508005282244,
-4.1112864453027775
],
"t6t_rs": [
-0.09991902572799474,
-0.1234042720218289,
2.5218203039582496,
4.278368708252767,
5.508508005282244,
-4.1112864453027775
],
"ta": 0.005711808800697327,
"tx": -2.0525293350219727,
"txp": 149.4874725341797,
"ty": 2.7294836044311523,
"typ": 107.14710235595703
}
],
"Retro": [],
"pID": 0,
"tl": 19.78130340576172,
"ts": 3284447.910569,
"v": 1
}
Resultados del Detector Neuronal
El array "Detector" contiene entradas con la siguiente estructura:
| Nombre de Clave | Descripción del Valor |
|---|---|
| class | Cadena de nombre de clase legible por humanos |
| classID | Entero ClassID |
| conf | Confianza de la predicción |
| pts | Puntos de esquina individuales como un array de [x,y] en píxeles. Centro-cero, positivo derecha y abajo. Debe habilitarse. |
| ta | El tamaño del objetivo como porcentaje de la imagen (0-1) |
| tx | Coordenada X del centro del objetivo en grados relativa a la cruz. Positivo-derecha, centro-cero |
| tx_nocross | Coordenada X del centro del objetivo en grados relativa al píxel principal. Positivo-derecha, centro-cero |
| txp | Coordenada X del centro del objetivo en píxeles relativa a la cruz. Positivo-derecha, centro-cero |
| ty | Coordenada Y del centro del objetivo en grados relativa a la cruz. Positivo-abajo, centro-cero |
| ty_nocross | Coordenada Y del centro del objetivo en grados relativa al píxel principal. Positivo-derecha, centro-cero |
| typ | Coordenada Y del centro del objetivo en píxeles relativa a la cruz. Positivo-abajo, centro-cero |
| pts | Array de esquinas (píxeles) [x0,y0,x1,y1.....]. Debe habilitarse en la pestaña de salida |
Ejemplo JSON para Pipelines de Detector
{
"Classifier": [],
"Detector": [
{
"class": "person",
"classID": 0,
"conf": 0.83984375,
"pts": [],
"ta": 0.2608712911605835,
"tx": -2.45949649810791,
"txp": 147.5,
"ty": -10.066887855529785,
"typ": 165.5
}
],
"Fiducial": [],
"Retro": [],
"pID": 0,
"tl": 63.50614547729492,
"ts": 4932985.266867,
"v": 1
}
Resultados del Clasificador Neuronal
El array "Classifier" contiene entradas con la siguiente estructura:
| Nombre de Clave | Descripción del Valor |
|---|---|
| class | Cadena de nombre de clase legible por humanos |
| classID | Entero ClassID |
| conf | Confianza de la predicción |
Ejemplo JSON para Pipelines de Clasificador
{
"Classifier": [
{
"class": "digital clock",
"classID": 531,
"conf": 0.16796875
}
],
"Detector": [],
"Fiducial": [],
"Retro": [],
"pID": 0,
"tl": 16.704740524291992,
"ts": 4751332.7542280005,
"v": 1
}
Resultados de Código de Barras
El array "Barcode" contiene entradas con la siguiente estructura:
| Nombre de Clave | Descripción del Valor |
|---|---|
| fam | Familia de Código de Barras ej. "qr" |
| data | Datos del código de barras decodificados como cadena |
| ta | El tamaño del objetivo como porcentaje de la imagen (0-1) |
| tx | Coordenada X del centro del objetivo en grados relativa a la cruz. Positivo-derecha, centro-cero |
| tx_nocross | Coordenada X del centro del objetivo en grados relativa al píxel principal. Positivo-derecha, centro-cero |
| txp | Coordenada X del centro del objetivo en píxeles relativa a la cruz. Positivo-derecha, centro-cero |
| ty | Coordenada Y del centro del objetivo en grados relativa a la cruz. Positivo-abajo, centro-cero |
| ty_nocross | Coordenada Y del centro del objetivo en grados relativa al píxel principal. Positivo-derecha, centro-cero |
| typ | Coordenada Y del centro del objetivo en píxeles relativa a la cruz. Positivo-abajo, centro-cero |
| pts | Array de esquinas (píxeles) [x0,y0,x1,y1.....]. Debe habilitarse en la pestaña de salida |
Ejemplo JSON para Pipelines de Código de Barras
{
"Barcode": [
{
"fam": "QR",
"data": "Hello, World!",
"txp": 150.5,
"typ": 120.75,
"tx": -2.5,
"ty": 1.8,
"tx_nocross": -2.3,
"ty_nocross": 2.0,
"ta": 0.05,
"pts": [[140, 110], [160, 110], [160, 130], [140, 130]]
}
],
"Classifier": [],
"Detector": [],
"Fiducial": [],
"Retro": [],
"pID": 0,
"tl": 15.2,
"ts": 4751332.7542280005,
"v": 1
}