Pular para o conteúdo principal

Especificação dos Resultados JSON

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

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

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

O Limelightlib tem 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 Crosshair até o Alvo (LL1: -27 graus a 27 graus / LL2: -29.8 a 29.8 graus)
tyDeslocamento Vertical do Crosshair até o Alvo (LL1: -20.5 graus a 20.5 graus / LL2: -24.85 a 24.85 graus)
txncDeslocamento Horizontal do Pixel Principal até o Alvo (graus)
tyncDeslocamento Vertical do Pixel Principal até o Alvo (graus)
taÁrea não distorcida e normalizada 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/Retrorrefletivo

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 à 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-baixo, 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-baixo, centro-zero
ptsArray de cantos (pixels) [x0,y0,x1,y1.....]. Deve ser habilitado na aba de saída
Exemplo JSON para Pipelines de Cor / Retrorrefletivo
{
"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 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 do campo calculada por este fiducial (x,y,z,pitch,yaw,roll) (metros, graus)
t6r_fs_orbPose do Robô no espaço do 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-baixo, 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-baixo, centro-zero
ptsArray de cantos (pixels) [x0,y0,x1,y1.....]. Deve estar 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
classIDNúmero inteiro do ClassID
confConfiança da predição
ptsPontos de canto individuais como um array de [x,y] em pixels. Zero no centro, positivo à direita e para baixo. 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, zero no centro
tx_nocrossCoordenada X do centro do alvo em graus relativa ao pixel principal. Positivo à direita, zero no centro
txpCoordenada X do centro do alvo em pixels relativa à mira. Positivo à direita, zero no centro
tyCoordenada Y do centro do alvo em graus relativa à mira. Positivo para baixo, zero no centro
ty_nocrossCoordenada Y do centro do alvo em graus relativa ao pixel principal. Positivo à direita, zero no centro
typCoordenada Y do centro do alvo em pixels relativa à mira. Positivo para baixo, zero no centro
ptsArray de cantos (pixels) [x0,y0,x1,y1.....]. Deve estar habilitado na aba de saída
Exemplo JSON para Pipelines do 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
classIDNúmero inteiro do ClassID
confConfiança da predição
Exemplo JSON para Pipelines do 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
taTamanho 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-baixo, 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-baixo, 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
}