← Back to CoursesStemExpert
StemExpert
Intermediate · Oplossingen · 33. Een mobiele robot
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
I33. Een mobiele robot — oplossingen
IIntermediate · deel I8 · Regelen en robotica

Oplossingen · hoofdstuk 33Een mobiele robot

Twee wielen, drie lichtsensoren en een oor: een inspectierobotje voor de gang van de klimaatmodule

Uitgewerkte oplossingen bij de 16 opdrachten van het werkboek. Voor de leerkracht, en voor wie zichzelf wil verbeteren nadat hij het eerst zelf probeerde.

5× oefenen7× toepassen4× uitdagen± 418 min
Het inspectierobotje meet waar de vaste sensorkast niet komt: laag, langs het hele kweekbed.
Het inspectierobotje meet waar de vaste sensorkast niet komt: laag, langs het hele kweekbed.
Voor de leerkrachtDeze pagina bevat de antwoorden. Druk het werkboek af zonder deze pagina.
Oefenen

Oefenen

één stap, direct toepassen
33.1

Snelheid, hoeksnelheid en draaistraal

Oefenen3Rekenen15 min
Het robotje heeft . Bereken telkens , en , en zeg welke kant het op draait.
  1. a
    , .
    ; (links); .
  2. b
    , .
    ; (rechts); .
  3. c
    , . Hoe lang duurt een volledige draai?
    ; : op de plaats naar links. .
33.2

Een andere tandwielkast

Oefenen4Rekenen15 min
Een ander motortje draait onbelast 12 000 omw/min en heeft een tandwielkast 1:120; het wiel is 42 mm.
  1. a
    Hoe snel draait het wiel, en hoe snel rijdt de robot onbelast?
    ; .
  2. b
    Ons robotje (motor 9000 omw/min, wiel 65 mm) moet hoogstens 0,25 m/s rijden. Welke overbrengingsverhouding past daarbij?
    ; (bv. een kast 1:120).
  3. c
    Wat verandert er aan het koppel op het wiel als je die kast kiest in plaats van 1:48?
    Het koppel wordt ongeveer 120/48 = 2,5 keer groter (min wat meer wrijving in de extra trap): het robotje trekt krachtiger op, maar rijdt trager.
33.3

Van echo naar afstand

Oefenen3Rekenen10 min
De HC-SR04 meet bij 20 °C (343,4 m/s).
  1. a
    Bereken de afstand bij een echo van 5,83 ms en van 1,17 ms.
    ; .
  2. b
    Hoe lang duurt de echo van een wand op 2,50 m?
    .
  3. c
    pulseIn() geeft 0 terug na de time-out van 25 ms. Wat betekent dat voor het robotje?
    Er kwam binnen 25 ms geen echo terug: niets binnen ongeveer 4 m (of een voorwerp dat het geluid wegkaatst of opslorpt). De code maakt er 999 cm van: vrije baan.
33.4

Welke kant op?

Oefenen3Begrijpen8 min
Het robotje rijdt vooruit. Wat doet het bij deze wielsnelheden?
  1. a
    en
    • Abocht naar links
    • Bbocht naar rechts
    • Cop de plaats draaien
    • Drechtdoor achteruit
    Bocht naar rechts: het linkerwiel legt meer weg af.
  2. b
    en
    • Abocht naar links
    • Bbocht naar rechts
    • Cop de plaats tegen de klok in
    • Dop de plaats met de klok mee
    Op de plaats tegen de klok in (naar links): ω > 0 en v = 0.
  3. c
    • Abocht naar links
    • Bstilstaan
    • Crechtdoor achteruit
    • Dop de plaats draaien
    Rechtdoor achteruit.
  4. d
    en : rond welk punt draait het robotje?
    Rond het stilstaande linkerwiel: R = b/2 = 0,07 m voor het midden van de as.
33.5

Wat zien de sensoren?

