Robô R-D6 em Arduino Uno entrega carga em cidade de navegador com física e pedestres
A PinPort é um laboratório online onde você monta um circuito no navegador, escreve um sketch para Arduino e vê o resultado em um emulador. Desta vez, os criadores expandiram a plataforma com uma cidade virtual com carros, semáforos e pedestres — e colocaram nela um robô de 6 rodas chamado R-D6, que transporta cargas do ponto A ao ponto B. O robô não é controlado por JavaScript, mas por um sketch comum de Arduino Uno, compilado no servidor via arduino-cli e executado em um emulador de ATmega328P. O emulador funciona a 16 MHz, sincronizado com o motor de física Rapier (passo de 2 ms). O lidar e o navegador se conectam via I2C, os sensores são implementados como registradores, e o controle dos motores é feito via PWM e driver L298N. • **Cidade**: grade 3×3 com espaçamento de 32 m, ruas de 8 metros em cada sentido, calçadas de 3 metros, 5 semáforos (ciclo de 50 s: 20 s verde, 3 s amarelo, 2 s tudo vermelho) • **Dinâmica**: 12 carros circulam pelas faixas, 20 pedestres caminham pelas calçadas e cruzam com probabilidade de 0,4, cedendo passagem ao robô quando ele se aproxima a menos de 1,7 m • **Confiabilidade**: determinismo via mulberry32, um sketch gera um único resultado, idêntico em computadores diferentes
Processado por IA de Habr AI; editado por Hamidun News
A PinPort é um laboratório online para ensinar robótica, onde você escreve sketches de Arduino no navegador e vê o resultado em um emulador. Os desenvolvedores criaram uma cidade 3D com carros, semáforos e pedestres, pela qual circula um robô de seis rodas chamado R-D6. Ele é controlado por um sketch real de Arduino Uno, compilado no servidor via arduino-cli e executado em um emulador de ATmega328P. O robô precisa entregar um pedido do ponto A ao ponto B respeitando as regras de trânsito.
Arquitetura: três camadas sincronizadas
O sistema é composto por três partes que avançam no mesmo ritmo: o emulador AVR (16 MHz, PWM, I2C, UART), o motor de física Rapier (passo de 2 ms) e a cidade, com sua lógica de semáforos e pedestres. A placa e a física se alternam: dois milissegundos de emulação, depois um passo de física.
Os sensores são implementados como registradores I2C. O lidar (endereço 0×52) entrega 36 setores de 10° cada, a 10 Hz, com alcance de 20 m. O navegador (0×53) é atualizado 50 vezes por segundo e retorna posição, direção, ângulo até o alvo e distâncias. O lidar é composto por três raios por setor (−3°, 0°, +3°), considerando o impacto mais próximo. O controle dos motores é feito via PWM nos pinos ENA/ENB e pelos níveis lógicos do driver L298N. A biblioteca embutida RD6.h lê a varredura do lidar (72 bytes) em três blocos de 24 bytes, já que o buffer do Wire tem apenas 32 bytes.
A cidade e seus habitantes
O traçado é uma grade 3×3 com espaçamento de 32 m, pista de 8 m em cada sentido e calçadas de 3 m. Cinco semáforos nos cruzamentos (ciclo de 50 segundos: 20 s verde, 3 s amarelo, 2 s tudo vermelho). Doze carros circulam pelas faixas, mantêm distância e escolhem o giro aleatoriamente em cada cruzamento. Raios de manobra: 2 m para a direita, 6 m para a esquerda.
Vinte pedestres caminham em loops pelas calçadas. Na faixa de pedestres, decidem cruzar com probabilidade de 0,4; começam a cruzar no verde e não começam se o sinal estiver piscando. Os pedestres cedem passagem ao robô: se ele se aproximar a menos de 1,7 m, a pessoa para e recua após 0,6 s. Carros e pedestres são corpos físicos no Rapier, então o lidar os detecta da mesma forma que detecta prédios, e as colisões são contatos reais dentro do motor.
A rota é construída pelo algoritmo de Dijkstra sobre um grafo. O navegador não indica a direção para o próximo ponto, mas para uma «cenoura» — uma posição 2,5 m adiante (o clássico pure pursuit). Sem isso, o robô cortaria caminho em direção a pontos distantes, se desviaria para o meio-fio e pararia na frente de árvores (que crescem a cada 8 m). Com a cenoura, o robô se mantém no centro da calçada e no centro da faixa de pedestres. As janelas das fachadas são desenhadas a cada 2,6 m na horizontal e 3 m na vertical. A chegada é registrada quando o centro do robô está a menos de 1,5 m do ponto B.
Determinismo e reprodutibilidade
Todo o sistema foi projetado para gerar um único resultado, seja em um notebook fraco ou em um computador potente. Três regras: a aleatoriedade vem apenas do mulberry32 com uma semente fixa, o tempo é contado em passos de física (sem Date.now()), e as decisões de carros e pedestres são tomadas a cada 20 ms sobre uma grade fixa.
Verificação: o firmware é executado duas vezes com fracionamentos de tempo diferentes (2 ms e 7,3 ms por chamada), e os hashes do estado do mundo são comparados — e coincidem. Na arena competitiva, o servidor executa o firmware de cada participante em Node.js usando os mesmos módulos do navegador, e os hashes coincidem até o último dígito.
Um piloto automático de cinco regras passou pelas 12 combinações de «rota × cenário» sem infrações. A entrega leva de 65 a 135 segundos de tempo simulado. Extensões: modo noturno (cerca de 45% das janelas iluminadas, com base em um hash do andar e do vão), horário de pico com 40 pedestres, e reparo de calçada.
A renderização é feita em um motor WebGL próprio, sem engines externas: os prédios são desenhados como caixas, e as janelas são geradas por um shader de fragmentos. A câmera segue o robô e sobe quando um prédio o esconde. As copas das árvores na linha de visão não são desenhadas.
Há uma visão de cima disponível em Canvas 2D para depuração, mostrando a rota, o sinal de todos os semáforos e os raios do lidar.
Perguntas frequentes sobre a notícia
O que se sabe sobre Arquitetura: três camadas sincronizadas?
O sistema é composto por três partes que avançam no mesmo ritmo: o emulador AVR (16 MHz, PWM, I2C, UART), o motor de física Rapier (passo de 2 ms) e a cidade, com sua lógica de semáforos e pedestres. A placa e a física se alternam: dois milissegundos de emulação, depois um passo de física. Os sensores são implementados como registradores I2C. O lidar (endereço 0×52) entrega 36 setores de 10° cada, a 10 Hz, com alcance de 20 m. O navegador (0×53) é atualizado 50 vezes por segundo e retorna posição, direção, ângulo até o alvo e distâncias. O lidar é composto por três raios po
O que se sabe sobre A cidade e seus habitantes?
O traçado é uma grade 3×3 com espaçamento de 32 m, pista de 8 m em cada sentido e calçadas de 3 m. Cinco semáforos nos cruzamentos (ciclo de 50 segundos: 20 s verde, 3 s amarelo, 2 s tudo vermelho). Doze carros circulam pelas faixas, mantêm distância e escolhem o giro aleatoriamente em cada cruzamento. Raios de manobra: 2 m para a direita, 6 m para a esquerda. Vinte pedestres caminham em loops pelas calçadas. Na faixa de pedestres, decidem cruzar com probabilidade de 0,4; começam a cruzar no verde e não começam se o sinal estiver piscando. Os pedestres cedem passagem ao rob
O que se sabe sobre Determinismo e reprodutibilidade?
Todo o sistema foi projetado para gerar um único resultado, seja em um notebook fraco ou em um computador potente. Três regras: a aleatoriedade vem apenas do mulberry32 com uma semente fixa, o tempo é contado em passos de física (sem Date.now()), e as decisões de carros e pedestres são tomadas a cada 20 ms sobre uma grade fixa. Verificação: o firmware é executado duas vezes com fracionamentos de tempo diferentes (2 ms e 7,3 ms por chamada), e os hashes do estado do mundo são comparados — e coincidem. Na arena competitiva, o servidor executa o firmware de cada participante e
Test Frontier LLMs & Autonomous Agents in One Workspace
Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.
O essencial da IA — uma vez por semana
Sete histórias que realmente importaram, escolhidas a dedo. Sem ruído nem releases.
Pronto! Verifique seu e-mail para a confirmação.