Programmering af kørsel langs en rute

Ole Caprani
Institut for Datalogi, Aarhus Universitet,
ocaprani@cs.au.dk

Sidst opdateret 6.10.19.

Mange opgaver på robotbaner løses ved at få robotten til at køre en rute fra én position på banen til en anden. En sådan kørsel kan programmeres på utroligt mange måder. En simpel måde er at bruge ruter, som består af strækninger, hvor robotten kører ligeud efterfulgt af punkter, hvor robotten drejer på stedet:

Kør ligeud

Programmering af kørsel langs ligeud strækningerne kan klares med bevægelsesstyring-blokken, se EV3 hjælp > Programmeringsblokke > Handlingsblokke > Bevægelsesstyring.

I bevægelsesstyring-blokken kan det angives på tre måder, hvor langt robotten skal køre: antal sekunder motorerne skal være tændt, antal hjulomgange målt i grader eller målt i antal omdrejninger.

På videoen kører robottens hjul netop en omgang, som det kan ses på den hvide pil i hjulet. Strøm er sat til 20, så robotten kører langsomt nok til det kan ses, hvordan motoren bevæger hjulet netop en omgang:

Hvis Tændt i sekunder benyttes, afhænger det af batteriniveauet, hvor langt robotten kører den angivne tid. Det betyder, at den tilbagelagte strækningen afhænger af batteriniveau. Sådan er det ikke, hvis hjulomgange benyttes. Uanset batteriniveau (næsten) kører robotten netop det antal hjulomgange, som er angivet. Brug derfor f.eks. Tændt i omdrejninger for at køre den samme strækning uanset batteriniveau.

At prøve sig frem

Ved at prøve sig frem med forskellige antal omdrejninger af hjulene kan robotten bringes til at køre en bestemt strækning, f.eks. 50 cm.

Opgave 1: Hvor mange omdrejninger skal hjulene kører for at robotten kører 50 cm ligeud?

At regne den ud

Det kan blive noget besværligt at prøve sig frem.

I stedet kunne det være rart, at kunne måle strækningen f.eks. i antal cm og så ud fra antal cm udregne, hvor mange omgange af hjulene, der skal til for at få robotten til at køre det ønskede antal cm.

Til det formål laves et forsøg, hvor det måles, hvor mange cm robotten kører, når antal omdrejninger er f.eks. 1, 1,5 , 2 og 2,5. Resultaterne kan vises i en tabel eller i en graf:

Ud fra grafen kan det se ud som om strækningen (målt i cm) kan fås ud fra antal omdrejninger ved at benytte ligningen:
Faktoren 17,5 er den strækning i cm robotten tilbagelægger, når motorerne drejer 1 omgang. Ligningen passer i hvert fald nogenlunde med resultaterne i tabellen for 1,5 omdrejninger (giver 26,25 cm mod tabellens 26,4 cm), 2 omdrejninger (giver 35,00 cm mod tabellens 35,2 cm) og 2,5 omdrejninger (giver 43,75 cm mod tabellens 44,0 cm).

Antages ligningen også at gælde for andre antal omdrejninger end de, som står i tabellen, kan ligningen bruges til at regne ud, hvor mange omdrejninger der skal til for at køre en given strækning:

Skal robotten f.eks kører 50 cm skal den tilbagelægge 50/17,5 omdrejninger = 2,86 omdrejninger. Prøv at eksperimentere med denne måde at få robotten til at køre en given strækning:
Opgave 2: Mål en given strækning i cm og udregn antal omdrejninger, sæt antal omdrejninger ind i bevægelsesstyring-blokken og se så om robotten kører den strækning som ønskes.
Opgave 3: Parametren Strøm til bevægelsesstyring-blokken bestemmer hvor hurtigt robotten kører. Prøv at finde ud af om robotten kører nøjagtigt ved små eller store hastigheder, altså ved små eller store værdier af Strøm.
Opgave 4: Parametren Strøm til bevægelsesstyring-blokken kan også sættes til et negativt tal f.eks. -50. Hvad sker?

Drej på stedet

Programmering af drejning på stedet kan også klares med bevægelsesstyring-blokken. Sæt parametren Styring til 100. Det betyder, at hjulene drejer lige hurtigt rundt, men i modsat retning. Resultatet er, at robotten drejer på stedet og hjulene bevæger sig på en cirkel.

