Anatix.

Seu robô, em tempo real.

Coloque algumas linhas no código do robô, conecte o cabo USB e veja sensores, decisões e tempos de execução enquanto ele roda. Menos achismo, mais evidência para os ajustes da OBR e da FLL.

UnoNanoMegaESP32RP2040e outras placas com Serial
MeuRobo · ao vivo
115200 BAUD

DISTÂNCIA

24.0cm

LOOP

528/s

MODO

seguindo_linha

$ANX,V,13950,distancia_cm,15.041*1F
$ANX,L,14200,523,1884,2310,812,0*3A
$ANX,V,14450,distancia_cm,16.427*12
$ANX,V,14700,distancia_cm,18.435*19
$ANX,V,14950,distancia_cm,21.055*1A
$ANX,L,15200,528,1884,2310,812,0*30

/ O QUE O ANATIX MOSTRA

Entenda o que acontece dentro do robô.

Cada macro responde a uma pergunta diferente sobre o desempenho. Use só as que fizerem sentido para a sua estratégia.

/01

MÉTRICAS

Valores ao vivo

Distância, leitura dos sensores, erro do PID, velocidade dos motores. Qualquer número do seu código vira um gráfico.

ANX_VALUE
/02

EVENTOS

Momentos que importam

Marque na linha do tempo quando o robô perdeu a linha, achou um obstáculo ou entrou na área de resgate.

ANX_EVENT
/03

ESTADOS

O que o robô está pensando

Acompanhe a máquina de estados: seguindo linha, desviando, resgatando. Só é enviado quando muda.

ANX_STATE
/04

TEMPOS

Onde o tempo vai embora

Cronometre trechos do código e descubra qual leitura ou cálculo está deixando o robô lento.

ANX_SCOPE
/05

SAÚDE

Diagnóstico automático

Loops por segundo, pior tempo de loop e RAM livre, sem escrever nenhuma linha a mais.

automático
/06

LEVEZA

Sem cabo, sem custo

Nada é enviado até o computador pedir. Se o cabo sair, a telemetria desliga sozinha e o robô segue normal.

ANX_UPDATE

/ COMO FUNCIONA

Três passos até os primeiros dados.

ETAPA 01

Instale a biblioteca

Baixe o repositório e adicione na Arduino IDE ou no PlatformIO.

Uma vez só
ETAPA 02

Marque o seu código

Inclua o Anatix e coloque as macros ANX_ nos pontos que você quer observar.

Poucas linhas
ETAPA 03

Conecte o cabo

Com o robô no USB, o Anatix recebe os dados e mostra o desempenho em tempo real.

Analise ao vivo

/ COMO USAR

Poucas linhas, muita informação.

As linhas destacadas são as do Anatix. O resto é o código que o seu robô já tem.

#include <Anatix.h>
 
void setup() {
  Serial.begin(115200);
  ANX_BEGIN(Serial, "MeuRobo");
}
 
void loop() {
  ANX_UPDATE();  // sempre no início
 
  float dist = lerUltrassom();
  ANX_VALUE("distancia_cm", dist);
 
  if (dist < 10) {
    ANX_STATE("modo", "desviando");
    ANX_EVENT("obstaculo");
  } else {
    ANX_STATE("modo", "seguindo_linha");
  }
}
void loop() {
  ANX_UPDATE();
 
  {
    ANX_SCOPE("pid");  // mede o tempo deste bloco
    float erro = lerErroLinha();
    float correcao = kp * erro + kd * (erro - erroAnterior);
    erroAnterior = erro;
    moverMotores(BASE + correcao, BASE - correcao);
 
    ANX_VALUE("pid_erro", erro);
    ANX_VALUE("pid_correcao", correcao);
  }
 
  ANX_VALUE_EVERY("bateria_v", lerBateria(), 1000);
}
// Na versão de competição, uma linha desliga tudo:
#define ANATIX_DISABLE
#include <Anatix.h>
 
// As macros ANX_ continuam no código,
// mas não geram nenhuma instrução na placa.

Referência rápida

ANX_BEGIN(porta, nome)Inicia o Anatix na porta serial
ANX_UPDATE()Obrigatório, uma vez por loop
ANX_VALUE(nome, valor)Envia um número (int, long, float)
ANX_VALUE_EVERY(nome, valor, ms)Idem, com limite de frequência
ANX_EVENT(nome)Marca um evento na linha do tempo
ANX_EVENT_DATA(nome, n)Evento com um número junto
ANX_STATE(máquina, estado)Estado atual; só envia quando muda
ANX_SCOPE(nome)Cronometra o bloco { } onde está
ANX_SECTION_BEGIN / END(nome)Cronometra um trecho manualmente
ANX_LOG(texto)Mensagem de texto livre

Nomes e estados são textos fixos entre aspas e sem vírgulas. Eles ficam na memória Flash e não gastam RAM.

/ POR DENTRO DO CABO

Cada dado vira uma linha de texto simples.

$ANXinício
Vtipo
1520tempo (ms)
distancia_cmnome
23.400valor
*23checksum

Dá para ler até no Monitor Serial: envie ANX PING a 115200 baud e as mensagens começam a chegar. O checksum garante que nenhum dado corrompido entre na análise.

/ ONDE PEGAR

Código aberto, no GitHub.

ohthias/Anatix_C

Arduino IDE

  1. 1.Baixe o .zip do repositório
  2. 2.Sketch → Incluir Biblioteca → Adicionar biblioteca .ZIP
  3. 3.Abra Arquivo → Exemplos → Anatix
Baixar .zip

Git

  1. 1.Clone dentro da pasta de bibliotecas
  2. 2.Documentos/Arduino/libraries
git clone https://github.com/ohthias/Anatix_C.git Anatix
Abrir repositório

PlatformIO

  1. 1.Adicione em lib_deps no platformio.ini
lib_deps = https://github.com/ohthias/Anatix_C.git
Abrir repositório

/ DÚVIDAS

Antes de conectar.

Código aberto, com exemplos prontos para abrir na Arduino IDE.
O robô fica mais lento com o Anatix?

Sem o cabo conectado, cada macro vira só uma verificação rápida. Conectado, o Anatix nunca espera a serial: se o buffer estiver cheio, o dado é descartado e contado, em vez de travar o loop.

Posso deixar o Anatix no robô na competição?

Pode, porque sem cabo nada é transmitido. Se preferir zerar qualquer custo, coloque #define ANATIX_DISABLE antes do #include e todas as macros somem da compilação.

Quais placas funcionam?

Uno, Nano, Mega, Leonardo, ESP32, ESP8266, RP2040, SAMD e outras placas com Serial. No Uno e no Nano, use ANX_VALUE_EVERY nas métricas que não precisam de todas as amostras.

Consigo ver os dados sem o RoboStage?

Sim. Abra o Monitor Serial a 115200 baud, envie ANX PING e as mensagens começam a chegar. Elas param 2 segundos depois do último PING.

Meu código já usa Serial.print. Vai dar conflito?

Não. As mensagens do Anatix têm um formato próprio e o resto aparece como console. Se você também lê comandos pela Serial, use Anatix.setLineHandler para receber as linhas que não são do Anatix.

PRONTO PARA O PRÓXIMO TESTE

Pare de adivinhar o que o robô está fazendo.

Baixe a biblioteca, marque o código e leve evidências para cada ajuste. Combine com o LabTest para registrar e comparar as execuções.