Pular para o conteúdo principal

Especificação de Resultados JSON

A saída de resultados JSON do Limelight é uma coleção de arrays contendo resultados de rastreamento. Existem arrays separados para resultados retroreflexivos, fiduciais, classificadores neurais e detectores neurais. JSON é legível por humanos e fácil de analisar em qualquer linguagem em qualquer plataforma, sendo perfeito para a maioria dos casos de uso.

A mesma saída de resultados JSON pode ser recuperada usando as APIs REST/HTTP, Websocket e NetworkTables.

Analisar esta saída JSON é incrivelmente fácil com nossas bibliotecas FRC.

Limelightlib possui funcionalidade integrada que analisa o JSON Dump em um objeto LimelightResults.

https://github.com/LimelightVision/limelightlib-wpijava

https://github.com/LimelightVision/limelightlib-wpicpp

Cada resultado JSON contém as seguintes entradas:

Nome da ChaveDescrição do Valor
tlLatência de rastreamento (milissegundos consumidos pelo loop de rastreamento neste quadro)
clLatência de captura (milissegundos entre o fim da exposição da linha do meio até o início do loop de rastreamento)
txDeslocamento Horizontal do Retículo ao Alvo (LL1: -27 graus a 27 graus / LL2: -29.8 a 29.8 graus)
tyDeslocamento Vertical do Retículo ao Alvo (LL1: -20.5 graus a 20.5 graus / LL2: -24.85 a 24.85 graus)
txncDeslocamento Horizontal do Pixel Principal ao Alvo (graus)
tyncDeslocamento Vertical do Pixel Principal ao Alvo (graus)
taÁrea normalizada e não distorcida do alvo (0-100)
PythonOutDados de saída dos Pipelines SnapScript Python
stdev_mt1Desvio Padrão MT1 [x, y, z, roll, pitch, yaw] (metros, graus)
stdev_mt2Desvio Padrão MT2 [x, y, z, roll, pitch, yaw] (metros, graus)
pIDÍndice do Pipeline atual
pTYPETipo de Pipeline atual, por exemplo "pipe_color"
tsTimestamp em milissegundos desde a inicialização
vIndicador de validade. 1 = alvos válidos, 0 = sem alvos válidos
botposeBotpose (MegaTag): x,y,z, roll, pitch, yaw (metros, graus)
botpose_wpiredBotpose (MegaTag, WPI Red driverstation): x,y,z, roll, pitch, yaw (metros, graus)
botpose_wpiblueBotpose (MegaTag, WPI Blue driverstation): x,y,z, roll, pitch, yaw (metros, graus)
botpose_orbBotpose (MegaTag2): x,y,z, roll, pitch, yaw (metros, graus)
botpose_orb_wpiredBotpose (MegaTag2, WPI Red driverstation): x,y,z, roll, pitch, yaw (metros, graus)
botpose_orb_wpiblueBotpose (MegaTag2, WPI Blue driverstation): x,y,z, roll, pitch, yaw (metros, graus)
botpose_avgareaÁrea média das tags usadas para calcular botpose
botpose_avgdistDistância máxima entre tags usadas para calcular botpose (metros)
botpose_spanDistância máxima entre tags usadas para calcular botpose (metros)
botpose_tagcountNúmero de tags usadas para calcular botpose
RetroArray de resultados do pipeline de Cor/Retroreflexivo
FiducialArray de resultados do pipeline AprilTag
DetectorArray de resultados do pipeline Detector Neural
ClassifierArray de resultados do pipeline Classificador
BarcodeArray de resultados do pipeline de Código de Barras

Resultados de Cor/Retroreflexivo

O array "Retro" contém entradas com a seguinte estrutura:

