ebSkola

1.5 Noslēguma projekts: Pārbaudes misija

Stundas uzdevums: Izplānot, uzbūvēt, notestēt un demonstrēt autonomu LEGO SPIKE robotu, kas izmanto kustību, sensorus un manipulatoru vienotā pārbaudes misijā.

D.7.2.1. Programmējamas ierīces vadība D.7.3.1. Sensoru signālu izmantošana D.7.4.2. Nosacījumi un cikli robota uzvedībā D.7.5.1. Programmas sadalīšana loģiskos blokos D.7.6.1. Komponentu integrācija vienotā ierīcē

70 min plāns: Teorija un lomu sadale (~10 min) · 1. uzdevums (~15 min) - pārbaudi, vai bāze brauc atkārtojami · 2. uzdevums (~25 min) - liec robotam apstāties pēc sensora · 3. uzdevums (~20 min) - salien visu vienā misijā un nodemonstrē. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: paņem robotu ar satvērēju no 1.4 stundas, abus sensorus, mērlenti un misijas laukumu ar starta zonu un kravas objektu.

Teorija: no atsevišķiem blokiem līdz misijai

Noslēguma projektā svarīgākais nav uzbūvēt vissarežģītāko robotu. Svarīgākais ir pierādīt, ka robota mehānika, sensori un programma strādā kopā atkārtojamā veidā. Labs risinājums ir tāds, kuru komanda var palaist vairākas reizes un izskaidrot, kāpēc robots pieņem konkrētus lēmumus.

Misijas cikls: starts -> sekošana līnijai vai kustība pēc attāluma -> objekta noteikšana -> satveršana -> atgriešanās -> kravas atlaišana -> rezultāta izvērtēšana.

# SPIKE Word Blocks tekstuāls piemērs
when program starts
set movement motors to [A] and [B]
set movement speed to [40]%

move [forward] for [30] [cm]
wait until distance sensor is < [10] [cm]
stop moving

run motor [C] for [90] [degrees]  # satver kravu
move [backward] for [30] [cm]
run motor [C] for [-90] [degrees] # atlaiž kravu

Pirms demonstrācijas vienojies ar komandu par lomām: konstruktors atbild par mehāniku, programmētājs par bloku loģiku, testētājs pieraksta kļūdas un prezentētājs skaidro risinājuma izvēles. Lomas drīkst mainīt, bet katram jāzina sava atbildība.

Praktiskie uzdevumi

1. uzdevums -

Pārbaudi, vai bāze brauc atkārtojami

Beigās tavs robots trīs reizes pēc kārtas apstāsies vienā un tajā pašā vietā.

  1. Pārbaudi, vai robota bāze ir cieši salikta un nezaudē detaļas, kad apstājas.
  2. Pieraksti portus komandas README.md failā: kreisais motors A, labais motors B, satvērējs C.
  3. Uzraksti testa programmu: izbrauc 40 cm, apgriezies par 180 grādiem, atgriezies.
  4. Atzīmē starta vietu uz grīdas ar līmlenti.
  5. Palaid programmu trīs reizes pēc kārtas.
  6. Izmēri, cik centimetru robots katru reizi paliek garām līmlentei.

Gatavs, kad: visos trīs braucienos robots apstājas ne tālāk kā 5 cm no līmlentes.

2. uzdevums -

Liec robotam apstāties pēc sensora

Beigās tavs robots pats apstāsies 10 cm pirms šķēršļa, nevis ietrieksies tajā.

  1. Iespraud krāsu sensoru portā E un distances sensoru portā F - porti A, B un C jau ir aizņemti ar motoriem.
  2. Kalibrē sensorus klasē un pieraksti vērtības: melnā līnija (piem., 15), baltā (85), objekta tuvums (10 cm).
  3. Atver SPIKE vidē Python programmu un izveido galveno ciklu ar while True:.
  4. Ievieto cikla iekšā if/elif/else lēmumus pēc sensoru rādījumiem:
    while True:
        if distance_sensor.get_distance_cm() < 10:
            motor_pair.stop()
            break
        elif color_sensor.get_reflected_light() < 30:
            motor_pair.move_tank(-20, 20)
        else:
            motor_pair.move_tank(30, 30)
  5. Pārlej programmu robotā un veic vienu testa braucienu.
  6. Maini slieksni un pārlej vēlreiz, ja robots apstājas par tuvu vai par tālu.

Gatavs, kad: trīs braucienos pēc kārtas robots apstājas 10 cm pirms šķēršļa, ±2 cm robežās.

3. uzdevums -

Salien visu vienā misijā un nodemonstrē

Beigās tavs robots bez cilvēka palīdzības atradīs kravu, atvedīs to un noliks starta zonā.

  1. Savieno vienā programmā trīs daļas: braukšanu, sensora lēmumu un satvērēja darbību.
  2. Ieliec programmas pašā sākumā satvērēja atgriešanu sākuma pozīcijā.
  3. Palaid pilnu misiju un vēro, kurā solī robots kļūdās.
  4. Izlabo vienu lietu: ātrumu, leņķi, sliekšņa vērtību vai gaidīšanas laiku.
  5. Palaid misiju vēlreiz un atkārto, līdz tā izdodas divas reizes pēc kārtas.
  6. Nodemonstrē misiju skolotājam un paskaidro, ko dara katrs programmas bloks.

