Naar de inhoud
ROVE Labs
Mobiele appsOnderwijs

Theorio: een app voor autotheorie met een eigen 3D-verkeersmotor

Ons eigen product. Een Expo-app voor het Nederlandse theorie-examen auto waarin elke verkeerssituatie wordt gegenereerd en opgelost door een regelmotor, in de app getekend in three.js en uitgelegd met het wetsartikel erbij. Je rijdt er ook in 3D door een Amsterdamse grachtenstraat.

  • Start
  • De Route
  • Een 3D-situatie met uitleg
  • De Amsterdam-rit
  • Gevaarherkenning
  • Bordenkaarten

1.200

gegenereerde 3D-verkeerssituaties

2.370

oefenvragen in vier banken

140

gevaarfoto's uit 338 kandidaten

30

proefexamens in de echte opzet

Uitdaging

Leren voor het theorie-examen is meestal een vaste set plaatjes uit je hoofd leren. Je leert het plaatje, niet de regel, en bij de eerste onbekende kruising op het examen loop je vast. Wij wilden een cursus die eindeloos veel kruisingen kan laten zien, altijd het goede antwoord weet en kan zeggen waarom, met de wet erbij. En hij moest werken waar mensen echt leren: op een telefoon, een paar minuten per keer. Dat vroeg om vier lastige dingen: voorrangsregels die precies genoeg zijn om uit te rekenen, beelden die uit data worden getekend, een vragenbank die klopt als de wet verandert, en 3D dat in een telefoon-app zelf zit.

Oplossing

  1. Eerst de motor

    We schreven de voorrangsregels als een geteste motor voordat we iets tekenden. Een situatie is data, het antwoord wordt berekend en elke stap in het antwoord wijst naar zijn artikel.

  2. Tekenen uit data

    Een three.js-renderer bouwt elke situatie op uit basisvormen. Hij tekent alleen wat de motor heeft beslist, van bovenaf met pijlen of van achter je eigen auto.

  3. Pijplijnen voor inhoud

    Geschreven vragen worden opgesteld tegen opgeslagen wetstekst en geverifieerd. Gevaarfoto's worden gegenereerd uit geschreven specificaties en door een reviewer gekozen aan de hand van een checklist.

  4. Eén app in plaats van een website

    We hebben de interface opnieuw gebouwd als één Expo-app en de webversie uitgezet. De motor, de renderer en de API zijn gebleven; beide 3D-scènes zitten in de app gebundeld.

  5. Een cursus en een rit

    Veertien hoofdstukken, elk een korte weg met een video, theorie, drie rondes vragen, een 3D-rit en een toets, plus dertig proefexamens in de echte opzet. Drie hoofdstukken en één examen zijn gratis.

Resultaat

Theorio is in ontwikkeling en nog niet uitgebracht, dus er zijn nog geen resultaten van leerlingen te melden. Wat er vandaag staat is de app die draait in de iOS-simulator, in het Nederlands en Engels, tegen zijn eigen API: de introductie, de Route met veertien hoofdstukken, alle vier de vragenbanken met hun wetsverwijzingen, bordenkaarten op een gespreid schema, de Amsterdam-rit en dertig proefexamens. Nog open zijn betalen in de app, de lesvideo's, de tekeningen in de theorie, accounts, herinneringen en meer straten om door te rijden.

(01)

Een regelmotor die elk antwoord zelf afleidt

De meeste theorie-apps bewaren een plaatje en de letter van het goede antwoord. Theorio bewaart voor zijn verkeerssituaties geen van beide. Een situatie is een klein datamodel: een kruising met maximaal vier takken, elk met zijn wegtype, bord, verkeerslicht of zebrapad, en twee tot vier weggebruikers met waar ze vandaan komen en waar ze heen gaan.

De motor kijkt eerst welke routes elkaar echt kruisen of samenkomen. Voor elk paar dat botst past hij de Nederlandse voorrangsregels toe in een vaste volgorde: voorrangsvoertuigen, zebrapaden, uitritten, borden, onverharde wegen, trams, verkeer naast je, de voorrangsweg met een bocht, afslaan en als laatste verkeer van rechts. Verkeerslichten en rotondes hebben daarbovenop hun eigen regels. Die beslissingen per paar worden gestapeld tot een volgorde van wie wanneer gaat.

Omdat het antwoord wordt afgeleid, krijg je de uitleg erbij. In de app is dat het antwoordscherm: genummerde labels op de voertuigen, één regel per weggebruiker en onder elke regel het wetsartikel dat de doorslag gaf.

situaties in de gegenereerde bank
1.200
soorten situaties
7
voorrangsregels
12
tests op de motor
52
  1. 01

    Model

    Kruising, borden, lichten en twee tot vier weggebruikers, gecontroleerd zodat onmogelijke situaties afvallen.

  2. 02

    Conflicten

    Welke routes kruisen of komen samen. Wie elkaar niet tegenkomt, hoeft niet op elkaar te wachten.

  3. 03

    Beslissen

    Per botsend paar bepaalt de hoogste regel die geldt wie voorrang verleent.

  4. 04

    Volgorde

    De beslissingen per paar worden één volgorde. Gelijke standen en patstellingen vallen af.

  5. 05

    Uitleg

    Elke stap draagt zijn regel en het artikel waar die uit komt, in het Nederlands en Engels.

