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 direcionamento. 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 essa saída JSON é incrivelmente fácil com nossas bibliotecas FRC.

O 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 direcionamento (milissegundos consumidos pelo loop de rastreamento neste quadro)
clLatência de captura (milissegundos entre o final da exposição da linha do meio até o início do loop de rastreamento)
txDeslocamento Horizontal da Mira ao Alvo (LL1: -27 graus a 27 graus / LL2: -29,8 a 29,8 graus)
tyDeslocamento Vertical da Mira 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 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, rotação, inclinação, guinada] (metros, graus)
stdev_mt2Desvio Padrão MT2 [x, y, z, rotação, inclinação, guinada] (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
botposePosição do robô (MegaTag): x,y,z, rotação, inclinação, guinada (metros, graus)
botpose_wpiredPosição do robô (MegaTag, estação do piloto WPI Vermelha): x,y,z, rotação, inclinação, guinada (metros, graus)
botpose_wpibluePosição do robô (MegaTag, estação do piloto WPI Azul): x,y,z, rotação, inclinação, guinada (metros, graus)
botpose_orbPosição do robô (MegaTag2): x,y,z, rotação, inclinação, guinada (metros, graus)
botpose_orb_wpiredPosição do robô (MegaTag2, estação do piloto WPI Vermelha): x,y,z, rotação, inclinação, guinada (metros, graus)
botpose_orb_wpibluePosição do robô (MegaTag2, estação do piloto WPI Azul): x,y,z, rotação, inclinação, guinada (metros, graus)
botpose_avgareaÁrea média das tags usadas para calcular a posição do robô
botpose_avgdistDistância máxima entre as tags usadas para calcular a posição do robô (metros)
botpose_spanDistância máxima entre as tags usadas para calcular a posição do robô (metros)
botpose_tagcountNúmero de tags usadas para calcular a posição do robô
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/Retrorefletivo

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 pelo solvepnp (x,y,z,rx,ry,rz)
t6r_fsPose do Robô no espaço do campo calculada pelo solvepnp (x,y,z,rx,ry,rz)
t6r_tsPose do Robô no espaço do alvo calculada pelo solvepnp (x,y,z,rx,ry,rz)
t6t_csPose do Alvo no espaço da câmera calculada pelo solvepnp (x,y,z,rx,ry,rz)
t6t_rsPose do Alvo no espaço do robô calculada pelo solvepnp (x,y,z,rx,ry,rz)
taO tamanho do alvo como uma 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 de JSON para Pipelines de Cor / Retrorefletivo
{
"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 ser 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 uma 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 de 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. Zero no centro, positivo à direita e para baixo. Deve ser habilitado.
taO tamanho do alvo como uma 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 ser habilitado na aba de saída
Exemplo de 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 ClassID
confConfiança da predição
Exemplo de JSON para Pipelines de Classificação
{
"Classifier": [
{
"class": "relógio digital",
"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, por exemplo, "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, 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 ser habilitado na aba de saída
Exemplo de 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
}