Apps inteligentes

Cómo crear un copiloto de Fórmula E en Android con el ML Kit y Gemini Nano

Bocinas

  • Alastair Breeze

    Ingeniero de software del personal, oficina del director de tecnología de Google Cloud

  • Oli Thompson

    Científico de datos júnior, Fórmula E

Acerca de

Acerca de la charla

Un auto de carreras es un entorno exigente de alta velocidad, calor y limitaciones de telemetría. ¿Cómo puede un agente integrado en el dispositivo ayudar a procesar datos de vehículos en tiempo real para aplicaciones deportivas y de ingeniería?

En esta sesión técnica, se explora una arquitectura híbrida experimental que combina hardware perimetral y agentes de la nube. Analizaremos una prueba de concepto de investigación que usa una Raspberry Pi para transmitir telemetría de bus CAN, un teléfono Pixel que ejecuta un agente conversacional integrado en el dispositivo con la tecnología de ML Kit y Gemini Nano, y una conexión de agente a agente (A2A) en la nube para los flujos de trabajo posteriores a la carrera.

Resumen

  • Los entornos de carreras de la Fórmula E desafían a la IA en el perímetro con calor extremo y requisitos de baja latencia. Un teléfono Pixel alojó a un agente para que respondiera a los conductores que viajaban a más de 200 km/h.
  • Android aloja la arquitectura perimetral con el Kit de desarrollo de agentes y Gemini Nano a través de ML Kit. Los agentes de Edge pueden conversar directamente con los agentes de la nube a través del protocolo A2A.
  • La integración del vehículo enruta la telemetría del bus CAN en tiempo real a través de una Raspberry Pi para publicar datos de 10 Hz con reducción de muestreo a través de MQTT. El agente de Android combina estos datos con la entrada de voz del conductor para evaluar las consultas y responder.
  • Las pruebas en la pista de Goodwood demostraron que el teléfono soportó el calor extremo sin problemas. La depuración de último momento resolvió las conexiones Bluetooth con el casco del conductor antes de que el auto subiera la colina.

Gemini Notebook

Temas

  • gemini-nano
  • ml-kit
  • on-device-ai
  • agentes de IA
  • formula-e

Transcripción

Descargar transcripción

Introducción

  • Hola.

  • Me llamo Alastair y hoy me complace hablarles sobre un proyecto que emprendimos el año pasado con la Fórmula E.

  • Y hoy nos acompaña Oli para hablar un poco sobre lo que hicimos juntos.

  • Trabajo en Google Cloud, en la oficina del director de tecnología, y a menudo buscamos ampliar los límites de lo que es posible hoy en día en dispositivos móviles y en la nube, y cómo pueden funcionar juntos.

  • Te mostraré un video breve que te dará una introducción a lo que hicimos.

  • El auto de 4ª generación tiene 600 kW de potencia de carrera.

  • Potencia totalmente eléctrica, tracción permanente en las cuatro ruedas.

  • Yo diría que es muy rápido.

  • ¿Podríamos usar un agente en un teléfono Pixel que esté conectado a los datos de telemetría que provienen del auto?

  • A medida que el conductor sube la colina en Goodwood, podrá, de hecho, hablar con el auto.

  • Eso es muy práctico.

  • Hey Gemma, ¿cómo están mis neumáticos?

  • La presión de los neumáticos se ve bien, alrededor de 1.4 bar.

  • Hay un teléfono conectado directamente a la ECU, que lee muchos, muchos datos de lo que hago como conductor.

  • Esta es la primera vez que esto sucede en un auto de carreras.

  • Creo que no hay un mejor lugar para mostrarlo.

  • Hola, Gemma, ¿estamos listos?

  • Estoy lista cuando tú lo estés.