Wie gaat als eerste?
Wie gaat als eerste?
Antwoorden door een voertuig aan te tikken
Antwoorden door een voertuig aan te tikken
De volgorde, met het artikel per voertuig
De volgorde, met het artikel per voertuig
Of tik de hele volgorde aan
Of tik de hele volgorde aan

(02)

Dezelfde three.js-scène, ingepakt in de app

De renderer is een apart pakket dat alleen tekent. Hij krijgt een situatie en een volgorde van de motor en beslist zelf nooit over voorrang, zodat het beeld het antwoord nooit kan tegenspreken.

Er zijn geen modelbestanden. Auto's, trams, scooters, fietsers, voetgangers, wegen, stoepranden, haaientanden, zebrastrepen, borden en verkeerslichten worden allemaal in code opgebouwd uit basisvormen. Voor de app bundelen we die renderer tot één losstaande pagina van ongeveer 640 kB. Die zit in de app zelf en draait in een webview, dus voor het tekenen van een kruising is geen server en geen download nodig.

React Native geeft de situatie door als data en krijgt tikken terug als berichten: een auto aantikken in het beeld kiest hetzelfde antwoord als de knop eronder. De camera heeft twee standen, een overzicht met een pijl voor elke route en een beeld van achter je eigen auto voor vragen over wat je moet doen. Alles om de scène heen, van de antwoordknoppen tot het feedbackpaneel, is native.

Rotonde met haaientanden
Rotonde met haaientanden
Voorrangsweg, gezien vanuit je eigen auto
Voorrangsweg, gezien vanuit je eigen auto
Zebrapad bij een kruising
Zebrapad bij een kruising
Uitrit
Uitrit

(03)

Een rit door Amsterdam

Een kruising van bovenaf leert je de regel. Het leert je niet om het moment te zien aankomen. Daarom heeft de app ook een rit: je volgt je eigen auto door een straat langs de gracht met 30 km/u, langs grachtenpanden, geparkeerde auto's, woonboten en fietsers.

De rit stopt twee keer. Eerst voor een gevaar: een voetganger stapt de weg op en je kiest tussen remmen, gas loslaten en niets doen. Daarna bij de brug, waar een tram oversteekt en jij zegt of die voor mag. Dat tweede antwoord ligt niet vast in een script. De kruising gaat naar dezelfde regelmotor als elke andere situatie en de rit speelt verder vanaf wat je hebt geantwoord.

De straat is gebouwd zoals de kruisingen: in code. De gevels, de bomen, de tram en de klinkers met hun texturen worden gemaakt op het moment dat de rit laadt, in ongeveer 2.600 regels TypeScript en zonder één model- of afbeeldingsbestand. Voorlopig is er één straat. Die is een halte op de Route en een tegel op het startscherm.

straat tot nu toe, een Amsterdamse gracht
1
stops: een gevaar en een kruising
2
model- of afbeeldingsbestanden
0
km/u, zoals het zonebord aangeeft
30
De straat voor je vertrekt
De straat voor je vertrekt
Eerste stop: wat doe je?
Eerste stop: wat doe je?
Geremd voor de voetganger
Geremd voor de voetganger
Tweede stop: de tram
Tweede stop: de tram
De tram gaat voor
De tram gaat voor
Einde van de rit
Einde van de rit

(04)

Een cursus in de vorm van een weg

De app begint met een taalkeuze en drie korte vragen: wanneer je examen is, hoeveel minuten per dag je hebt en of je de Route wilt volgen of los wilt oefenen. De antwoorden worden een plan dat je later kunt aanpassen.

De Route heeft veertien hoofdstukken. Elk hoofdstuk is een korte kronkelweg met vijf haltes: een video, de theorie, drie rondes van tien vragen, de 3D-rit en een toets die je haalt met acht van de tien goed. Het startscherm laat zien waar je bent op de Route en wat er vandaag klaarstaat, met een tegel voor alles wat je los kunt oefenen.

Een reeks, punten en een dagdoel houden de stand bij. De theorie kun je ook los lezen, per hoofdstuk, en je kunt erin zoeken.

hoofdstukken op de Route
14
haltes per hoofdstuk
5
rondes van tien vragen
3
om een hoofdstuktoets te halen
8 / 10
Welkom
Welkom
Wanneer is je examen?
Wanneer is je examen?
Route of los oefenen
Route of los oefenen
Je plan
Je plan
Start
Start
De Route
De Route
Hoofdstukken
Hoofdstukken
Theorie
Theorie

(05)

Geschreven vragen, elk gekoppeld aan een wetsartikel

