Yarış arabaları; yüksek hız, ısı ve telemetri kısıtlamaları gibi zorlu koşullara sahiptir. Cihaz üzerinde çalışan bir temsilci, spor ve mühendislik uygulamaları için gerçek zamanlı araç verilerinin işlenmesine nasıl yardımcı olabilir?
Bu teknik oturumda, uç donanım ile bulut aracılarını birleştiren deneysel bir karma mimari inceleniyor. CAN veri yolu telemetrisini yayınlamak için Raspberry Pi, ML Kiti ve Gemini Nano tarafından desteklenen cihaz üzerinde konuşma aracısı çalıştıran bir Pixel telefon ve yarış sonrası iş akışları için aracıdan aracıya (A2A) bulut bağlantısı kullanan bir araştırma kavram kanıtlama çalışmasını inceleyeceğiz.
Transkript
Merhaba,
Adım Alastair. Bugün, geçen yıl Formula E ile birlikte üstlendiğimiz bir proje hakkında konuşmaktan mutluluk duyuyorum.
Bugün Oli de bize katılarak birlikte yaptığımız çalışmalardan bahsedecek.
Google Cloud'da CTO ofisinde çalışıyorum. Mobil ve bulut teknolojilerinde sınırları zorlamaya ve bu iki teknolojinin birlikte nasıl çalışabileceğini keşfetmeye çalışıyoruz.
Şimdi size neler yaptığımızı kısaca anlatan bir video göstereceğim.
4. nesil araç, 600 kW'lık bir yarış canavarıdır.
Tamamen elektrikli, sürekli dört tekerlekten çekişli.
Bence inanılmaz hızlı.
Arabadan gelen telemetri verilerine bağlı bir Pixel telefonda temsilci kullanabilir miyiz?
Sürücü, Goodwood'da tepeye çıkarken arabayla konuşabilecek.
Bu oldukça etkileyici.
Hey Gemma, lastiklerim nasıl?
Lastik basınçları iyi görünüyor, yaklaşık 1,4 bar.
Doğrudan ECU'ya takılı bir telefon var. Bu telefon, sürücü olarak yaptığım her şeyin birçok veri noktasını okuyor.
Bu, bir yarış arabasında ilk kez gerçekleşiyor.
Bunu sergilemek için daha iyi bir yer olamaz.
Gemma, hazır mıyız?
Sizinle birlikte o da hazır olur.
Bu projede, sürücüyle birlikte kokpite bir yardımcı sürücü temsilcisi yerleştirmeyi denemek istedik.
Temel olarak burada yapmaya çalıştığımız şey, uç noktalardaki temsilcilerle mümkün olanın sınırlarını zorlamak. Çünkü bu, gerçekten zor bir sorunun harika bir örneği.
Yarış arabalarında karşılaştığınız zorluklardan biri de tabii ki yüksek sıcaklık.
Yarış arabaları çok ısınır ve bu da en büyük zorluklardan biridir.
Bağlantı kesintili.
Bu etkinliği, yüz binlerce motor sporu hayranının bir araya gelip arabaların tepeye tırmanışını izlediği Goodwood Hız Festivali'nde gerçekleştiriyoruz.
Tahmin edebileceğiniz gibi, bir alanda yüz binlerce kişi olduğunda bağlantı kurmak oldukça zor olabilir.
Bluetooth'u da açın.
Örneğin, bu araba temelde bir Faraday kafesi olduğundan, yarış pilotunun kaskına bağlanabilmek için bile ne tür zorluklarla karşılaşıldığını tahmin edebilirsiniz.
Son olarak da düşük gecikme süresi gereksinimleri vardır.
Bu sürücü saatte 200 km'nin üzerinde hızla gidiyor. Bu nedenle, yardımcı sürücü temsilcisinden aldığı yanıtların gerçekten çok hızlı ve net olması çok önemli.
Temsilcilerin her yerde kullanılacağına inandığımız için bu konuyla yakından ilgileniyoruz.
Bunu şimdiden görmeye başladık.
Artık sadece bilgisayarlarımızda değiller.
Telefonlarımızda, saatlerimizde, gözlüklerimizde, akıllı evlerimizde ve hatta artık arabalarımızda bile var.
Bu nedenle, temel olarak, bu zorlu senaryoda neler başarabileceğimizi görmek istedik.
Bunu nasıl oluşturabileceğimiz konusunda beyin fırtınası yaparken, içinde küçük bir hızlandırıcı bulunan küçük bir mikro bilgisayar mı oluşturmamız gerektiğini düşündük.
İhtiyacımız olan tüm bileşenlerin zaten mevcut olduğunu ve bunun Android olduğunu aniden fark ettik.
Android, Agent Developer Kit (ADK) sayesinde bu iş için mükemmel bir platform.
Bu, doğrudan uygulamanızda temsilci oluşturmanıza olanak tanıyan çok kullanışlı bir kitaplıktır.
Milyarlarca kullanıcı var. Bu nedenle, bunu çok kolay bir şekilde çalıştırabileceğimiz farklı form faktörleri var. Bu nedenle, bunu test etmek ve kodun kendisini dağıtmak gerçekten çok kolay.
Hata ayıklamanıza, farklı şeyler denemenize ve sorunun ne olduğunu bulmanıza olanak tanıyan geliştirici araçları.
Cihaz üzerinde yapay zeka, Google Pixel telefonlar artık telefonun içinde bulunan bir TPU ile birlikte geliyor. Bu TPU, telefonun içinde bulunan cihaz üzerinde model için optimize edilmiştir. Bu sayede, ML Kit gibi API'leri kullanarak gerçekten güçlü bir modele erişmek çok kolay hale geliyor.
Ayrıca, metin okuma ve konuşma tanıma gibi tamamen çevrimdışı API'ler de var. Bunlar, gerçekten güçlü yapay zeka destekli kampanya oluşturma deneyimleri elde etmenizi sağlar.
Son olarak da elbette bağlantı.
Telefonlar, hücresel ağlar, kablosuz ağlar veya diğer yöntemlerle bağlantı kurmak için tasarlanmıştır.
Ancak uçtaki temsilciler her şeyi yapamaz. Bu nedenle, buluttaki temsilcilerle nasıl çalışacakları bir sorun olabilir.
Peki ya çözüm hibrit olsaydı?
Telefonda yaşayan bir temsilci, daha karmaşık işlemleri gerçekleştirmek için buluttaki bir temsilciyle doğrudan konuşabilseydi ne olurdu?
Örneğin, sürücünün yarışta kaçıncı sırada olduğunu öğrenmek istediğini varsayalım.
Arabanın kendisi yarışta hangi konumda olduğunu bilmez ancak Cloud'daki bir temsilci bunu bilebilir.
Ayrıca, uçta ve bulutta temsilciler oluşturup daha karmaşık işlemleri gerçekleştirmek için birbirleriyle doğrudan iletişim kurmalarını sağlayan, temsilciden temsilciye adlı bir protokolümüz var.
Peki, bu modeli nasıl oluşturduk?
Bu sistemin bileşenlerini inceleyelim.
Kablo demetinden başlayın.
Buradaki donanım, Android için Agent Developer Kit'i çalıştıran bir Android uygulamasıdır.
İkinci bölüm ise modeldir.
Bunun için bir modele ihtiyacınız var. Biz, ML Kit üzerinden Gemini Nano'yu kullanıyorduk. Bu, cihaz üzerinde çalışan çok güçlü bir model.
Ardından veriler gelir.
Oli birazdan bu konudan bahsedecek. Arabadan gelen verilerin yanı sıra sürücünün konuşma tanıma verileri de var.
Son olarak, temsilcinin yapabileceği işlemler de vardır.
Bu, sürücüye yanıt verebilmek ve ek sorular sormak veya gerekli bilgileri vermek için metinden sese dönüştürme olabilir ya da daha önce de belirtildiği gibi, daha karmaşık işlemlerden bazılarını gerçekleştirmek için buluttaki bir temsilciyle iletişim kuran temsilciden temsilciye iletişim olabilir.
Şimdi de Oli'yi sahneye davet etmek istiyorum. Kendisi, Formula E ile bunu nasıl yaptığımızı anlatacak.
Teşekkürler Alastair.
Malzemelerimiz hazır, şimdi zor kısma geldik: Yapay zeka ajanını Formula E aracına nasıl entegre edeceğiz?
Bu süreç, VCU'da (araç kontrol ünitesi) başlar.
Artık arabadaki her sensör ve her bileşen, CAN veri yolu adı verilen bir sistem üzerinden bu bilgisayara rapor gönderiyor.
Araç; hız, ivme, gaz, fren ve daha fazlası gibi saniyede binlerce telemetri noktası oluşturuyor.
Bu telemetriyi okumak için Raspberry Pi'yi CAN bağlantısı üzerinden doğrudan aracın VCU'suna bağlamaya karar verdik.
Raspberry Pi birkaç farklı işlem yapar.
İlk olarak ham sinyallerin kodunu çözer, bunları dönüştürür ve yaklaşık 10 Hz'e düşürür. Bu, yardımcı sürücü için yeterli bilgidir.
Raspberry Pi daha sonra bu rafine edilmiş verileri MQTT üzerinden arabanın kokpitinde bulunan bir Pixel 10 Pro'ya yayınlar.
Bu, temsilci uygulamamızı barındıran App Hosting'in kabul edebileceği bir giriştir.
İkincisi, Android konuşma tanıma özelliğidir.
Sürücü konuştuğunda uygulama, girişi metne dönüştürür ve Gemini Nano her iki giriş üzerinde de akıl yürütebilir.
Temsilci artık iki karar verebilir: İlk olarak, Android'in metin okuma motorunu kullanarak sürücüye yanıt verebilir.
İkinci olarak, Alastair'in daha önce bahsettiği gibi, A2A protokolü aracılığıyla bulut temsilcisiyle iletişim kurabilir.
Temsilci akışı oldukça basit: Özel kelimeyi söyleyin (bu örnekte "Hey, Gemma."), sorunuzu sorun ve yanıtı alın.
Temsilci, yanıt verdikten sonra yaklaşık 5 saniye boyunca dinlemeye devam eder. Böylece, gerçek bir yarış mühendisiyle konuşur gibi baştan başlamak zorunda kalmadan ek sorular sorabilirsiniz.
Uygulama aynı zamanda çok adımlı bir temsilcidir. Bu sayede, sohbet geçmişine erişerek daha doğal bir sohbet deneyimi sunabilir.
Bunun için yazılacak kodun biraz karmaşık olacağını düşünüyor olabilirsiniz.
Aslında oldukça basit.
İlk birkaç satır, ML Kit'i kullanarak onDeviceModel modelini çağırır ve Gemini Nano olarak sarmalar.
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 */
)
)Ardından, ADK ile temsilcimizi tanımlarız.
Ona bir ad ve iki tür talimat verin: İlki, kişiliğini ve kim olduğunu belirten statik talimattır.
Sürücüye nasıl yanıt verdiği ve yarış pistiyle ilgili bazı bilgiler de buna dahildir.
İkincisi ise dinamik talimattır.
Bu bilgi, her sorguda en son telemetri özetiyle oluşturulur. Böylece temsilci, sürücünün her an ne yaptığını her zaman bilir.
Daha önce de belirtildiği gibi, mevcut görüşme geçmişini de içerir.
Bunun yanı sıra, önceki oturum verileriyle, bulut temsilcisiyle ve metin okuma özelliğini kullanarak sürücüyle iletişim kurma gibi bazı araçlar da tanımlıyoruz.
Şimdi, Formula E ofisindeki simülasyon ekipmanlarımızda çalışan temsilcinin kısa bir demosunu izleyelim.
Hey Gemma, direksiyonu ne kadar sert kullanıyorum?
Yumuşak ve ölçülü.
Maksimum kilit 48 dereceydi ve direksiyonu saniyede ortalama 11 derece hareket ettiriyordunuz.
Gemma, ulaştığım en yüksek G kuvveti ne kadar?
Virajlarda en yüksek G kuvveti 2, 2 G'ydi.
Gemma, koşum nasıldı?
Güçlü bir koşu, Dan.
Maksimum hız 306 km/sa, 35 saniye boyunca ortalama 186 km/sa.
Sürenin %58'inde tam gaz gittiniz ve 2, 2 G'ye ulaştınız.
Hepsi bu kadar.
Telefonda sürücüyle konuşan ve sorularını anında yanıtlayan Gemini Nano'yu görüyorsunuz.
Simülasyon donanımı başka, Formula E aracı bambaşka bir şey.
Peki, tüm bunları nasıl bir araya getirdik?
Öncelikle araçlarımızın üretildiği Paris'teki Spark Racing Technology'ye gitmemiz gerekiyordu.
Soldaki fotoğrafta, Raspberry Pi'yi Formula E aracının gerçek VCU'suna bağlarken beni görüyorsunuz.
Şimdiye kadar oluşturduğumuz her şey emüle edilmiş veriler üzerinde çalışıyordu ve bir test oturumundan yeniden oynatılıyordu. Bu nedenle, gerçek verilerle çalışıp çalışmayacağını bilmiyorduk.
Cihazı fişe takıp açtık, bekledik, biraz daha bekledik ve sonunda telemetri verileri cihazda görünmeye başladı. Bu da verilerin sistemde beklediğimiz gibi hareket ettiğini kanıtladı.
Sağda, tamamlanmış sistemi görebilirsiniz. Telefonun kokpite, sürücünün oturacağı yerin hemen yanına yerleştirildiğini görebilirsiniz.
Goodwood için her şey hazırdı.
Peki, o gün tam olarak ne oldu?
Alastair'in daha önce bahsettiği dört zorluğu hatırlıyor musunuz?
Goodwood'da bunlardan ikisi test edildi.
İlk olarak ısıdan bahsetmiştik.
İngiltere'de genellikle güneşli hava dışında her türlü hava koşuluna hazırlıklı oluruz.
Doğal olarak, kayıtlara geçen en sıcak haftalardan birini yaşadık. Tam bir sıcak hava dalgasının ortasındaydık.
Formula E aracına bilgisayar yerleştirmek için mükemmel bir zaman.
Ancak bir sürpriz var.
Telefon aslında iyiydi.
Android bu durumdan hiç etkilenmedi.
En çok zorlanan cihazın Raspberry Pi olduğu ortaya çıktı.
Doğrudan arabaya bağlayamadığımız için UPS denen bir cihaz kullanmamız gerekti. UPS, Pi'nin altına yapıştırılmış bir sürü pile benzeyen bir cihaz.
Neyse ki gün boyunca aralıklı olarak şarj ederek bu sorunu çözmeyi başardık. Bu olmasaydı araba muhtemelen yapay zeka ajanı olmadan o tepeye çıkamazdı.
Sırada Bluetooth vardı.
O zamana kadar, uygulamaya Bluetooth ile bağlanan sürücü kaskını hiç test etmemiştik.
Bu da biraz zorlayıcı oluyordu.
Bunu test etmek için çimlere oturduk ve gerçekten iyi vakit geçiriyor gibi görünüyoruz, değil mi?
Dizüstü bilgisayarlarımızı çıkardık, güzel bir sohbet ediyoruz.
Aslında o dönem, kariyerimin şimdiye kadarki en stresli dönemlerinden biriydi.
Öğleden sonraki sürüşten önce kodun düzgün çalışmasını ve Bluetooth kaskın uygulamaya bağlanmasını sağlamak için canla başla çalışıyorduk.
Ancak son dakikada yapılan bazı düzeltmeler ve Android'in mükemmel hata ayıklama araçları sayesinde sorunu tam zamanında çözmeyi başardık ve araç, yapay zeka temsilcisi harika bir şekilde çalışarak tepeye çıktı.
Şimdi sözü Alastair'e bırakıyorum. Alastair, projeden çıkarılan dersler hakkında biraz daha bilgi verecek.
Teşekkürler.
Teşekkürler Oli.
Peki bu projeden neler öğrendik?
İlk olarak, Android, temsilcileriniz için gerçekten mükemmel bir ana makinedir.
Android'in çok yönlülüğünden, kullanabileceğiniz API'lerden, cihaz üzerinde çalışan modellerden ve ADK'den yararlanmanızı kesinlikle öneririm.
Bu kadar basit bir şeyden elde edebileceğiniz deneyimlerin ne kadar güçlü olduğuna şaşıracaksınız.
Entegrasyon cehennemi hâlâ var.
Bu odadaki çoğu kişi muhtemelen kariyerinin bir noktasında bunu yaşamıştır.
Tüm alt bileşenleri ayrı ayrı oluşturursunuz ve sonunda hepsini bir araya getirdiğinizde bir şeyler tam olarak çalışmaz.
Sürücünün yarış kaskı da tam olarak buydu.
Neyse ki sorunu aynı gün çözebildik. Bu durum, test yapmanın ne kadar önemli olduğunu bir kez daha kanıtlıyor.
Son olarak da Gemini Nano.
Gemini Nano bu konuda gerçekten çok yardımcı oldu.
Bu model, cihazınızda çok hızlı çalışan ve karmaşık görevleri yerine getirebilen son derece etkili bir modeldir ancak bu görevleri hemen yapamaz.
Bunun arkasında ciddi bir düşünce var.
İstem mühendisliği yapmanız gerekir.
Test etmeniz gerekir.
Dinamik talimat ile statik talimatı nasıl beslemek istediğinizi düşünmeniz gerekir.
Ona vereceğiniz araçları ve bunu yapması için en iyi şekilde nasıl talimat verebileceğinizi düşünmeniz gerekir.
Ancak doğru test ve değerlendirmelerle Gemini Nano gibi bir modelden doğrudan cihaz üzerinde çok şey elde edebilirsiniz.
Herkese çok teşekkür ederiz.
Daha sonra standımızda olacağız. Gelip bize katılabilir ve sorularınızı sorabilirsiniz.
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 */
)
)