Desafíos de ejecutar agentes en el perímetro

  • Entonces, lo que vimos allí fue un proyecto en el que queríamos intentar incorporar un agente copiloto a la cabina con el conductor.

  • Y, fundamentalmente, lo que intentamos hacer aquí es ampliar los límites de lo que es posible con los agentes en el perímetro, porque este es un gran ejemplo de un desafío muy difícil.

  • El tipo de desafíos que se ven en un auto de carreras es, obviamente, el calor intenso.

  • Los autos de carrera son conocidos por calentarse, y ese es, ya sabes, parte del mayor desafío.

  • Conectividad irregular

  • De hecho, lo haremos en el Festival de la Velocidad de Goodwood, donde, como saben, cientos de miles de fanáticos de los deportes de motor se reúnen para ver a los autos correr cuesta arriba.

  • Y, como puedes imaginar, cuando hay cientos de miles de personas en un campo, la conectividad puede ser bastante difícil.

  • Bluetooth.

  • Por ejemplo, este auto es básicamente una jaula de Faraday, así que imagínate el tipo de desafíos que implica incluso poder conectarse al casco del piloto de carreras.

  • Por último, los requisitos de baja latencia.

  • Este conductor va a más de 200 km por hora, por lo que es muy, muy importante que las respuestas que reciba de su agente copiloto sean muy rápidas y ágiles.

  • Y, fundamentalmente, nos interesa mucho esto porque creemos que los agentes se volverán omnipresentes.

  • Ya estamos empezando a verlo.

  • Ya no están solo en nuestras computadoras.

  • Están en nuestros teléfonos, relojes, lentes, casas inteligentes y, ahora, incluso en nuestros automóviles.

  • Por lo tanto, fundamentalmente, queríamos ver qué podíamos lograr en una situación difícil como esta.

  • Y cuando estábamos, de alguna manera, intercambiando ideas sobre cómo podríamos construir esto, ¿construimos una pequeña microcomputadora con un pequeño acelerador para tener un modelo allí?

  • De repente, nos dimos cuenta de que todos los ingredientes que necesitábamos ya existían, y era Android.

Por qué Android es el host ideal

  • Android es el host perfecto para esto porque tienes el ADK, que es nuestro Kit de desarrollo de agentes.

  • Esta es una biblioteca muy buena que te permite compilar agentes directamente en tu aplicación.

  • Hay miles de millones de usuarios y, como sabes, diferentes factores de forma en los que podemos ejecutar esto con mucha facilidad, por lo que es muy sencillo probarlo y distribuir el código en sí.

  • Herramientas para desarrolladores que te permiten depurar, probar diferentes cosas y encontrar lo que está fallando.

  • IA integrada en el dispositivo: los teléfonos Google Pixel ahora se envían con una TPU integrada en el teléfono, optimizada para el modelo integrado en el dispositivo que se encuentra en el teléfono, lo que facilita el uso de APIs como ML Kit para acceder a un modelo realmente potente.

  • Luego, también tenemos funciones como la conversión de texto a voz y el reconocimiento de voz, APIs completamente sin conexión que te permiten obtener experiencias de conversación realmente potentes.

  • Y, por último, obviamente, la conectividad.

  • Los teléfonos están diseñados para la conectividad, ya sea a través de redes móviles, Wi-Fi o de otros medios.

  • Sin embargo, uno de los desafíos es que los agentes en el perímetro no pueden hacerlo todo, así que ¿cómo trabajarían con los agentes, potencialmente, en la nube?

  • ¿Y si la solución fuera híbrida?

  • ¿Qué pasaría si un agente que vive en un teléfono pudiera hablar directamente con un agente en la nube para realizar acciones más complicadas?

  • Por ejemplo, imagina que el piloto quiere saber en qué posición de la carrera se encuentra.

  • Bueno, el auto en sí no sabrá en qué posición se encuentra en la carrera, pero tal vez un agente en la nube sí.

  • Y tenemos un protocolo llamado de agente a agente, lo que significa que puedes crear agentes en el perímetro y en la nube, y hacer que conversen entre sí para realizar acciones más complejas.

Arquitectura principal de un agente

  • ¿Cómo lo creamos?

  • Por lo tanto, te mostraré los ingredientes de este sistema.

  • Comencemos con el arnés.

  • En este caso, el arnés es básicamente una aplicación para Android que ejecuta el Kit de desarrollo de agentes para Android.

  • La segunda parte es un modelo.

  • Necesitas un modelo para potenciarlo y, en nuestro caso, usamos Gemini Nano a través de ML Kit, un modelo integrado en el dispositivo muy potente que está al alcance de tu mano.

  • Luego, los datos.

  • Oli hablará un poco sobre esto en un minuto, pero los datos provienen del automóvil y, posiblemente, del reconocimiento de voz del conductor.

  • Por último, también tienes las acciones que puede realizar el agente.

  • Esto podría ser texto a voz para poder responderle al conductor y hacer preguntas de seguimiento o dar la información requerida, o como se mencionó anteriormente, la comunicación de agente a agente con un agente en la nube para realizar algunas de las acciones más complejas.

  • Ahora me gustaría invitar a Oli al escenario para que hable un poco sobre cómo lo hicimos con la Fórmula E.

