3. tēma: Krāsu sensors un lēmumu pieņemšana (If-Else)
Tavs šīs stundas izaicinājums: Aprīkot robotu ar krāsu sensoru, ieprogrammēt spēju atšķirt krāsas un izveidot algoritmu, kas ļauj robotam autonomi sekot melnai līnijai uz laukuma.
Līdz šim mūsu robots darīja vienu darbību, kamēr kaut kas notika (Wait until). Bet ko darīt, ja robotam nepārtraukti jāizvēlas starp divām rīcībām? Tam mēs izmantojam "If-Else" (Ja-Tad-Citādi) blokus.
Krāsu sensors: Šis sensors var strādāt divos režīmos. Tas var atpazīt konkrētas krāsas (Sarkans, Zils, Zaļš) VAI mērīt atstarotās gaismas intensitāti (Reflected Light) no 0% (pilnīgi melns) līdz 100% (pilnīgi balts). Līnijas sekošanai gaismas intensitātes režīms ir daudz precīzāks!
"If - Else" (Ja - Citādi) bloks: Atrodams dzeltenajā "Control" sadaļā. Tas uzdod jautājumu. Piemērs: JA (If) es redzu melnu krāsu, TAD es griežos pa kreisi. CITĀDI (Else) [tas nozīmē - redzu baltu], es griežos pa labi.
Cikla nozīme: Lai robots sekotu līnijai, šis "If-Else" jautājums ir jāuzdod tūkstošiem reižu sekundē. Tāpēc "If-Else" bloks vienmēr jāliek iekšā "Forever" (Mūžīgi) vai "Repeat until" (Atkārtot līdz) ciklā.
[Ievietot attēlu šeit: Ekrānuzņēmums no SPIKE lietotnes ar dzelteno If-Else bloku Forever cikla, kur If nosacījumā ir Color Sensor mērījums]
1. uzdevums: Krāsu atpazīšana un "Sarkanā gaisma"
Pievienojiet krāsu sensoru un lieciet robotam braukt taisni, līdz tas ierauga sarkanu līniju (vai sarkanu LEGO klucīti uz grīdas).
Izpildes soļi:
Pievienojiet krāsu sensoru robota priekšpusē tā, lai tas būtu vērsts uz leju (pret zemi). Optimālais augstums no grīdas ir aptuveni 1-2 LEGO klucīšu biezumā.
Pievienojiet sensoru brīvam portam (piem., E).
Izmantojiet blokus: start moving [Straight].
Pievienojiet oranžo wait until bloku un tajā ievietojiet gaiši zilo sensora bloku [Color Sensor on E] sees [Red].
Pēc tam pievienojiet stop moving bloku. Pārbaudiet!
2. uzdevums: Divu stāvokļu līniju sekotājs (Zig-zag)
Izveidojiet programmu, kas ļauj robotam sekot melnas līnijas malai, izmantojot atstarotās gaismas intensitāti.
Izpildes soļi:
Izveidojiet jaunu kodu. Sākumā iestatiet motorus. Tad pievienojiet oranžo forever ciklu.
Iekšā ciklā ievietojiet oranžo If ... Else ... bloku.
"If" nosacījumā ielieciet bloku, kas pārbauda gaismas intensitāti: [Color Sensor on E] reflection < [50]%. (Viss, kas tumšāks par 50%, skaitīsies līnija).
Sadaļā "If" (kad redz melnu) ielieciet komandu nedaudz pagriezties pa labi (piemēram, start moving at [30] % steering).
Sadaļā "Else" (kad redz baltu) ielieciet komandu nedaudz pagriezties pa kreisi (piemēram, start moving at [-30] % steering).
3. uzdevums: Koda pielāgošana reālajai trasei
Pārbaudiet robotu uz robotikas paklāja un noregulējiet parametrus tā, lai kustība kļūtu vienmērīgāka un ātrāka.
Izpildes soļi:
Novietojiet robotu uz līnijas MALAS (sensors daļēji uz melnā, daļēji uz baltā).
Ja robots raustās pārāk traki (ass zig-zag), samaziniet stūrēšanas (steering) procentus no 30 uz 15 vai 20.
Pievienojiet programmai set movement speed bloku. Kas notiek, ja palielina ātrumu? Robots, visticamāk, līniju pazaudēs. Atrodiet labāko balansu starp ātrumu un stabilitāti!
Pārbaudiet, vai jūsu sensors nav pārāk tuvu grīdai (strīķējas) vai pārāk augstu (neredz atšķirību starp melnu un baltu).
4. uzdevums (Zvaigznītes izaicinājums): "Saskaitītie krustojumi"
Izaicinājums ātrākajām komandām – izveidojiet programmu, kurā robots brauc pa līniju, bet saskaita, cik reizes tas šķērsojis zaļu līniju/krustojumu, un apstājas pēc 3. reizes.
Izpildes soļi:
Jums būs nepieciešams izveidot Mainīgo (Variable) – nosauciet to "Krustojumi". Koda sākumā iestatiet to uz 0.
Nomainiet forever ciklu uz repeat until [Krustojumi = 3].
Papildiniet "If-Else" loģiku. Jums būs nepieciešams vēl viens If bloks, kas pārbauda: JA sensors redz ZAĻU krāsu, TAD change [Krustojumi] by 1 un nedaudz pagaidīt (lai nesaskaitītu vienu līniju vairākas reizes).
Biežākās kļūdas (un kā tās labot):
Robots riņķo uz vietas, kad atrod līniju: Jūsu stūrēšanas vērtības (steering) ir pārāk lielas (piemēram, 100%), vai arī motors A un B griežas pretējos virzienos. Līnijas sekošanai pietiek ar nelielu pagrieziena leņķi (10% līdz 30%).
Robots pazaudē līniju līkumos: Izvēlētais braukšanas ātrums ir pārāk liels, vai arī "If" nosacījuma slieksnis (50%) neatbilst jūsu klases apgaismojumam. Paskatieties portu skatā, kādu procentu sensors rāda uz melnā un baltā, un izrēķiniet vidējo aritmētisko.
Sensors "redz" līniju tikai dažreiz: Iespējams, izmantojat "Color" (Krāsas) atpazīšanas režīmu melnas līnijas meklēšanai. Krāsu atpazīšana prasa ideālu apgaismojumu. Vienmēr līniju sekošanai izmantojiet "Reflected Light" (Atstarotā gaisma) bloku!
Koda piemērs (Vienkāršais līniju sekotājs)
# SPIKE Word Blocks vizuālā koda tekstuālā reprezentācija
when program starts
set movement motors to [A] and [B]
set movement speed to [25]%
forever:
if [Color Sensor on E] reflection < [50]% then:
start moving at [25] % steering # Griežas uz vienu pusi (prom no līnijas)
else:
start moving at [-25] % steering # Griežas uz otru pusi (atpakaļ uz līniju)
Robots nepārtraukti "lēkās" no līnijas malas uz balto laukumu un atpakaļ, radot zig-zag kustību, kas vidēji virzīs to uz priekšu pa līnijas trajektoriju.