App intelligenti

Creazione di un copilota di Formula E su Android con ML Kit e Gemini Nano

Altoparlanti

  • Alastair Breeze

    Staff Software Engineer - Office of the CTO di Google Cloud

  • Oli Thompson

    Junior Data Scientist, Formula E

Informazioni

Informazioni sulla presentazione

Un'auto da corsa è un ambiente impegnativo con vincoli di alta velocità, calore e telemetria. In che modo un agente on-device può aiutare a elaborare i dati dei veicoli in tempo reale per applicazioni sportive e ingegneristiche?

Questa sessione tecnica esplora un'architettura ibrida sperimentale che combina hardware perimetrale e agenti cloud. Esamineremo una proof of concept di ricerca che utilizza un Raspberry Pi per trasmettere in streaming la telemetria del bus CAN, uno smartphone Pixel che esegue un agente conversazionale on-device basato su ML Kit e Gemini Nano e una connessione cloud agent-to-agent (A2A) per i workflow post-gara.

Riepilogo

  • Gli ambienti di gara della Formula E mettono alla prova l'AI all'edge con temperature estreme e requisiti di bassa latenza. Uno smartphone Pixel ha ospitato un agente per rispondere ai conducenti che viaggiavano a oltre 200 km/h.
  • Android ospita l'architettura edge utilizzando l'Agent Developer Kit e Gemini Nano tramite ML Kit. Gli agenti perimetrali possono comunicare direttamente con gli agenti cloud tramite il protocollo A2A.
  • L'integrazione del veicolo indirizza la telemetria del bus CAN in tempo reale tramite un Raspberry Pi per pubblicare dati con downsampling a 10 Hz su MQTT. L'agente Android combina questi dati con l'input vocale del conducente per valutare le query e rispondere.
  • I test su pista a Goodwood hanno dimostrato che lo smartphone ha gestito il calore intenso senza problemi. Il debug dell'ultimo minuto ha risolto i problemi di connessione Bluetooth al casco del pilota prima che l'auto salisse sulla collina.

Gemini Notebook

Argomenti

  • gemini-nano
  • ml-kit
  • on-device-ai
  • ai-agents
  • formula-e

Trascrizione

Scarica la trascrizione

Introduzione

  • Ciao.

  • Mi chiamo Alastair e oggi sono davvero felice di parlarvi di un progetto che abbiamo intrapreso l'anno scorso con la Formula E.

  • Oggi è qui con noi Oli, che ci parlerà un po' di ciò che abbiamo fatto insieme.

  • Lavoro in Google Cloud nell'ufficio del CTO e spesso cerchiamo di spingere i limiti di ciò che è possibile fare oggi su dispositivi mobili e cloud e di come possono collaborare.

  • Ti mostrerò un breve video che ti darà un'idea di ciò che abbiamo fatto.

  • L'auto Gen 4 ha 600 kW di potenza da corsa.

  • Alimentazione completamente elettrica, trazione integrale permanente.

  • La definirei velocissima.

  • Potremmo utilizzare un agente su uno smartphone Pixel collegato ai dati di telemetria provenienti dall'auto?

  • Mentre il conducente sale sulla collina di Goodwood, potrà effettivamente parlare con l'auto.

  • Non male!

  • Hey Gemma, come sono i miei pneumatici?

  • La pressione degli pneumatici è buona, circa 1,4 bar.

  • C'è un telefono collegato direttamente alla centralina, che legge moltissimi punti dati di ciò che faccio come pilota.

  • È la prima volta che succede in un'auto da corsa.

  • Penso che non ci sia un posto migliore per mostrarlo.

  • Hey Gemma, siamo pronti?

  • Sempre pronte per te.

Sfide dell'esecuzione di agenti nell'edge

  • In questo progetto volevamo provare a inserire un agente co-pilota nell'abitacolo con il conducente.

  • In sostanza, quello che stiamo cercando di fare è spingere i limiti di ciò che è possibile con gli agenti all'edge, perché questo è un ottimo esempio di una sfida davvero difficile.

  • Il tipo di sfide che si presentano in un'auto da corsa è ovviamente il calore elevato.

  • Le auto da corsa sono note per il loro surriscaldamento e questa è, come sapete, una delle sfide più grandi.

  • Connettività instabile.

  • Quindi, lo faremo al Goodwood Festival of Speed, dove, come sapete, centinaia di migliaia di appassionati di sport motoristici si riuniscono per guardare le auto che corrono su per la collina.

  • E come puoi immaginare, quando ci sono centinaia di migliaia di persone in un campo, la connettività può essere piuttosto difficile.

  • Bluetooth.

  • Ad esempio, questa macchina è fondamentalmente una gabbia di Faraday, quindi puoi solo immaginare il tipo di sfide per riuscire anche solo a connettersi al casco del pilota.

  • Infine, i requisiti di bassa latenza.

  • Questo pilota sta andando a oltre 200 km all'ora, quindi è davvero molto importante che le risposte che riceve dall'agente co-pilota siano davvero rapide e immediate.

  • In sostanza, siamo molto interessati a questo perché crediamo che gli agenti diventeranno onnipresenti.

  • È già una realtà sotto i nostri occhi.

  • Non sono più solo nei nostri computer.

  • Sono nei nostri smartphone, nei nostri smartwatch, nei nostri occhiali, nelle nostre smart home e ora anche nelle nostre auto.

  • Quindi, fondamentalmente, volevamo davvero vedere cosa potevamo ottenere in uno scenario difficile come questo.

  • E quando abbiamo fatto un brainstorming su come avremmo potuto realizzarlo, ci siamo chiesti: "Dobbiamo costruire un piccolo microcomputer con un piccolo acceleratore per avere un modello lì?"

  • Ci siamo resi conto all'improvviso che tutti gli ingredienti di cui avevamo bisogno esistevano già ed erano Android.