Den strækning, som robotten skal køre på cirklen, kan igen angives på tre måder. Brug Tændt i antal omdrejninger, så strækningen er uafhængig af batteriniveau. På videoen ses hvordan det ser ud, når roboten drejer på stedet med Strøm lig 20 og hjulet drejer netop en omgang:

At prøve sig frem

Ved at prøve sig frem med forskellige antal omdrejninger af hjulene kan robotten bringes til at dreje en bestemt vinkel, f.eks. 90 grader.

Opgave 5: Hvor mange omdrejninger skal hjulene kører for at robotten drejer 90 grader om sin egen akse?

At regne den ud

Det kan blive noget besværligt at prøve sig frem.

I stedet kunne det være rart, at kunne måle vinklen f.eks. i antal grader og så ud fra antal grader udregne, hvor mange omgange af hjulene, der skal til for at få robotten til at dreje det ønskede antal grader.

Til det formål laves et forsøg, hvor det måles, hvor mange grader robotten drejer, når antal omdrejninger er f.eks. 0,25 , 0,5 , 0,75 og 1. Resultaterne kan vises i en tabel eller i en graf:

Ud fra grafen kan det se ud som om vinklen (målt i grader) kan fås ud fra antal omdrejninger ved at benytte ligningen:
Faktoren 195 er den vinkel i grader robotten tilbagelægger, når motorerne drejer 1 omgang. Ligningen passer i hvert fald nogenlunde med resultaterne i tabellen for 0,25 omdrejninger (giver 48,75 grader mod tabellens 55 grader), 0,5 omdrejninger (giver 97,5 grader mod tabellens 98 grader) og 0,75 omdrejninger (giver 146,25 grader mod tabellens 146 grader).

Antages ligningen også at gælde for andre antal omdrejninger end de, som står i tabellen, kan ligningen bruges til at regne ud, hvor mange omdrejninger der skal til for at dreje en given vinkel:

Skal robotten f.eks dreje 90 grader skal den tilbagelægge 90/195 omdrejninger = 0,46 omdrejninger. Prøv at eksperimentere med denne måde at få robotten til at dreje en given vinkel:
Opgave 6: Mål en given vinkel i grader og udregn antal omdrejninger, sæt antal omdrejninger ind i bevægelsesstyring-blokken og se så om robotten drejer den vinkel som ønskes.
Opgave 7: Parametren Strøm til bevægelsesstyring-blokken bestemmer hvor hurtigt robotten kører. Prøv at finde ud af om robotten drejer nøjagtigt ved små eller store hastigheder, altså ved små eller store værdier af Strøm.
Opgave 8: Parametren Strøm til bevægelsesstyring-blokken kan også sættes til et negativt tal f.eks. -50. Hvad sker?

At få EV3 til at regne det ud

I EV3 projektet Rute.ev3 ses et program Rute, som får robotten til først at køre ligeud 10 cm, dernæst dreje på stedet til højre 90 grader, ... Prøv:
De to blokke, MoveCM og SpinDegree, er brugerdefinerede programmeringsblokke. Blokkene findes i den tyrkis mappe nederst på siden i EV3 projektet:
Fordelen ved at lave sådanne blokke er, at det nu er mere simpelt at programmere ruter bestående af kør ligeud og drej på stedet, idet sædvanlige måleenheder kan anvendes nemlig cm og grader.
Opgave 9: Brug blokkene MoveCM og SpinDegree til at lave andre ruter og undersøg, hvor nøjagtigt ruten følges. Hvordan afhænger nøjagtigheden af den anden parameter, Power, i de to blokke MoveCM og SpinDegree?

Et dobbeltklik på MoveCM åbner et faneblad, som ser sådan her ud:

Ved hjælp af datakabler ( se under Hjælp > EV3 hjælp > Generelt > Datakabler) føres antal cm (f.eks. 10 som ovenfor) til en rød matematik-blok ( se under Hjælp > EV3 hjælp > Programmeringsblokke > Matematik) hvor antal cm divideres med 17,5. Resultatet føres via et datakabel til antal omdrejninger i bevægelsesstyring-blokken. I MoveCM udregner EV3 altså antal omdrejninger ud fra ligningen:
I SpinDegree benyttes ligningen:
til at lave en tilsvarende beregning, så EV3 i en matematik-blok udregner antal omdrejninger ud fra den vinkel, som robotten skal dreje. Det ser sådan her ud:
Hvis de to blokke ikke kører helt den strækning eller vinkel som ønskes, kan konstanterne 17,5 eller 195 blot justeres.