När du programmerar en robotbil kan det vara en Herculean försök att hitta en parkeringsplats. Mike Montemerlo vet allt om den ansträngning som krävs för komplexa AI-rutiner, som har programmerat körbesluten för två autonoma körfordon vid DARPA-utmaningarna. Vi bad honom att popa huven och låt oss ta en titt inuti hans skapelser.

TechRadar: Skulle du beskriva några av de tekniska funktionerna i Junior och Stanley robotbilar och några av de utmaningar du hade när du skrev programkoden?

Mike Montemerlo: Programvara för robotbilar kan grovt bryts upp i två delar: uppfattning och beslutsfattande (ibland kallad planering). Perceptionsprogrammet tar i sig obehandlade sensordata och bygger en modell av världen runt roboten.

När det gäller autonom körning är vi mest intresserade av farorna runt fordonet, till exempel kantstolar, andra bilar, fotgängare, cyklister och skyltar. Beslutsfattande mjukvaran, eller "planerare", kombinerar denna världsmodell och dess mål och beslutar om en åtgärd för att ta det som är säkert, vara övertygande och flyttar bilen mot målet.

Några av de specifika uppgifter som junior behöver hantera under körning innefattar hinderdetektering och undvikande, lokalisering och körfältcentrering, detektering och spårning av andra fordon samt planering av vägar till avlägsna kontrollpunkter. Robotisk uppfattning och beslutsfattande är mycket svåra i den verkliga världen eftersom den verkliga världen är osäker.

Våra sensorer är bullriga, och våra handlingar tränar inte alltid så som vi kan förvänta oss. Av detta skäl tar vi ett probabilistiskt förhållningssätt till robotiken, modellerar bullret på våra sensorer och handlingar.

TR: Hur är utvecklingen i robotar som hjälper de vanliga modellerna som produceras för försäljning nu?

MM: Bilar förstår världen bättre och i vissa fall tar det faktiskt små åtgärder för att göra dig säkrare. Anti-lock bromsar är ett mycket enkelt exempel. De mäter hastigheten på dina hjul och sedan applicera bromsarna för att ge dig kontroll i en skid.

När du bromsar väldigt hårt tar styrningen kontrollen. Nu finns det saker som adaptiv farthållare där bilen håller avståndet till en bil framför dig och justerar hastigheten för att du inte behöver ständigt fitta med dina kontroller. Du kan tänka på det eftersom bilen tar lite kontroll bort från dig, som är lite mer självständig. Slags som en baksätsförare där roboten säger: "Du kommer att slå samman i trafiken, men det finns en bil du inte har sett".

Bilen kan skaka sätet eller använda bromsarna eller på annat sätt göra något för att förhoppningsvis undvika olycka innan det händer.

TR: Beskriv några av de programmeringar som krävs för något som att trycka på en knapp och säga, "Ta mig till London". Vilka är skillnaderna i programmering för de olika uppgifterna som behövs?

MM: Junior tänker på problemet på flera olika nivåer. Först tänker han på det på global nivå, som din GPS-enhet, som leder dig från A till B. Det är ett enkelt problem att lösa. Nästa nivå är Junior tänkande på världen när det gäller banor.

Han har en kort - kanske 100 meter lång bana som han planerar för att hålla sig centrerad i banan och undvika kurvorna, och han måste fatta beslut som, "Vilken bana ska jag vara med för att göra de snabbaste framstegen?" och "Kommer jag få tillräckligt med tid för att komma tillbaka i banan jag vill vara med för att göra min tur?"

TR: Vad är några av de komplexiteter som är förknippade med autonom körning?