DOOM su ESP32-P4: l’IA gioca come un umano

DOOM gira su una scheda embedded ESP32-P4 e un’intelligenza artificiale lo gioca guardando lo schermo, come farebbe una persona. Il progetto di Andrea Ricci usa la scheda SCINTIX P4, con display MIPI-DSI da 7 pollici e coprocessore wireless ESP32-C6. Il modello linguistico Claude Sonnet controlla il gioco tramite un’interfaccia MCP, senza mai accedere allo stato interno del motore. L’IA vede solo ciò che vede un giocatore umano: un ventaglio di 51 raggi di profondità, i nemici in linea di vista e una mappa ASCII dei muri già scoperti.

Il risultato è un’esperienza di gioco dell’IA molto più simile a quella di una persona. Il modello non conosce la posizione dei demoni dietro i muri, non sa cosa c’è nella stanza accanto. Deve esplorare, ricordare, fare errori. Questo approccio insolito all’IA è il cuore del progetto, e il codice sorgente è tutto nel repository di Andrea Ricci.

Rendering e scaling con il PPA

DOOM gira interamente sulla scheda, con rendering software a 320×200. Il Pixel Processing Accelerator (PPA) dell’ESP32-P4 fa lo scaling hardware fino a 1024×600, la risoluzione del display. Il tempo di scaling per frame scende da circa 24,5 ms con la CPU a circa 9 ms con il PPA. Il renderer software di DOOM impiega circa 25 ms per frame, e il tick di gioco è a 35 Hz (TICRATE). Il gioco mantiene circa 30 FPS.

La scheda ha 32 MB di PSRAM e 32 MB di flash, con una partizione di storage SPIFFS di circa 12 MB. Il display da 7 pollici è collegato via MIPI-DSI, gestito dal controller ST7701S. L’audio degli effetti sonori passa dal codec ES8311 su I2S, con clock derivato da SCLK e amplificatore disattivato tramite l’I/O expander PI4IOE5V6408.

La scheda SCINTIX P4 con display e componenti
La piattaforma hardware

Il server MCP e il lockstep

Il gioco è esposto tramite un server WebSocket ‘lockstep’. Il modello invia un’azione, il gioco avanza di pochi tick e restituisce un’osservazione JSON strutturata. Poi si ferma in attesa dell’azione successiva. Un server MCP (tools/doom_mcp_server.py) avvolge il WebSocket e registra il gioco come strumenti per client compatibili MCP come Claude Code.

Gli strumenti disponibili sono: osserva, muovi, spara, apri, seleziona arma e mappa. L’osservazione data al modello è limitata a ciò che vede un giocatore: i 51 raggi di profondità, i nemici in linea di vista (mai attraverso i muri), la mappa ASCII e suggerimenti su porte e blocchi. L’audio è riprodotto tramite il codec ES8311, con indirizzo I2C 0x18, e l’I/O expander ha indirizzo 0x43.

Input e configurazione Wi-Fi

La scheda supporta input USB, sia tastiera che gamepad. Alla prima accensione si configura via Wi-Fi con portale captive. Il software usa ESP-IDF v5.5.x, doomgeneric, esp_hosted e le API PPA. Il coprocessore ESP32-C6 gestisce la connettività wireless, mentre l’ESP32-P4 fa tutto il resto.

Per chi vuole avvicinarsi a questo mondo, una scheda di sviluppo come la board ESP32 con Wi-Fi e Bluetooth può essere un primo passo per sperimentare con progetti embedded. Inoltre, chi parte da zero può usare il kit ESP32-C6-Zero per imparare le basi della connettività wireless, prima di affrontare un sistema complesso come questo.


Fonte: https://github.com/relocsrl/scintix-p4-playing-doom

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu