Gappin · projeto pessoal · P&D em andamento
O shape que mede a própria manobra.
Protótipo de bancada (fase 0). Firmware real: 1 411 linhas, ESP32 + MPU6050, matriz 8×8, classificador a bordo. Nada aqui é render: os números vieram do código e das medições.
O problema
O skate não tem dado. Vídeo é um blob opaco: dá para ver o kickflip, não dá para medir o pop, a altura, o giro, o pé. E o pouco que se mede com um celular no bolso mede o corpo, não o shape. O Gappin precisava do shape falando por si — sem mudar o peso, o feel ou a lixa de quem anda nele.
O que a casa fez
Um deck instrumentado de ponta a ponta: sensores que aguentam o impacto de um landing, firmware que separa medir de transmitir em dois núcleos, um protocolo que prefere perder um pacote a atrasá-lo, e o painel que transforma o fluxo em leitura. O AXIS ganha o nome dos três eixos que ele mede: pitch, roll e yaw.
Como foi construído
Três decisões do primeiro protótipo não sobreviveram ao uso real e foram trocadas com número na mão: membrana de teclado virou Velostat (leitura contínua, sem contato que quebra); MQTT sobre TCP virou UDP fire-and-forget (um pacote perdido no ms 15 não pode chegar no ms 300); dados brutos viraram quaternions do filtro de Madgwick, imunes ao gimbal lock que um flip de 360° causa.
Um sanduíche de sete camadas, invisível sob a lixa
Duas famílias de fitas de tecido condutivo cruzam uma folha inteira de Velostat, um polietileno com carbono cuja resistência cai com a pressão. Cada cruzamento é uma célula analógica de 0 a 255. Tecido, não cobre: o shape enverga, e fita de cobre trinca no primeiro ollie. As bordas presas com Kapton, o centro livre para comprimir. Nenhuma solda na área de pisada — a conexão dobra para a lateral do shape, perto dos trucks.
A grade 8×8 do protótipo veio de um demo em handboard. Medindo 13 365 quadros de contato real no replay, o pé varre 48 cm de comprimento por 5 de largura: ele desliza ao longo do shape, do pop ao catch, não de rail a rail. A proposta medida é 40×10 células de 2 cm sobre o deck inteiro de 80,1 × 20,5 cm — uma sola ocupa 20 células e o flick cruza de 15 a 25. Custa 8,1 ms de varredura e o segundo núcleo. Está proposto com número; não está decidido.
Dois núcleos: um mede, o outro fala
O ESP32 tem dois núcleos a 240 MHz e o firmware os usa como dois departamentos. No núcleo 0, a IMU lê a 200 Hz (±16 g, ±2 000 °/s, filtro de 42 Hz contra a vibração do asfalto), o Madgwick funde acelerômetro e giroscópio num quaternion, e a matriz é varrida a 60 Hz por dois multiplexadores de 16 canais. No núcleo 1, tudo vira um struct de 114 bytes com número de sequência e timestamp e sai por UDP em broadcast. Por quadro de 5 ms o trabalho leva 1,66 ms: sobram 66 %.
A IMU fica no centro geométrico do shape, e isso entra na conta: a 15 cm do centro, um kickflip de 1 200 °/s soma 6,71 g de termo centrípeto à leitura; no centro, zero. É a escolha que torna o sinal interpretável.
Atira e esquece
MQTT roda sobre TCP, e TCP garante entrega: quando um pacote se perde, ele pausa tudo e reenvia o antigo. Para telemetria cinemática isso é veneno — o dado do milissegundo 15 chegando no 300 destrói a física. O AXIS fala UDP a partir de uma rede Wi-Fi que ele mesmo cria, sem roteador, sem internet e sem pareamento: o mesmo protocolo dos jogos multiplayer. Oito bytes de cabeçalho, nenhuma retransmissão, latência abaixo de 5 ms. O número de sequência de um byte denuncia o que se perdeu; ninguém espera por ele.
Uma rede neural de 87 → 28 → 9
Um evento começa em 3 g e se confirma em 6 g. A partir daí, 1,74 s de aceleração a 50 Hz (decimada de 200) entram numa rede neural por eixo com 87 entradas, 28 neurônios ocultos e 9 saídas — as manobras de chão da fase 1 — baseada em Corrêa, Lima, Russomano e Santos (2017). Com 70 % de confiança, o shape emite o evento: nome da manobra, altura de pico, g do landing, tempo no ar. A classificação acontece no microcontrolador, antes de qualquer nuvem.
Π(t): onde o pé está, e com quanta força
Um instante do Footprint Map, pé dianteiro à esquerda e traseiro à direita. O pop é um pico súbito no tail; o catch é a pressão migrando para o centro e o nose; o landing é a distribuição simétrica com o pico de g no acelerômetro no mesmo instante; a posição em repouso diz se o skatista é regular ou goofy.
Ao vivo por UDP, para sempre em Parquet
Na sessão, o fluxo é ao vivo: shape → celular ou Gappin Node, sem passar pela internet. O ESP32 grava uma cópia na própria flash para sincronizar depois se a rede falhar. Fim da sessão, o lote sobe em FlatBuffers e vira um arquivo Parquet por sessão: dez minutos a 200 Hz e 60 Hz são 7,58 MB brutos e cerca de 450 KB colunares, 94 % a menos, consultáveis em SQL. O painel recebe um resumo em JSON, nunca o bruto.
Uma sessão, seis projeções
Cada manobra vira um registro W5H: quem, o quê, onde, quando e como — o how é o tensor biomecânico, e no lugar do why entra o WOW, o impacto medido. Sobre esse fluxo de eventos com carimbo de tempo, o painel do Gappin não desenha uma tela: desenha seis projeções do mesmo dado. O tempo é o eixo primário e a cor codifica dado — a polaridade do estilo, de suave a agressivo, vai de ciano a magenta em toda a interface; o WOW, de 0 a 100 com meia-vida, dá a intensidade.
Por baixo, 55 mil entidades em SQLite (skatistas, vídeos, marcas, músicas) num grafo tipado, o receptor UDP em Rust dentro do Tauri, e o React lendo o ring buffer a 20 Hz.
Estado, medido
O que existe: firmware em PlatformIO com IMU, matriz 8×8, Madgwick, UDP e o classificador a bordo; receptor em Rust no Gappin Node; painel com as visualizações acima. O que está proposto com número e não decidido: a matriz 40×10, a PCB própria com ESP32-S3 e ICM-42688-P, a produção de 100 unidades a cerca de US$ 33 cada. O que não existe: backend de produção, app iOS. A casa escreve o que mediu.
Créditos e fontes
Concepção, hardware, firmware, protocolo e painel: Nilo River. Base científica do classificador: Corrêa KN, Lima JCM, Russomano T, Santos MA, “Development of a skateboarding trick classifier using accelerometry and machine learning”, Research on Biomedical Engineering, 2017. Filtro: Madgwick AHRS (open source). Documentação: GAPPIN_AXIS_HARDWARE.md, GAPPIN_TECHNICAL_OVERVIEW.md, firmware/axis_deck.