Perché Android è l'host ideale

  • Android è l'host perfetto per questo perché hai ADK, ovvero il nostro Agent Developer Kit.

  • Si tratta di una libreria molto utile che ti consente di creare agenti direttamente nella tua applicazione.

  • Ci sono miliardi di utenti e, come sai, diversi fattori di forma su cui possiamo eseguire questa operazione molto facilmente, quindi è davvero facile testarla e distribuire il codice stesso.

  • Strumenti per sviluppatori che ti consentono di eseguire il debug, provare diverse soluzioni e trovare il problema.

  • AI on-device: gli smartphone Google Pixel ora vengono forniti con una TPU integrata, ottimizzata per il modello on-device che risiede nello smartphone, rendendo molto semplice l'utilizzo di API come ML Kit per accedere a un modello davvero potente.

  • Inoltre, abbiamo anche funzionalità come la sintesi vocale e il riconoscimento vocale, API completamente offline che ti consentono di ottenere esperienze conversazionali davvero efficaci.

  • Infine, ovviamente, la connettività.

  • Gli smartphone sono progettati per la connettività, che sia tramite reti mobile, Wi-Fi o altri mezzi.

  • Tuttavia, una delle sfide è che gli agenti edge non possono fare tutto, quindi come potrebbero collaborare con gli agenti, potenzialmente, nel cloud?

  • E se la soluzione fosse ibrida?

  • E se un agente che vive in uno smartphone potesse parlare direttamente con un agente nel cloud per eseguire azioni più complicate?

  • Ad esempio, supponiamo che il pilota voglia sapere in che posizione si trova nella gara.

  • Beh, l'auto stessa non saprà in quale posizione si trova nella gara, ma forse un agente nel cloud sì.

  • Inoltre, abbiamo un protocollo chiamato agent-to-agent, che consente di creare agenti on-edge e nel cloud e di farli comunicare tra loro per eseguire azioni più complesse.

Architettura di base di un agente

  • Come l'abbiamo creato?

  • Quindi, ti illustrerò gli ingredienti di questo sistema.

  • Inizia dal cablaggio.

  • In questo caso, l'infrastruttura è fondamentalmente un'app per Android che esegue l'Agent Development Kit per Android.

  • La seconda parte è un modello.

  • Per farlo funzionare, serve un modello. Noi abbiamo utilizzato Gemini Nano tramite ML Kit, un modello on-device davvero potente e a portata di mano.

  • Poi, i dati.

  • Oli ne parlerà tra un minuto, ma i dati provengono dall'auto, ma anche, potenzialmente, dal riconoscimento vocale del conducente.

  • Infine, ci sono le azioni che l'agente può eseguire.

  • Potrebbe trattarsi della sintesi vocale per poter rispondere al conducente e porre domande aggiuntive o fornire le informazioni richieste o, come accennato in precedenza, della comunicazione tra agenti con un agente nel cloud per eseguire alcune delle azioni più complesse.

  • Ora vorrei invitare Oli sul palco per parlare un po' di come abbiamo fatto con la Formula E.