Oefenen4Begrijpen15 min
IJking: wit 100, zwart 850. De drie sensoren lezen links 850, midden 475, rechts 100.
  1. a
    Bereken w voor elke sensor. Waar ligt de lijn ongeveer?
    , , . De lijn ligt links van het midden, tussen de linker- en de middelste sensor.
  2. b
    Bereken p met het gewogen gemiddelde, en ω met K = 0,25 rad/s per mm.
    ; (naar links).
  3. c
    Welke wielsnelheden stuurt de regelaar bij v0 = 0,20 m/s? Wat zou aan/uit doen?
    , : een krappe bocht naar links. Aan/uit ziet links zwart (en het midden net zwart): het stuurt met een vaste correctie naar links, even hard als bij 3 mm afwijking.
Toepassen

Toepassen

meerdere stappen, in een context
33.6

Omkeren in de gang

Toepassen5Rekenen20 min
Het robotje is 200 × 160 mm; de as zit 110 mm achter de neus en 90 mm voor de achterkant. Op strook A (y = 0,55 m) is er 0,25 m tot de rand van het kweekbed en 0,55 m tot de buitenwand.
  1. a
    Hoe groot is de cirkel die de verste hoek beschrijft bij een draai op de plaats? Kan het robotje op strook A omkeren?
    Verste hoek: van de as: een cirkel met diameter 0,27 m. Aan de kant van het kweekbed is er 0,25 m, meer dan 0,136 m: omkeren kan.
  2. b
    Een klein wagentje met een stuur heeft een kleinste draaistraal van 0,50 m (aan de buitenkant). Kan het in de gang van 0,80 m omkeren zonder te manoeuvreren?
    Nee: een halve cirkel met een straal van 0,50 m vraagt minstens 1,0 m breedte. Het moet vooruit en achteruit steken, of een andere route kiezen. Daarom zijn robotjes met twee wielen zo handig in smalle ruimtes.
  3. c
    In een bocht met R = 0,05 m aan 0,20 m/s: wat doet het binnenste wiel? Waarom is dat een probleem met de dode zone?
    ; binnenwiel : het draait achteruit. Een kleine snelheid in de dode zone (PWM rond 46) geeft haperend draaien: de code moet het wiel voldoende PWM geven of op 0 zetten.
33.7

Hoe erg is de temperatuur?

Toepassen5Rekenen15 min
De module is 's winters soms 5 °C, 's zomers 35 °C. De code rekent altijd met 343,4 m/s. De HC-SR04 meet een echo van 1,75 ms.
  1. a
    Bereken de echte afstand bij 5 °C en bij 35 °C, en wat de code telkens denkt.
    Code: . Bij 5 °C: : . Bij 35 °C: : .
  2. b
    Het robotje stopt als de code 25 cm berekent. Op welke echte afstand stopt het bij 5 °C en bij 35 °C?
    De echte afstand is : bij 5 °C , bij 35 °C .
  3. c
    Is de temperatuurcorrectie hier nodig? Wanneer wel?
    Voor het stoppen niet: het verschil is minder dan 1 cm en er is marge. Wel als het robotje afstanden moet meten (bv. de stand van het vat of de breedte van de gang), of buiten in de vrieskou.
33.8

Een pad tekenen

Toepassen5Tekenen20 min
Het robotje () staat in de oorsprong en kijkt naar de positieve x-as. Het krijgt na elkaar: (1) gedurende 2,0 s; (2) , gedurende 1,1 s; (3) gedurende 1,0 s; (4) , gedurende 2,2 s.
  1. a
    Bereken na elke stap de plaats en de richting.
    (1) 0,40 m rechtdoor: (0,40; 0), richting 0°. (2) , 1,1 s: 90° naar links op de plaats: (0,40; 0), richting +y. (3) 0,20 m: (0,40; 0,20). (4) , , , 2,2 s: 90° naar rechts rond (0,61; 0,20): eindpunt (0,61; 0,41), richting weer +x.
  2. b
    Teken het pad op schaal (1 hokje = 5 cm).
    Een recht stuk van 40 cm, een draai op de plaats, 20 cm omhoog, en een kwartcirkel van 21 cm straal naar rechts.