Gatavs, kad: robots divas reizes pēc kārtas izpilda visu misiju un tu vari izskaidrot katru bloku.

Papildu uzdevums - Adaptīva misija

Ja pamatdarbs ir gatavs, liec robotam pašam izvēlēties maršrutu pēc tā, kur atrodas krava.

  1. Pievieno otru maršruta variantu, ko robots izpilda, ja krava nav atrasta pirmajā vietā.
  2. Izveido mainīgo, kas skaita veiksmīgi atvestās kravas.
  3. Pievieno skaņas vai gaismas signālu misijas statusam: starts, krava atrasta, misija pabeigta.

Gatavs, kad: robots atrod kravu abās iespējamās vietās un Hub ekrānā rāda atvesto kravu skaitu.

Biežākās kļūdas (un kā tās labot)

Koda piemērs (sākuma stāvokļa atgriešana - grūtākā daļa)

# SPIKE Word Blocks vizuālā koda tekstuālā reprezentācija
# Grūtākā vieta noslēguma projektā: misija izdodas pirmajā reizē,
# bet otrajā robots sāk ar aizvērtām spīlēm un saskaitītu mainīgo.
# Risinājums - katru palaišanu sākt ar SĀKUMA STĀVOKĻA atgriešanu.

when program starts

# --- 1. Sākuma stāvoklis (bez šīs daļas misija strādā tikai vienreiz) ---
set movement motors to [A] and [B]
set movement speed to [40]%
run motor [C] to position [0] degrees   # spīles atpakaļ vaļā
set [Kravas] to [0]                     # skaitītājs atpakaļ uz nulli

# --- 2. Misija ---
move [forward] for [30] [cm]
wait until [Distance Sensor on F] distance < [10] [cm]
stop moving

start motor [C]                         # satver ar laiku, nevis grādiem
wait [1] seconds
stop motor [C]

move [backward] for [30] [cm]
run motor [C] to position [0] degrees   # atlaiž kravu
change [Kravas] by [1]
Robots izpilda misiju vienādi katrā palaišanas reizē, jo sākumā spīles vienmēr tiek atgrieztas pozīcijā 0 un skaitītājs uz nulli. Bez pirmās daļas otrais brauciens sāksies ar jau aizvērtām spīlēm un robots kravu nesatvers.

Vērtēšanas kritēriji (SLA)

Kritēriji Sācis apgūt (1-3) Turpina apgūt (4-6) Apguvis (7-8) Apguvis padziļināti (9-10)
Programmēšana un Kustība Kods ir nepilnīgs, robots spēj veikt tikai atsevišķas taisnvirziena kustības. Nav izmantoti cikli. Kods ietver ciklus un pamatkustības, taču robota kustība ir neprecīza (neprecīzi leņķi vai attālumi, nesasniedz mērķus). Kods ir strukturēts. Robots precīzi pārvietojas pa laukumu, veic pagriezienus un izpilda kustības uzdevumus bez skolotāja iejaukšanās. Kods ir lieliski optimizēts (nav lieku bloku, izmantoti mainīgie). Kustības ir ļoti precīzas un pielāgotas reālajai laukuma fizikai.
Sensoru un Loģikas izmantošana Sensori ir fiziski pievienoti, bet netiek izmantoti kodā, vai arī to rādījumi netiek ņemti vērā. Sāk izmantot vismaz vienu sensoru (piemēram, apstājas pie šķēršļa), taču algoritms nav stabils un bieži kļūdās. Veiksmīgi un stabili izmanto "If-Else" un gaidīšanas loģiku, liekot lietā vismaz divus sensorus uzdevumu (sekošanas un apstāšanās) veikšanai. Sensori darbojas nevainojami. Algoritms paredz izņēmuma situācijas (piemēram, nepazaudē līniju asos līkumos vai pielāgojas apgaismojumam).
Mehānika un Manipulators Robota bāze ir nestabila, manipulators (3. motors) nav pievienots vai fiziski nedarbojas. Manipulators ir pievienots, taču tas ir mehāniski vājš, iesprūst vai nespēj uzticami pacelt/pārvietot misijas objektu. Robots ir izturīgs. Manipulators stabili satver, notur un atlaiž objektu, pareizi izmantojot motora grādu komandas kodā. Izcils inženiertehniskais risinājums (piemēram, efektīva zobratu pārvadu izmantošana satvērējam). Dizains ir gan funkcionāls, gan izturīgs.
Sadarbība grupā un Process Grupā aktīvi strādā tikai 1 skolēns, pārējie nepiedalās. Vāja laika plānošana. Pienākumi ir daļēji sadalīti, taču komunikācija grupā ir vāja, kas traucē misijas secīgu izpildi. Visi komandas biedri aktīvi iesaistās, spēj vienoties par kopīgiem risinājumiem un efektīvi testē robotu. Grupa strādā pilnīgi patstāvīgi, palīdz citiem klasesbiedriem, lieliski sadala laiku un spēj argumentēti izskaidrot savu koda loģiku.

Pašpārbaudes saraksts