Telemetría de vehículos e integración de hardware

  • Gracias, Alastair.

  • Ya tenemos los ingredientes, ahora viene la parte difícil: ¿cómo integramos un agente de IA en un auto de Fórmula E?

  • Por lo tanto, comienza aquí en la VCU, o la unidad de control del vehículo.

  • Ahora, cada sensor y cada componente del auto le informan a través de algo llamado bus CAN.

  • Y el auto genera miles de puntos de telemetría por segundo, como velocidad, aceleración, acelerador, frenado y más.

  • Para leer esta telemetría, decidimos conectar una Raspberry Pi directamente a la VCU del automóvil a través de esta conexión CAN.

  • Ahora, la Raspberry Pi hace algunas cosas diferentes.

  • Primero, decodifica las señales sin procesar, las transforma y reduce su muestreo a alrededor de 10 Hz, lo que es suficiente información para un copiloto.

  • Luego, la Raspberry Pi publica estos datos refinados a través de MQTT en un Pixel 10 Pro que se encuentra en la cabina del auto.

  • Y esta es una entrada que puede aceptar la app que aloja nuestra aplicación de agente.

  • El segundo es el reconocimiento de voz de Android.

  • Por lo tanto, cuando el conductor habla, la app convierte la entrada en texto, y Gemini Nano puede razonar sobre ambas entradas.

  • Ahora, el agente puede tomar dos decisiones: Primero, puede usar el motor de texto a voz de Android para responderle al conductor.

  • En segundo lugar, como Alastair mencionó anteriormente, puede comunicarse con el agente de la nube a través del protocolo A2A.

  • Ahora, en torno a esto, el flujo del agente es bastante simple: di la palabra clave, en este caso "Hey, Gemma", haz una pregunta y obtén una respuesta.

  • El agente sigue escuchando durante unos 5 segundos después para que puedas hacer una pregunta de seguimiento sin tener que empezar de nuevo, como si hablaras con un ingeniero de carreras real.

  • La app también es un agente de varios turnos, lo que significa que puede acceder al historial de conversaciones para ser más conversacional.

  • Por lo tanto, es posible que esperes que el código para esto se vea un poco complicado, ¿verdad?

Implementación con el ADK y el ML Kit

  • Bueno, resulta que es bastante simple.

  • En las primeras líneas, se llama a onDeviceModel con el ML Kit y se lo une como 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 */
        )
    )
  • Luego, definimos nuestro agente con el ADK.

  • Asígnale un nombre y dos tipos de instrucciones: la primera es la instrucción estática, que define su personalidad y quién es.

  • Esto puede incluir información sobre cómo se comunica con el conductor y algunos datos sobre la pista de carreras.

  • La segunda es la instrucción dinámica.

  • Ahora, esto se genera en cada consulta con el resumen de telemetría más reciente, por lo que el agente siempre sabe lo que hace el conductor en cualquier momento.

  • También incluye el historial de conversaciones actual, como se mencionó anteriormente.

  • Además, definimos algunas herramientas, por ejemplo, para que pueda comunicarse con los datos de sesiones anteriores, con el agente de la nube y con el conductor a través de la función de texto a voz.

  • Ahora, veamos una breve demostración del agente en acción en nuestros simuladores de carreras en la oficina de la Fórmula E.

Demostración del simulador

  • Hey Gemma, ¿qué tan agresiva es mi dirección?

  • Suave y mesurado.

  • El bloqueo máximo fue de 48 grados, y moviste el volante 11 grados por segundo en promedio.

  • Hey Gemma, ¿cuál es mi fuerza G máxima?

  • La fuerza G máxima fue de 2.2 G en las curvas.

  • Hey Gemma, ¿cómo estuvo mi carrera?

  • Buena carrera, Dan.

  • Velocidad máxima de 306 km/h, con un promedio de 186 km/h durante 35 segundos.

  • Estuviste a toda velocidad el 58% del tiempo y alcanzaste un máximo de 2.2 G.

  • Y eso fue todo.

  • Ese es Gemini Nano en un teléfono hablando con un conductor y respondiendo sus preguntas en tiempo real.

  • Un simulador es una cosa, pero un auto de Fórmula E es algo completamente diferente.