33.9

Code: de afstand meten

Toepassen5Programmeren20 min
Schrijf een functie die met de HC-SR04 de afstand in cm teruggeeft, gecorrigeerd voor de temperatuur luchtT.
  1. a
    Schrijf de functie meetAfstand(). Gebruik pulseIn met een time-out.
    float meetAfstand() {
      digitalWrite(TRIG, LOW);
      delayMicroseconds(2);
      digitalWrite(TRIG, HIGH);
      delayMicroseconds(10);
      digitalWrite(TRIG, LOW);
      unsigned long us = pulseIn(ECHO, HIGH, 25000UL);
      if (us == 0) return 999.0;                 // geen echo
      float v = 331.3 + 0.606 * luchtT;          // m/s
      return us * 1e-6 * v / 2.0 * 100.0;         // cm
    }
  2. b
    Waarom zet je TRIG eerst 2 µs laag voor de puls van 10 µs?
    Zo begint de puls zeker van een schone lage toestand: de sensor ziet een duidelijke stijgende flank.
  3. c
    Waarom meet het robotje niet in elke ronde van loop(), maar om de 60 ms?
    Een late echo van de vorige meting kan anders als nieuwe echo tellen; de datasheet raadt minstens 60 ms tussen twee metingen aan. En pulseIn() wacht tot 25 ms: in elke ronde meten zou de regelaar vertragen.
33.10

Hoe snel mag het robotje?

Toepassen6Programmeren30 min
Gebruik lijnvolger.py uit het handboek.
  1. a
    Laat rij() lopen met v0 = 0,30 en 0,40 m/s (T = 2,0/v0) voor K = 0,1 en K = 0,25. Wat stel je vast?
    Met K = 0,25 volgt het robotje de bocht ook aan 0,30 en 0,40 m/s (4,3 en 2,6 mm in de bocht). Met K = 0,1 verliest het de lijn vanaf 0,30 m/s (106 mm).
  2. b
    Voeg een kengetal toe: de grootste afwijking in de bocht (x ≥ 1,40 m). Schrijf de regel code.
    bocht = max(p[3] * 1000 for p in pad if p[1] >= 1.40)
  3. c
    Waarom heeft de regelaar bij een hogere snelheid meer versterking nodig?
    In een bocht met straal moet het robotje draaien met . Die draaisnelheid komt uit : bij een grotere moet groter worden (de lijn verder opzij), tot ze buiten de sensoren valt. Met een grotere volstaat een kleinere .
33.11

Labo: snelheid en dode zone

Toepassen5Labo50 min
Voer de proef uit het handboek uit met je eigen robotje of een motor met wiel.
  1. a
    Meettabel: PWM-waarde, drie tijden over 1,0 m, gemiddelde snelheid.
    Bv. zoals de voorbeeldmeting in het handboek.
  2. b
    Zet v uit tegen de PWM-waarde. Bepaal de dode zone en de helling van de rechte.
    Voorbeeld: dode zone rond PWM 46; helling ongeveer 0,60 m/s per 209 PWM-stappen = 0,0029 m/s per stap.
  3. c
    Schrijf het model van je motor als v = a · (PWM − PWM0). Welke PWM-waarde geeft 0,20 m/s?
    v ≈ 0,0029 · (PWM − 46); voor 0,20 m/s: PWM ≈ 46 + 0,20/0,0029 ≈ 115.
  4. d
    Rijdt je robotje rechtdoor als beide motoren dezelfde PWM-waarde krijgen? Hoe los je een verschil op?
    Meestal niet: twee motoren zijn nooit helemaal gelijk. Oplossing: per motor een eigen factor (ijken), of de rijrichting regelen (lijnvolger, of odometrie met encoders).
Zo wordt dit beoordeeld
MetingenNa een aanloop gemeten, drie keer per waarde, ook rond de dode zone fijner gemeten.
GrafiekAssen met eenheden, rechte door de punten boven de dode zone, snijpunt afgelezen.
Modela en PWM0 met eenheden; de PWM-waarde voor 0,20 m/s berekend.
KritiekVerschil tussen de motoren benoemd; oplossing met een correctiefactor per motor of met de lijnvolger.
33.12