Integrazione della telemetria e dell'hardware del veicolo

  • Grazie, Alastair.

  • Abbiamo gli ingredienti, ora arriva la parte difficile: come si integra un agente AI in un'auto di Formula E?

  • Tutto inizia qui, nella VCU (Vehicle Control Unit).

  • Ora, ogni sensore e ogni componente dell'auto invia i dati al computer tramite il cosiddetto bus CAN.

  • L'auto genera migliaia di punti di telemetria al secondo, come velocità, accelerazione, acceleratore, frenata e altro ancora.

  • Quindi, per collegare… per leggere questa telemetria, abbiamo deciso di collegare un Raspberry Pi direttamente alla VCU dell'auto tramite questa connessione CAN.

  • Ora, Raspberry Pi esegue alcune operazioni diverse.

  • Innanzitutto, decodifica i segnali non elaborati, li trasforma e li sottocampiona a circa 10 Hz, il che fornisce informazioni sufficienti per un copilota.

  • Il Raspberry Pi pubblica poi questi dati perfezionati tramite MQTT su un Pixel 10 Pro posizionato nell'abitacolo dell'auto.

  • Questo è un input che l'app che ospita la nostra applicazione agente può accettare.

  • La seconda è il riconoscimento vocale di Android.

  • Quindi, quando il conducente parla, l'app converte l'input in testo e Gemini Nano è in grado di ragionare su entrambi gli input.

  • Ora l'agente può prendere due decisioni: innanzitutto, può utilizzare il motore di sintesi vocale di Android per rispondere al conducente.

  • In secondo luogo, come ha accennato Alastair, può comunicare con l'agente cloud tramite il protocollo A2A.

  • Il flusso dell'agente è piuttosto semplice: di' l'hotword, in questo caso "Hey, Gemma", fai una domanda e ricevi una risposta.

  • L'agente rimane in ascolto per circa 5 secondi, così puoi fare una domanda aggiuntiva senza dover ricominciare da capo, proprio come se stessi parlando con un vero ingegnere di gara.

  • L'app è anche un agente multi-turno, il che significa che può accedere alla cronologia delle conversazioni per essere più colloquiale.

  • Quindi, potresti aspettarti che il codice per questo sia un po' complicato, giusto?

Implementazione con ADK e ML Kit

  • Beh, in realtà è abbastanza semplice.

  • Le prime righe chiamano onDeviceModel utilizzando ML Kit e lo aggregano come Gemini Nano.

    val generativeModel: GenerativeModel = Generation.getClient()
    val onDeviceModel = GenaiPrompt.create(
        generativeModel = generativeModel,
        name = "gemini-nano",
    )
    val agent = LlmAgent(
        name = "race_engineer",
        model = onDeviceModel,
        staticInstruction = /* System prompt */,
        instruction = Instruction {
            /* Dynamic context */
        },
        tools = listOf(
            /* Custom tools */
        )
    )
  • Poi definiamo il nostro agente con ADK.

  • Assegnale un nome e due tipi di istruzioni: la prima è l'istruzione statica, che ne definisce la personalità e l'identità.

  • Questo può includere, ad esempio, il modo in cui risponde al conducente e alcune informazioni sulla pista.

  • La seconda è l'istruzione dinamica.

  • Questo viene generato per ogni query con il riepilogo della telemetria più recente, in modo che l'agente sappia sempre cosa sta facendo il conducente in qualsiasi momento.

  • Come accennato in precedenza, include anche la cronologia delle conversazioni in corso.

  • Inoltre, definiamo anche alcuni strumenti, ad esempio, la possibilità di comunicare con i dati della sessione precedente, con l'agente cloud e con il conducente utilizzando la sintesi vocale.

  • Ora vediamo una breve demo dell'agente in azione sui nostri simulatori di guida nell'ufficio di Formula E.

Dimostrazione del simulatore

  • Hey Gemma, quanto è aggressiva la mia guida?

  • Fluido e misurato.

  • Il blocco massimo era di 48 gradi e muovevi il volante in media di 11 gradi al secondo.

  • Hey Gemma, qual è la mia forza G massima?

  • La forza G massima è stata di 2,2 G, nelle curve.

  • Hey Gemma, com'è andata la mia corsa?

  • Ottima corsa, Dan.

  • Velocità massima 306 km/h, con una media di 186 km/h in 35 secondi.

  • Hai guidato al massimo per il 58% del tempo, con un picco di 2,2 G.

  • Eccoci qui.

  • Questo è Gemini Nano su uno smartphone che parla con un conducente, rispondendo alle sue domande in tempo reale.

  • Un simulatore è una cosa, un'auto di Formula E è un'altra.