Implementación y pruebas en pista de Goodwood

  • ¿Cómo unimos todo?

  • Primero, tuvimos que viajar a Spark Racing Technology en París, donde se fabrican nuestros autos.

  • Aquí estoy yo, a la izquierda, conectando la Raspberry Pi a la VCU real del auto de Fórmula E.

  • Todo lo que compilamos hasta ahora se ejecutó con datos emulados y se reprodujo desde una sesión de prueba, por lo que no sabíamos si funcionaría con los datos reales.

  • Así que lo conectamos, lo encendimos, esperamos, esperamos un poco más y, finalmente, la telemetría comenzó a llegar al dispositivo, lo que demostró que los datos se movían por el sistema como esperábamos.

  • A la derecha, puedes ver el sistema terminado y que el teléfono está implementado en la cabina, justo al lado de donde se sentará el conductor.

  • Así que estábamos listos para Goodwood.

  • Entonces, ¿qué sucedió realmente ese día?

  • ¿Recuerdas los cuatro desafíos de los que habló Alastair antes?

  • Goodwood realmente puso a prueba a dos de ellos.

  • Primero, el calor.

  • En Gran Bretaña, solemos planificar para cualquier clima, excepto el sol.

  • Así que, naturalmente, lo que obtuvimos fue una de las semanas más calurosas de las que se tiene registro, justo en medio de una ola de calor.

  • El momento perfecto para poner una computadora dentro de un auto de Fórmula E.

  • Pero aquí está el giro.

  • El teléfono estaba bien.

  • Android no se vio afectado en absoluto.

  • Resulta que la Raspberry Pi fue la que más tuvo dificultades.

  • Y, como no podíamos conectarlo directamente al auto, tuvimos que usar algo llamado UPS, que, si no lo saben, básicamente parece un montón de baterías pegadas a la parte inferior de la Pi.

  • Por suerte, logramos solucionar este problema recargando el auto de forma esporádica durante el día. Sin esto, el auto probablemente no habría subido esa colina sin ningún agente de IA.

  • Luego, Bluetooth.

  • En ese momento, nunca habíamos hecho pruebas con el casco del conductor, que se conecta a la app por Bluetooth.

  • Y estaba resultando un poco difícil.

  • Para probar esto, nos sentamos en el pasto y parece que la estamos pasando muy bien, ¿verdad?

  • Sacamos nuestras laptops y tuvimos una buena charla.

  • En realidad, ese fue probablemente uno de los períodos más estresantes de mi carrera hasta el momento.

  • Intentábamos desesperadamente que el código funcionara bien y que el casco Bluetooth se conectara a la app antes de que el conductor subiera la colina por la tarde.

  • Pero gracias a algunas correcciones de último momento y a las excelentes herramientas de depuración de Android, logramos solucionarlo justo a tiempo, y el auto subió la colina con el agente de IA funcionando de maravillas.

  • Ahora, le daré la palabra a Alastair, quien nos hablará un poco más sobre las lecciones aprendidas del proyecto.

  • Gracias.

Conclusiones clave y lecciones aprendidas

  • Gracias, Oli.

  • ¿Qué aprendimos en este proyecto?

  • Bueno, la primera es que Android es un host realmente perfecto para tus agentes.

  • Te recomiendo que uses la versatilidad de Android, las APIs disponibles, los modelos integrados en el dispositivo y el ADK.

  • Pruébalas, porque te sorprenderá lo potentes que pueden ser las experiencias que puedes obtener de algo tan simple.

  • El infierno de la integración aún existe.

  • La mayoría de las personas en esta sala probablemente lo hayan tenido en algún momento de su carrera.

  • Creas todos los subcomponentes por separado y, luego, cuando finalmente los conectas, algo no funciona del todo bien.

  • Y el casco de carreras del conductor era exactamente este.

  • Pero, afortunadamente, pudimos solucionarlo ese mismo día, lo que demuestra que las pruebas siguen siendo muy importantes.

  • Por último, Gemini Nano.

  • Gemini Nano fue un verdadero héroe en este caso.

  • Es un modelo muy eficaz, se ejecuta muy rápido en tu dispositivo y puede realizar tareas muy complicadas, pero no lo hace de inmediato.

  • Hay un pensamiento real detrás de eso.

  • Debes realizar ingeniería de instrucciones.

  • Tienes que probarlo.

  • Debes pensar en cómo quieres alimentar la instrucción dinámica en comparación con la estática.

  • Debes pensar en las herramientas que le darás y en cómo puedes indicarle que lo haga de la mejor manera.

  • Sin embargo, con el tipo correcto de pruebas y evaluaciones, puedes obtener mucho de un modelo como Gemini Nano directamente en el dispositivo.

  • Muchas gracias a todos.

  • Más tarde, estaremos en el stand, así que puedes venir, unirte y hacernos algunas preguntas.

Código

Fragmentos de código

Fragmento de Kotlin en el minuto 7:45 de "Implementación con ADK y 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 */
    )
)