De geschreven vragen dekken wat een 3D-situatie niet kan: maximumsnelheden, parkeren, verlichting, documenten, alcohol, lading. We hebben de relevante Nederlandse verkeerswet lokaal opgeslagen, tien teksten uit de publicatie van de overheid zelf, gesplitst per artikel.

Elke vraag wordt met AI opgesteld tegen de opgeslagen tekst van één artikel en daarna gecontroleerd door een onafhankelijke verificateur. De vraag houdt zijn bron en artikelnummer, en de leerling ziet die verwijzing onder de uitleg.

Een automatische test controleert elke vraag bij iedere wijziging: het aangehaalde artikel moet bestaan, de foto of het bord moet bestaan, de antwoorden moeten compleet zijn en beide talen moeten aanwezig zijn. Een vraag die je mist komt dezelfde dag terug en daarna na één, twee, vier, zeven en veertien dagen. De 154 borden zijn ook kaarten: je beoordeelt elke kaart met een van vier knoppen en het gangbare SM-2-schema bepaalt wanneer je hem weer ziet.

geschreven vragen
730
wetsartikelen opgeslagen
2.888
bordenvragen uit 154 borden
300
talen, Nederlands en Engels
2
  1. 01

    Wet opslaan

    Tien teksten bewaard per artikel, met de datum van de gebruikte versie.

  2. 02

    Opstellen

    AI stelt een vraag op tegen één artikel, in een van drie vormen.

  3. 03

    Verifiëren

    Een onafhankelijke verificateur toetst het concept aan hetzelfde artikel.

  4. 04

    Testen

    Automatische controles op verwijzingen, beelden, antwoorden en vertalingen.

  5. 05

    Review

    Gemelde en vaak gemiste vragen komen in een reviewrij in de API.

Een regelvraag
Een regelvraag
Het antwoord, met zijn bron
Het antwoord, met zijn bron
Welk bord is het?
Welk bord is het?
Een bordenkaart
Een bordenkaart
Hoe goed wist je dit?
Hoe goed wist je dit?
Theorie, één pagina per keer
Theorie, één pagina per keer

(06)

Gevaarfoto's samplen in plaats van schieten

Gevaarherkenning vraagt om foto's vanaf de bestuurdersstoel: een bal die tussen geparkeerde auto's rolt, een voetganger die een zebrapad op stapt, een tractor die de rijstrook voor je vult. Die veilig en legaal op Nederlandse wegen fotograferen is traag en duur, dus we genereren ze.

Elke scène begint als een geschreven specificatie: wat de foto laat zien, hoe hard je rijdt, de juiste reactie en een checklist van wat zichtbaar moet zijn. Per specificatie genereren we twee of drie kandidaten en leggen die naast de checklist. Een reviewer die de specificatie niet schreef kiest er één, of keurt ze allemaal af.

We deden eerst een proef met twee beeldmodellen op dezelfde vijf prompts. Het ene voldeed drie van de vijf keer aan de checklist, het andere vijf van de vijf, en daarmee was de keuze gemaakt. De meest voorkomende reden om een foto af te keuren bleek afstand: het model tekent bijna alles twee tot vier keer dichterbij dan gevraagd, en dat verandert of remmen het goede antwoord is.

scènes gespecificeerd
159
kandidaatfoto's gegenereerd
338
foto's in de app
140
remmen, gas los, niets
49 / 45 / 46
Drie gegenereerde kandidaten van een bal die tussen geparkeerde auto's rolt in een Nederlandse straat
Drie kandidaten voor één specificatie: een bal tussen geparkeerde auto's bij 30 km/u
Drie gegenereerde kandidaten van een voetganger met kinderwagen bij een zebrapad
Drie kandidaten voor een voetganger die een zebrapad op stapt bij 50 km/u

(07)

Proefexamens in de echte opzet

Dertig genummerde proefexamens volgen de opzet van het echte examen: vijftig vragen in dertig minuten, geslaagd bij vierenveertig goed. Elk examen mengt regelvragen, borden, 3D-situaties en gevaarfoto's, en er wordt niets nagekeken tot je inlevert.

Een kaart van vijftig stippen laat zien welke vragen beantwoord, open of gemarkeerd zijn en springt naar elke vraag. Pauzeren bewaart je antwoorden, maar de klok loopt door, net als in de examenzaal. Na afloop is de uitslag uitgesplitst per onderdeel en gaat elke fout met zijn uitleg naar de herhaalrij.

genummerde proefexamens
30
vragen per examen
50
minuten op de klok
30
goed om te slagen
44
Dertig examens, het eerste gratis
Dertig examens, het eerste gratis
Een fotovraag onder de klok
Een fotovraag onder de klok
Gevaarherkenning bij 80 km/u
Gevaarherkenning bij 80 km/u
Pauzeren stopt de klok niet
Pauzeren stopt de klok niet

Next step

Wil je zoiets ook?

Vertel ons over jouw versie van dit probleem.