Vind de fouten in de robotcode

Toepassen6Programmeren20 min
Een eerste versie van drie cases uit robot.ino. Het robotje doet vreemde dingen.
case VOLGEN:
  if (afstand < STOP_CM) naar(WACHTEN, nu);
  else if (streep) { punten++; naar(METEN, nu); }
  else volg(pos, V_RIJ);
  break;
case WACHTEN:
  if (afstand > STOP_CM) naar(VOLGEN, nu);
  break;
case KEREN:
  if (wit01(REFL_M) > 0.6) naar(TERUG, nu);
  break;
  1. a
    Op een meetpunt blijft het robotje eindeloos meten: na METEN gaat het naar VOLGEN en meteen weer naar METEN. Waarom?
    Het robotje staat nog op de streep: 'streep' blijft waar. Alleen de flank (net op de streep gekomen) mag tellen: nieuweStreep.
  2. b
    Voor een emmer op ongeveer 25 cm schokt het robotje: stoppen, vertrekken, stoppen. Waarom? En wat als de emmer blijft staan?
    Eén grens voor stoppen en vertrekken: rond 25 cm schommelt de meting en wisselt de toestand voortdurend. Hysterese (stop onder 25, vertrek boven 30 cm) en even wachten lost het op. Blijft de emmer staan, dan wacht het robotje eeuwig: er is geen time-out.
  3. c
    KEREN draait niet: het robotje gaat meteen naar TERUG. Waarom?
    Bij het begin van KEREN staat de middelste sensor nog op de lijn: de voorwaarde is meteen waar. Eerst minstens 1,8 s draaien.
  4. d
    Schrijf de verbeterde cases.
    case VOLGEN:
      if (afstand < STOP_CM) naar(WACHTEN, nu);
      else if (nieuweStreep) { punten++; naar(METEN, nu); }       // fout 1: alleen de flank telt
      else volg(pos, V_RIJ);
      break;
    case WACHTEN:
      if (afstand > VRIJ_CM && t >= 1000) naar(VOLGEN, nu);     // fout 2: hysterese en even geduld
      else if (t >= WACHT_MAX_MS) naar(KEREN, nu);              //         en een uitweg als het blijft
      break;
    case KEREN:
      if (t >= DRAAI_MIN_MS && wit01(REFL_M) > 0.6) naar(TERUG, nu);   // fout 3: eerst wegdraaien
      else if (t >= DRAAI_MAX_MS) naar(FOUT, nu);
      break;
Uitdagen

Uitdagen

transfer, open problemen, leerlijnen combineren
33.13

Habitat: de inspectieronde