Nome da ChaveDescrição do Valor
t6c_tsPose da Câmera no espaço do alvo calculada por solvepnp (x,y,z,rx,ry,rz)
t6r_fsPose do Robô no espaço do campo calculada por solvepnp (x,y,z,rx,ry,rz)
t6r_tsPose do Robô no espaço do alvo calculada por solvepnp (x,y,z,rx,ry,rz)
t6t_csPose do Alvo no espaço da câmera calculada por solvepnp (x,y,z,rx,ry,rz)
t6t_rsPose do Alvo no espaço do robô calculada por solvepnp (x,y,z,rx,ry,rz)
taO tamanho do alvo como porcentagem da imagem (0-1)
txCoordenada X do centro do alvo em graus relativa ao retículo. Positivo-direita, centro-zero
tx_nocrossCoordenada X do centro do alvo em graus relativa ao pixel principal. Positivo-direita, centro-zero
txpCoordenada X do centro do alvo em pixels relativa ao retículo. Positivo-direita, centro-zero
tyCoordenada Y do centro do alvo em graus relativa ao retículo. Positivo-abaixo, centro-zero
ty_nocrossCoordenada Y do centro do alvo em graus relativa ao pixel principal. Positivo-direita, centro-zero
typCoordenada Y do centro do alvo em pixels relativa ao retículo. Positivo-abaixo, centro-zero
ptsArray de cantos (pixels) [x0,y0,x1,y1.....]. Deve ser habilitado na aba de saída
Exemplo JSON para Pipelines de Cor / Retroreflexivo
{
"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

O array "Fiducial" contém entradas com a seguinte estrutura:

Nome da ChaveDescrição do Valor
fidID da tag fiducial
famFamília Fiducial (16H5C, 25H9C, 36H11C, etc)
ptsRetorna pontos de canto individuais. Deve estar habilitado.
skewAtualmente não utilizado
t6c_tsPose da câmera no espaço do alvo calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, graus)
t6r_fsPose do robô no espaço de campo calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, graus)
t6r_fs_orbPose do robô no espaço de campo calculada por este fiducial (Megatag2) (x,y,z,pitch,yaw,roll) (metros, graus)
t6r_tsPose do robô no espaço do alvo calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, graus)
t6t_csPose do alvo no espaço da câmera calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, graus)
t6t_rsPose do alvo no espaço do robô calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, graus)
taO tamanho do alvo como porcentagem da imagem (0-1)
txCoordenada X do centro do alvo em graus relativa à mira. Positivo-direita, centro-zero
tx_nocrossCoordenada X do centro do alvo em graus relativa ao pixel principal. Positivo-direita, centro-zero
txpCoordenada X do centro do alvo em pixels relativa à mira. Positivo-direita, centro-zero
tyCoordenada Y do centro do alvo em graus relativa à mira. Positivo-abaixo, centro-zero
ty_nocrossCoordenada Y do centro do alvo em graus relativa ao pixel principal. Positivo-direita, centro-zero
typCoordenada Y do centro do alvo em pixels relativa à mira. Positivo-abaixo, centro-zero
ptsArray de cantos (pixels) [x0,y0,x1,y1.....]. Deve ser habilitado na aba de saída
Exemplo JSON para Pipelines 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 do Detector Neural

O array "Detector" contém entradas com a seguinte estrutura:

Nome da ChaveDescrição do Valor
classString do nome da classe legível por humanos
classIDInteiro do ID da classe
confConfiança da predição
ptsPontos de canto individuais como um array de [x,y] em pixels. Centro-zero, positivo direita e abaixo. Deve estar habilitado.
taO tamanho do alvo como porcentagem da imagem (0-1)
txCoordenada X do centro do alvo em graus relativa à mira. Positivo-direita, centro-zero
tx_nocrossCoordenada X do centro do alvo em graus relativa ao pixel principal. Positivo-direita, centro-zero
txpCoordenada X do centro do alvo em pixels relativa à mira. Positivo-direita, centro-zero
tyCoordenada Y do centro do alvo em graus relativa à mira. Positivo-abaixo, centro-zero
ty_nocrossCoordenada Y do centro do alvo em graus relativa ao pixel principal. Positivo-direita, centro-zero
typCoordenada Y do centro do alvo em pixels relativa à mira. Positivo-abaixo, centro-zero
ptsArray de cantos (pixels) [x0,y0,x1,y1.....]. Deve ser habilitado na aba de saída
Exemplo 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 do Classificador Neural

O array "Classifier" contém entradas com a seguinte estrutura:

Nome da ChaveDescrição do Valor
classString do nome da classe legível por humanos
classIDInteiro do ID da classe
confConfiança da predição
Exemplo JSON para Pipelines de Classificador
{
"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

O array "Barcode" contém entradas com a seguinte estrutura:

Nome da ChaveDescrição do Valor
famFamília do código de barras, ex: "qr"
dataDados decodificados do código de barras como string
taO tamanho do alvo como porcentagem da imagem (0-1)
txCoordenada X do centro do alvo em graus relativa à mira. Positivo-direita, centro-zero
tx_nocrossCoordenada X do centro do alvo em graus relativa ao pixel principal. Positivo-direita, centro-zero
txpCoordenada X do centro do alvo em pixels relativa à mira. Positivo-direita, centro-zero
tyCoordenada Y do centro do alvo em graus relativa à mira. Positivo-abaixo, centro-zero
ty_nocrossCoordenada Y do centro do alvo em graus relativa ao pixel principal. Positivo-direita, centro-zero
typCoordenada Y do centro do alvo em pixels relativa à mira. Positivo-abaixo, centro-zero
ptsArray de cantos (pixels) [x0,y0,x1,y1.....]. Deve ser habilitado na aba de saída
Exemplo 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
}