Deployment e test su pista a Goodwood

  • Come abbiamo messo insieme tutto questo?

  • Per prima cosa, abbiamo dovuto fare un viaggio alla Spark Racing Technology di Parigi, dove vengono prodotte le nostre auto.

  • Qui sono io, a sinistra, mentre collego il Raspberry Pi alla VCU dell'auto di Formula E.

  • Tutto ciò che abbiamo creato finora è stato eseguito su dati emulati e riprodotto da una sessione di test, quindi non sapevamo se avrebbe funzionato con i dati reali.

  • Quindi l'abbiamo collegato, acceso, abbiamo aspettato un po' e, infine, la telemetria ha iniziato a essere trasmessa sul dispositivo, dimostrando che i dati si muovevano attraverso il sistema come previsto.

  • A destra, puoi vedere il sistema finito e puoi notare che lo smartphone è effettivamente implementato nell'abitacolo, proprio accanto a dove siederà il conducente.

  • Quindi, eravamo tutti pronti per Goodwood.

  • Quindi, cosa è successo effettivamente quel giorno?

  • Ricordi le quattro sfide di cui ha parlato Alastair in precedenza?

  • Goodwood ne ha davvero messi alla prova due.

  • Il primo era il calore.

  • In Gran Bretagna, di solito ci prepariamo a qualsiasi condizione meteo, tranne il sole.

  • Quindi, naturalmente, abbiamo avuto una delle settimane più calde mai registrate, proprio nel bel mezzo di un'ondata di caldo.

  • Il momento perfetto per inserire un computer all'interno di un'auto di Formula E.

  • Ma qui arriva la sorpresa.

  • Il telefono era in buone condizioni.

  • Android non ha subito alcun danno.

  • È emerso che Raspberry Pi è stato il dispositivo che ha avuto più difficoltà.

  • E poiché non potevamo collegarlo direttamente all'auto, abbiamo dovuto utilizzare un UPS, che, se non lo sapete, è fondamentalmente un insieme di batterie collegate alla parte inferiore del Pi.

  • Ma per fortuna siamo riusciti a risolvere il problema ricaricandola sporadicamente durante il giorno. Senza questo accorgimento, l'auto probabilmente non sarebbe salita su quella collina senza alcun agente AI.

  • Poi è stato il turno del Bluetooth.

  • A quel punto, non avevamo ancora testato il casco del pilota, che si connette all'app tramite Bluetooth.

  • E si stava rivelando una sfida.

  • Per testare questa funzionalità, ci siamo seduti sull'erba e sembra che ci stiamo divertendo molto, giusto?

  • Abbiamo tirato fuori i nostri laptop e stiamo facendo una bella chiacchierata.

  • In realtà, quello è stato probabilmente uno dei periodi più stressanti della mia carriera fino ad ora.

  • Stavamo cercando disperatamente di far funzionare il codice e di connettere il casco Bluetooth all'app prima che l'auto salisse sulla collina nel pomeriggio.

  • Ma grazie ad alcuni hotfix dell'ultimo minuto e agli ottimi strumenti di debug di Android, siamo riusciti a risolvere il problema giusto in tempo e l'auto ha risalito la collina con l'agente AI che funzionava alla grande.

  • Ora passo la parola ad Alastair, che ci parlerà un po' più nel dettaglio delle lezioni apprese dal progetto.

  • Grazie.

Concetti chiave e lezioni apprese

  • Grazie, Oli.

  • Quindi, cosa abbiamo imparato da questo progetto?

  • Innanzitutto, Android è un host perfetto per i tuoi agenti.

  • Ti incoraggio vivamente a sfruttare la versatilità di Android, le API a tua disposizione, i modelli on-device e l'ADK.

  • Provali, perché ti sorprenderà la potenza delle esperienze che puoi ottenere da una cosa così semplice.

  • L'inferno dell'integrazione esiste ancora.

  • La maggior parte delle persone in questa stanza probabilmente ha avuto questa esperienza a un certo punto della propria carriera.

  • Crei tutti i componenti secondari separatamente e poi, quando finalmente li colleghi, qualcosa non funziona.

  • E il casco da corsa del pilota era esattamente questo.

  • Fortunatamente, siamo riusciti a risolvere il problema in giornata, il che dimostra che i test sono ancora molto importanti.

  • Infine, Gemini Nano.

  • Gemini Nano è stato un vero eroe in questo caso.

  • È un modello davvero efficace, che viene eseguito molto rapidamente sul tuo dispositivo e può svolgere attività molto complicate, ma non lo fa subito.

  • C'è un vero e proprio ragionamento dietro.

  • Devi eseguire il prompt engineering.

  • Devi provarlo.

  • Devi pensare a come vuoi fornire l'istruzione dinamica rispetto a quella statica.

  • Devi pensare agli strumenti che gli fornirai e a come puoi istruirlo al meglio per farlo.

  • Tuttavia, con il giusto tipo di test e valutazioni, puoi ottenere molto da un modello come Gemini Nano direttamente sul dispositivo.

  • Grazie mille a tutti.

  • Saremo allo stand più tardi, quindi puoi venire a trovarci e farci qualche domanda.

Codice

Snippet di codice

Snippet Kotlin al minuto 07:45 in "Implementazione con ADK e ML Kit"
val generativeModel: GenerativeModel = Generation.getClient()
val onDeviceModel = GenaiPrompt.create(
    generativeModel = generativeModel,
    name = "gemini-nano",
)
val agent = LlmAgent(
    name = "race_engineer",
    model = onDeviceModel,
    staticInstruction = /* System prompt */,
    instruction = Instruction {
        /* Dynamic context */
    },
    tools = listOf(
        /* Custom tools */
    )
)