Uitdagen7Habitat75 min
Het team wil dat het robotje overdag (6 tot 22 uur) elk uur een ronde rijdt, en 's nachts twee keer. Bij elke ronde meet het op drie punten temperatuur, luchtvochtigheid en lekken. In de module werken soms mensen, en in de modus ONDERHOUD mag het robotje niet rijden (hoofdstuk 32).
  1. a
    Bereken de tijd en de energie per ronde en per dag. Neem 1,0 W voor de elektronica terwijl het robotje wakker is, en 1,9 W extra voor de motoren tijdens het rijden.
    Een ronde: de lus is 2,84 m; ±1,6 m heen aan 0,20 m/s (8 s) en ±1,3 m terug aan 0,12 m/s (11 s): ±19 s rijden, 30 s meten: ±50 s. Energie: . 18 rondes: ±0,43 Wh per dag. Het wachten tussen de rondes kost meer: de elektronica (±0,3 W voor de Uno alleen) gebruikt ±7 Wh per dag. Zonder laadstation zou de batterij van ±10 Wh dus maar ongeveer een dag meegaan; op het laadstation geen probleem.
  2. b
    Hoe weet het robotje dat de module in ONDERHOUD is? Stel een oplossing voor (hardware of draadloos) en pas het toestandsdiagram aan.
    Bijvoorbeeld: een draadloze module (Expert, hoofdstuk 37) of eenvoudig een contact in het laadstation dat de Mega bedient: in ONDERHOUD of ALARM geeft de Mega geen startsignaal. In het diagram: LADEN --startsignaal [module NORMAAL]--> VOLGEN; tijdens een ronde: bericht 'onderhoud' → TERUG.
  3. c
    Een meting op meetpunt 2 geeft 'NAT'. Wat moet er gebeuren, bij het robotje en in de module?
    Het robotje meldt het lek met de plaats (meetpunt 2) en rijdt verder (het is geen gevaar voor de robot). De Mega krijgt de melding: pomp stil (zoals bij A_WATER), alarm, en een mens gaat kijken.
  4. d
    Wat kan het robotje meten dat de vaste sensorkast niet kan? Stel twee extra metingen voor en zeg waar op de route.
    Bv. de temperatuur op twee hoogtes (0,10 en 0,50 m: koude lucht blijft laag), het licht onder de goten (schaduw voor de onderste planten), de luchtvochtigheid vlak bij de bladeren, later een foto (Expert: zieke planten herkennen).
  5. e
    Maak een testplan: welke situaties test je, en hoe weet je dat het robotje goed reageert?
    Tests: een emmer die even en een krat die blijvend in de weg staat, een plas op elk meetpunt, een stuk lijn dat weg is (FOUT na 1,5 s), een voet voor de sensor, laadcontact vuil, onderhoud tijdens een ronde. Per test het verwachte verloop van de toestanden, gelogd via de seriële poort.
Zo wordt dit beoordeeld
EnergieRijtijd uit de lengte van de lus en de snelheden, meettijd, wachttijd; energie per ronde en per dag; vergelijking met de batterij.
Koppeling met de moduleONDERHOUD en ALARM bereiken het robotje (bv. een draadloos bericht of een contact in het laadstation) en houden het op het station.
LekRobot meldt en stopt niet voor niets; de module sluit de pomp af (alarm A_WATER of een nieuwe oorzaak) en waarschuwt.
MetingenZinvolle extra metingen (bv. licht onder de goten, temperatuur op twee hoogtes, een foto van de planten) met plaats en reden.
TestplanObstakel even en blijvend, plas, lijn onderbroken, laadstation bezet, onderhoud tijdens een ronde; verwacht gedrag per test.
33.14

Ontwerp: omrijden of omkeren?

Uitdagen6Ontwerpen35 min
Het robotje keert nu om als de gang 20 s geblokkeerd is. Een collega wil dat het rond een obstakel rijdt: van de lijn af, erlangs, en terug op de lijn. Een emmer heeft een diameter van 0,30 m en staat midden op strook A (y = 0,55 m).
  1. a
    Is er naast de emmer genoeg ruimte? Reken met de breedte van het robotje en een veiligheidsmarge van 5 cm.
    Emmer van y = 0,40 tot 0,70 m. Naar het kweekbed: 0,80 − 0,70 = 0,10 m: te smal voor 0,16 m. Naar de wand: 0,40 m vrij; het robotje (0,16 m) met 2 × 0,05 m marge heeft 0,26 m nodig: dat kan, via de buurt van strook B.
  2. b
    Ontwerp de toestanden en overgangen voor omrijden. Welke sensoren gebruikt het robotje als het geen lijn ziet?
    Bv.: VOLGEN --obstakel 5 s--> UITWIJKEN (90° naar rechts op de plaats, 0,25 m rijden met odometrie) → LANGS (rechtdoor 0,50 m, de sonar kijkt of het vrij is) → TERUGDRAAIEN (90° naar links, rijden tot een sensor de lijn vindt) → VOLGEN; elk met een time-out naar FOUT. Zonder lijn: odometrie (wielomwentelingen) en de afstand tot de wand of de emmer.
  3. c
    Geef twee argumenten voor en twee tegen omrijden in de gang van de module. Wat kies jij?
    Voor: de ronde wordt afgewerkt, geen gemiste meetpunten. Tegen: zonder lijn is de plaats onzeker (odometrie dwaalt af), het robotje rijdt dichter bij mensen, emmers of planten, meer code en meer te testen. In deze smalle gang is omkeren en melden eenvoudiger en veiliger; in een brede hal zou omrijden zinvoller zijn.
