# API's



# NetworkTables API completa

### **Dados básicos de segmento**

Use os seguintes códigos:

#### **Java**

```java
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDouble(0);
```

#### **LABView**

<div align="center">

[![Labview_ReadData-630cf73a31982cca34ca114c7d40748e.png](https://docs.stemos.com.br/uploads/images/gallery/2024-01/scaled-1680-/labview-readdata-630cf73a31982cca34ca114c7d40748e.png)](https://docs.stemos.com.br/uploads/images/gallery/2024-01/labview-readdata-630cf73a31982cca34ca114c7d40748e.png)

</div>

Para retornar os dados:

| Parâmetro | Descrição |
| --- | --- |
| tv | Se tem algum alvo válido (0 ou 1) |
| tx | Deslocamento horizontal do ponto alvo (LL1: -27° a 27°/ LL2: -29,8° até 29,8°) |
| ty | Deslocamento vertical do ponto alvo (LL1: -20,5° a 20,5° / LL2: -24,85° a 24,85°) |
| ta | Área Alvo (0% de imagem a 100%) |
| tl | A latência da pipeline (ms). Adicione a *cl* para conseguir a latência total |
| cl | Captura a latência da pipeline (ms). Tempo entre o final da exposição da linha intermediária do sensor até o começo do pipeline de rastreamento |
| tshort | Comprimento lateral do lado mais curto da caixa de detecção (pixels) |
| tlong | Comprimento lateral do maior lado da caixa de detecção (pixels) |
| thor | Comprimento horizontal da caixa de detecção (0 - 320 pixels)
| tvert | Comprimento vertical da caixa de detecção (0 - 320 pixels)
| getpipe | Ìndice de pipeline ativo (0...9) |
| json| JSON completo dos alvos de segmentação |
| tclass | ID de classe do detector neural primário ou do classificador neural |
| tc | Obtenha a cor HSV média abaixo da região da mira como um *NumberArray*|

### **AprilTag e dados 3D**

Use os seguintes códigos:

#### **Java**

```java
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDoubleArray(new double[6]);
```

#### **C++**

```c
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumberArray("<variablename>",std::vector<double>(6));
```

Para retornar esse dado:

| Parâmetro | Descrição |
| --- | --- |
| botpose | Transformação do robô no espaço do campo. Translação (X, Y, Z), Rotação (Roll, Pitch, Yaw), latência total (cl+tl) |
| botpose_wpiblue | Transformação do robô no espaço do campo (origem na *Driver Station* azul). Translação (X, Y, Z), Rotação (Roll, Pitch, Yaw), latência total (cl_tl) |
| botpose_wpired | Transformação do robô no espaço do campo (origem na *Driver Station* red). Translação (X, Y, Z), Rotação (Roll, Pitch, Yaw), latência total (cl_tl) |
| camerapose_targetspace | Transformação 3D da câmera no sistema de coordenadas da AprilTag em vista (array (6)) |
| targetpose_cameraspace | Transformação 3D da AprilTag em vista no sistema de coordenadas da câmera |
| targetpose_robotspace | Transformação 3D da AprilTag em vista no sistema de coordenadas do robô |
| camerapose_robotspace | Transofmração 3D da câmera no sistema de coordenadas do robô |
| tid | ID da AprilTag em vista |

### **Controle de câmera**

Use os seguintes códigos:

#### **Java**

```java
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").setNumber(<value>);
```

#### **LABView**

[![Labview_WriteData-fd5bd3fe2aabc3d1526d298ab594104e.png](https://docs.stemos.com.br/uploads/images/gallery/2024-01/scaled-1680-/labview-writedata-fd5bd3fe2aabc3d1526d298ab594104e.png)](https://docs.stemos.com.br/uploads/images/gallery/2024-01/labview-writedata-fd5bd3fe2aabc3d1526d298ab594104e.png)

#### **C++**

```c
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->PutNumber("<variablename>",<value>);
```

#### **Python**

```python
NetworkTables.getTable("limelight").putNumber('<variablename>',<value>)
```

Para definir esse dado:

| ledMode | Definir o estado do LED |
| --- | --- |
| [0] | Usa o modo do LED na pipeline atual |
| [1] | Desligado |
| [2] | Piscando |
| [3] | Ligado |

| camMode | Define o modo de operação |
| --- | --- |
| 0 | Processador de visão |
| 1 | Câmera de *Driver* (Desabilita o processamento) |

| pipeline | Define a pipeline atual |
| --- | --- |
| 0..9 | Define a pipeline 0...9 |

| *stream* | Define o modo de gravação da LimeLight |
| --- | --- |
| 0 | Padrão - Transmissão simultânea se tiver uma webcam conectada oa robô |
| 1 | PiP Principal - A transmissão da câmera secundária é colocada no canto inferior direito ao da principal |
| 2 | PiP secundário - A transmissão da câmera principal é colocada no canto inferior direito ao da secundária |

| snapshot | Permite aos usuários tirar fotos durante a partida |
| --- | --- |
| 0 | Reseta o modo de foto |
| 1 | Tira uma foto |

| crop | (*Matriz*) Define o recorte retângular. A pipeline deve utilizar o corte padrão da interface *web*. A matriz deve ter 4 entradas.
| --- | --- | 
| [0] | X0 - Mín ou Máx valor de X do recorte retângular (-1 a 1) |
| [1] | X1 - Mín ou Máx valor de X do recorte retângular (-1 a 1) |
| [2] | Y0 - Mín ou Máx valor de Y do recorte retângular (-1 a 1) |
| [3] | Y1 - Mín ou Máx valor de Y do recorte retângular (-1 a 1) |

camerapose_robotspace_set | (Matriz) Define a posição da câmera no sistema de coordenadas do robô 

#### **Java**

```java
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);
```

#### **C++**

```c
wip
```

### **Python**

Os algoritmos em Python permitem dados arbitrários d eentrada e saída.

**llpython** - NumberArray enviado pelo *script* de python. Esse dado é acessível pelo código do robô.
**llrobot** - NumberArray eviado pelo robô. É acessível pelo algoritmo de python.

### **Contornos**

Cantos: 

Habilite *send contours* na aba de *Output* para transmitir as coordenadas  dos cantos 

**tcornxy** - Matriz das coordenadas [x0, y0, x1, y1...]

Alvos brutos:

O Limelight envia três contornos brutos para a NetworkTables que não são influenciados pelo modo de agrupamento. Ou seja, eles são filtrados com os parâmetros da sua tubulação, mas nunca agrupados. X e Y são retornados no espaço de tela normalizado (-1 a 1) em vez de graus.

| Dados | Descrição | 
| --- | --- |
| tx0 | Espaço de tela X |
| ty0 | Espaço de tela Y |
| ta0 | Área (0% de imagem a 100%) |
| ts0 | Inclinação ou rotação (-90° a 0°) |
| tx1 | Espaço de tela X |
| ty1 | Espaço de tela Y |
| ta1 | Área (0% de imagem a 100%) |
| ts1 | Inclinação ou rotação (-90° a 0°) |
| tx2 Espaço de tela X |
| ty2 | Espaço de tela Y |
| ta2 | Área (0% de imagem a 100%) |
| ts2 | Inclinação ou rotação (-90° a 0°) |

Mira bruta: 

Se estiver usando dados de direcionamento brutos, ainda é possível utilizar suas miras calibradas:

| Dados | Descrição |
| --- | --- |
| cx0 | Mira A X no espaço de tela |
| cy0 | Mira A Y no espaço de tela |
| cx1 | Mira B X no espaço de tela |
| cy1 | Mira B Y no espaço de tela |