Zo wordt dit beoordeeld
RuimteCorrecte berekening van de vrije ruimte aan beide kanten, met marge.
ToestandenVan de lijn af, erlangs (met odometrie of afstand tot de wand), terugzoeken van de lijn, time-out en FOUT.
AfwegingVeiligheid, planten, eenvoud en betrouwbaarheid tegen snelheid en volledigheid van de ronde.
33.15

Onderzoek: de beste versterking

Uitdagen7Onderzoeken45 min
Onderzoek met lijnvolger.py hoe de versterking K en de snelheid v0 samen de nauwkeurigheid in de bocht bepalen.
  1. a
    Laat de simulatie lopen voor alle combinaties van v0 (0,10 tot 0,40 m/s) en K (0,1 tot 1,0). Noteer de grootste afwijking in de bocht.
    De simulatie van het handboek geeft (grootste afwijking van de as in de bocht, mm):
    v0 (m/s)K = 0,10K = 0,25K = 0,50K = 1,00
    0,105,610,311,411,9
    0,201,67,010,211,4
    0,30kwijt (106)4,38,811,0
    0,40kwijt (237)2,67,410,1
  2. b
    Welke K werkt bij alle snelheden? Waar verliest het robotje de lijn, en waarom?
    K = 0,25 werkt bij alle snelheden. Met K = 0,1 verliest het robotje de lijn vanaf 0,30 m/s: om ω = v/R te halen, moet de lijn verder opzij liggen dan de buitenste sensor. Grote K (1,0) werkt, maar met meer afwijking: de regelaar slingert.
  3. c
    Bij 0,20 m/s is K = 0,1 in de bocht het nauwkeurigst, terwijl ze bij 0,30 m/s faalt. Verklaar met de plaats van de sensoren (60 mm voor de as).
    De sensoren kijken 60 mm vooruit. In een bocht ligt de lijn onder de sensoren meer naar binnen dan onder de as. Een zwakke regelaar laat de sensoren wat naar buiten van de lijn rijden, en dan volgt de as de bocht toevallig beter. Bij een hogere snelheid is die speling op: dan ligt de lijn buiten de sensoren.
Zo wordt dit beoordeeld
RoosterAlle combinaties systematisch doorgerekend, met hetzelfde kengetal.
ConclusieEen K gekozen die bij alle gevraagde snelheden werkt, met een getal onderbouwd.
VerklaringRol van de sensorplaats en van het nodige draaien (ω = v/R) juist uitgelegd.
33.16

Plaats bijhouden met de wielen

Uitdagen7Analyseren25 min
Elk wiel krijgt een encoder: een schijfje met 20 gleuven en een lichtsluis, dus 20 pulsen per omwenteling. Na een stuk rijden telt het robotje 180 pulsen links en 200 pulsen rechts.
  1. a
    Hoeveel mm is één puls? Hoeveel heeft elk wiel afgelegd?
    Omtrek , dus 10,21 mm per puls. Links , rechts 2,042 m.
  2. b
    Bereken de afgelegde weg van het midden en de draaihoek.
    ; naar links.
  3. c
    Het linkerwiel is 1 % groter dan het rechter, maar de code weet dat niet. Hoe scheef staat het robotje na 10 m rechtdoor? Wat leer je daaruit?
    Het linkerwiel legt 1 % meer af: na 10 m verschil, dus scheef, terwijl de code denkt rechtdoor te rijden. Odometrie stapelt kleine fouten op; een lijn, een wand of een andere sensor moet de plaats telkens bijstellen (Expert: sensorfusie).