ლაბირინთის რობოტი: როგორ პოულობს რობოტი გასასვლელს
ყველა სტატია

ლაბირინთის რობოტი: როგორ პოულობს რობოტი გასასვლელს

ლაბირინთის რობოტი ნაბიჯ-ნაბიჯ: სენსორები და მათი განლაგება, კედლის მიყოლა, ტრემოს და flood fill ალგორითმები, ზუსტი მოხვევა და GRA-ს სასკოლო შეჯიბრის წესები.

ლაბირინთის რობოტი: რა არის და რა უნდა შეეძლოს

ლაბირინთის რობოტი ავტონომიური რობოტია, რომელიც უცნობ ლაბირინთში სტარტიდან გასასვლელამდე გზას თავად პოულობს, დისტანციური მართვის გარეშე. ლაბირინთი საქართველოს რობოტიკის ასოციაციის (GRA) სასკოლო შეჯიბრების ამოცანაა ჩვენი პირველივე, 2022 წლის შეჯიბრიდან, 2026 წლის სასკოლო რობოტიკის ჩემპიონატზე კი ორი ამოცანიდან ერთ-ერთი იყო (GRA 2022–2026, სასკოლო შეჯიბრი 2026).

ლაბირინთის რობოტმა სამი რამ უნდა შეძლოს: დაინახოს კედლები (მანძილის სენსორებით), გადაწყვიტოს, საით წავიდეს (ლაბირინთის ალგორითმით) და ზუსტად იმოძრაოს (სწორად იაროს და ზუსტად 90°-ით მოუხვიოს). აქ სამივეს განვიხილავთ, GRA-ს წესებთან და ვარჯიშთან ერთად. რობოტიკაში ახალი ხართ? დაიწყეთ სტატიებით ჩემი პირველი რობოტი და Arduino დამწყებთათვის.

სასკოლო შეჯიბრი: ლაბირინთის წესები (GRA, 2026)

GRA-ს 2026 წლის სასკოლო შეჯიბრის წესებში ლაბირინთი II კატეგორიაა (4WD/2WD რობოტებისთვის):

  • დერეფნის სიგანე — 30 სმ; რობოტი სტარტიდან გასასვლელამდე გზას თავად იკვლევს;
  • მაქსიმუმ 3 წუთი — 3 წუთზე მეტს თუ მოანდომებს, რობოტი ავტომატურად წაგებულად ითვლება;
  • იმარჯვებს ყველაზე მცირე დრო, სტარტის ხაზიდან ფინიშის ხაზამდე; გუნდებს ჟიური აფასებს;
  • 2 მცდელობა, ითვლება უკეთესი;
  • start ღილაკი — დაჭერიდან 5 წამში რობოტი უნდა დაიძრას;
  • წონა — 1 კგ-მდე; რობოტი 180 × 280 მმ ყუთში უნდა ეტეოდეს;
  • არენაზე რობოტთან ერთად გუნდის ერთი წევრი გამოდის;
  • დისტანციური მართვა დაუშვებელია; აკრძალულია შოკერი, ელექტრომაგნიტური გამთიშველი და ყველაფერი, რაც სცენას აზიანებს;
  • შეჯიბრის ლაბირინთი წესების სურათს არ ემთხვევა, ამიტომ რობოტმა ნებისმიერი ლაბირინთი უნდა გაიაროს.

2026 წელს ერთ რობოტს ზიგზაგიც და ლაბირინთიც უნდა გაევლო (ანგარიში; ზიგზაგი — ხაზზე მავალი რობოტის წესებში). წესები იცვლება: ყოველი შეჯიბრი მიმდინარე წესებს თავის გვერდზე აქვეყნებს — შეჯიბრები.

რას ნიშნავს ეს. ჩიხში შემობრუნებისას რობოტი წრეს „ხაზავს“, რომლის დიამეტრი მისი დიაგონალის ტოლია (თუ ღერძი შუაშია). 180 × 280 მმ რობოტი (დიაგონალი 333 მმ) 30 სმ დერეფანში ვერ შემობრუნდება, კომპაქტური 150 × 180 მმ რობოტი (≈ 234 მმ) კი თითო მხარეს დაახლოებით 3 სმ-ს იტოვებს.

ლაბირინთის რობოტის სენსორები და მათი განლაგება

რობოტი კედლებს მანძილის სენსორებით „ხედავს“:

  • ულტრაბგერითი სენსორი (ultrasonic, HC-SR04-ის ტიპის) — ექოს დროს ზომავს: მანძილი (სმ) ≈ დრო (μs) / 58. იაფია, მაგრამ სხივი ფართო კონუსია, გაზომვა — ნელი (ათეულობით მილიწამი), დახრილად დანახული გლუვი კედელი კი ექოს გვერდზე ირეკლავს. რამდენიმე სენსორი რიგრიგობით ჩართეთ.
  • ინფრაწითელი მანძილის სენსორი (IR distance sensor, Sharp GP2Y0A-ს ტიპის) — სწრაფი, ანალოგური, არაწრფივი და მინიმალური მანძილით (უფრო ახლოს — „შორს“ ჩანს): კიდიდან რამდენიმე სანტიმეტრით შიგნით დაამაგრეთ.
  • ToF ლაზერული სენსორი (time-of-flight, VL53L0X / VL53L1X-ის ტიპის) — ვიწრო სხივი, ზუსტი და სწრაფი ანათვალი, I2C; ჩართვისას თითოს XSHUT პინით ახალი მისამართი მიანიჭეთ.

განლაგება (ნომრები დიაგრამისაა): 1 — წინა სენსორი: წინა კედელი; 2 — მარცხენა (dL); 3 — ორი მარჯვენა, წინ და უკან (dR): თუ მათი ანათვლები ტოლია, რობოტი კედლის პარალელურია; 4 — 45°-ით დახრილი დიაგონალური სენსორები გვერდით ღიობს ადრე ამჩნევენ — აქ მარჯვენა სხივი ღიობში გადის; 5 — 30 სმ დერეფანი; 6 — შემობრუნების წრე, მარაგით.

ცენტრში დასარჩენად რობოტი ისე მართეთ, რომ e = dL − dR ნულთან ახლოს იყოს. სამი ანათვლის მედიანა შემთხვევით „ნახტომებს“ გაფილტრავს.

კედლის მიყოლა: მარჯვენა (ან მარცხენა) ხელის წესი

ყველაზე მარტივი ლაბირინთის ალგორითმი: მარჯვენა ხელი კედელს მიადეთ და აღარ მოაშოროთ. თუ სტარტიც და გასასვლელიც გარე კედელზეა, აუცილებლად გახვალთ — თუმცა ყოველთვის უმოკლესი გზით არა. ყოველ გზაგასაყარზე რობოტი ამ რიგით ამოწმებს:

  1. მარჯვნივ ღიაა → მოუხვიე მარჯვნივ;
  2. თუ არა, წინ ღიაა → იარე პირდაპირ;
  3. თუ არა, მარცხნივ ღიაა → მოუხვიე მარცხნივ;
  4. თუ არა (ჩიხია) → შემობრუნდი.

მარცხენა ხელის წესი მისი სარკისებური ასლია. დიაგრამაზე: 1 — სტარტი; 2 — გასასვლელი; 3 — ჩიხი; 4 — შემოწმების რიგი. წითელი გზა მარჯვენა კედელს ეკვრის.

მიყოლა შეიძლება უწყვეტად — რობოტი მარჯვენა კედლიდან მუდმივ მანძილს (მაგალითად, 7 სმ; e = 7 − dR) PD მართვით ინარჩუნებს, როგორც ხაზზე მავალი რობოტი, — ან უჯრა-უჯრა: გადის ერთ 30 სმ უჯრას, ჩერდება, ამოწმებს და წყვეტს. ნელია, მაგრამ პირველი რობოტისთვის საუკეთესოა.

სად არ მუშაობს: როცა გასასვლელი შუაშია, ან როცა რობოტი „კუნძულს“ (გარე კედელთან დაუკავშირებელ კედლებს) უვლის გარს, სანამ 3 წუთი არ ამოიწურება. მაშინ მეხსიერება გჭირდებათ (შემდეგი ნაწილი).

რჩევა: პატარა გადამრთველით სტარტამდე მარჯვენა ან მარცხენა ხელი აირჩიეთ. თუ პირველი მცდელობა ნელი გამოვიდა, მეორეში მეორე ხელი სცადეთ — ითვლება უკეთესი შედეგი.

ლაბირინთის ალგორითმები: ტრემო და flood fill

მეხსიერებიანი ალგორითმი ლაბირინთს უჯრების ბადედ წარმოიდგენს (30 სმ დერეფანს 30 სმ უჯრა შეეფერება, თუმცა წესები ბადეს არ გვპირდება) და თითო უჯრის კედლებს იმახსოვრებს.

ტრემოს ალგორითმი (Trémaux) — XIX საუკუნის ხერხი, რომლითაც ნებისმიერი ლაბირინთიდან, მარყუჟებიანიდანაც, გახვალთ. რობოტი გავლილ გზებს მეხსიერებაში „ნიშნავს“:

  1. გზაგასაყარზე არნიშნულ გზას ირჩევს, ასეთი თუ არ არის — ერთხელ ნიშნულს;
  2. თუ ახალმა გზამ უკვე ნანახ გზაგასაყარზე მიიყვანა, უკან ბრუნდება;
  3. ორჯერ ნიშნულ გზაზე აღარასდროს შედის.

„დატბორვის“ ალგორითმი (flood fill) — მიკრომაუსის (micromouse) კლასიკა: ამ შეჯიბრზე პატარა რობოტი 16 × 16 უჯრიანი ლაბირინთის ცენტრამდე სისწრაფეში ეჯიბრება. თითო უჯრაში მიზნამდე მანძილი წერია: მიზანში 0, მის გვერდით 1, შემდეგ 2 — თითქოს მიზნიდან წყალი იღვრება. უცნობი კედლები არარსებულად ითვლება. რობოტი ყოველთვის უფრო მცირე რიცხვიან ღია მეზობელში გადადის და ყოველი ახალი კედლის პოვნისას რიცხვებს თავიდან ითვლის. მიზანთან მას უკვე რუკა აქვს და შემდეგ სვლას უმოკლესი გზით, სწრაფად გაივლის.

დიაგრამაზე: მარცხნივ — რას ვარაუდობს რობოტი სტარტზე, მარჯვნივ — კედლების პოვნის შემდეგ. 1 — მიზანი (0); 2 — რობოტი; 3 — ნაპოვნი კედლები: რიცხვები ახლა მიზნის ერთადერთი შესასვლელისკენ „მიედინება“; 4 — გზა სულ უფრო მცირე რიცხვებზე.

flood fill-მა მიზანი უნდა იცოდეს; სასკოლო ლაბირინთისთვის კარგი კედლის მიყოლა ხშირად საკმარისია.

ზუსტი მოძრაობა: ენკოდერები, გიროსკოპი და ცენტრში სვლა

პატარა შეცდომები გროვდება: თითო მოხვევაზე 5°-იანი შეცდომა — და ათი მოხვევის შემდეგ რობოტი კედელს ეხახუნება.

  • ენკოდერი (encoder) ბორბლის ბრუნს ითვლის: ერთ იმპულსზე გავლილი მანძილი = π·D / N (D — ბორბლის დიამეტრი, N — იმპულსები ერთ ბრუნზე). ადგილზე 90°-ით შემობრუნებისას თითო ბორბალი π·W / 4-ს გადის (W — ბორბლებს შორის მანძილი). W = 12 სმ, D = 6,5 სმ და 20-ჭრილიანი დისკო სულ ≈ 9 იმპულსს იძლევა — დაახლოებით 10° თითოზე, ძალიან უხეშად; ძრავის ღერძზე დამაგრებული მაგნიტური ენკოდერი ბორბლის ერთ ბრუნზე ასობით იმპულსს იძლევა.
  • გიროსკოპი (gyroscope) — IMU ჩიპი (მაგალითად, MPU-6050) ბრუნვის სიჩქარეს ზომავს; დროში აჯამეთ, მიიღებთ მიმართულებას, და მოუხვიეთ, სანამ ის 90°-ით არ შეიცვლება. გიროსკოპი „ცურავს“ (drift): სტარტამდე, უძრავ მდგომარეობაში, რამდენიმე ასეული ანათვლის საშუალო აიღეთ და ეს წანაცვლება გამოაკელით.

მოუხვიეთ გიროსკოპით, უჯრები ენკოდერებით დაითვალეთ, სწორად კედლების მიხედვით იარეთ. მოხვევამდე გაჩერდით და სიჩქარე თანდათან ცვალეთ, რომ ბორბლები არ სრიალებდეს.

ვარჯიში: სავარჯიშო ლაბირინთი და ტესტები

ააწყვეთ სავარჯიშო ლაბირინთი 30 სმ დერეფნებით — ფანერის, MDF-ის ან სქელი მუყაოს პანელებით, რომლებსაც გადაალაგებთ: შეჯიბრის ლაბირინთი თქვენთვის ახალი იქნება. ზემოთ, ფოტოზე — ფანერის ლაბირინთი ჩვენს Robo Festival 2024-ზე. კედლის სიმაღლეს წესები არ აზუსტებს, ამიტომ სენსორები დაბლა დაამაგრეთ.

ტესტები, ამ რიგით:

  1. სწორი დერეფანი — 2 მ ცენტრში, შეხების გარეშე;
  2. ათი მოხვევა ზედიზედ — მიმართულება არ „ცურავს“;
  3. ჩიხი — სუფთა შემობრუნება;
  4. სრული ლაბირინთი წამზომით — 3 წუთზე ბევრად ნაკლები, ყოველ ჯერზე ახალი განლაგებით;
  5. ლაბირინთი „კუნძულით“;
  6. სტარტი ღილაკით (დაძვრა 5 წამში) და ორივე ხელის რეჟიმი.

სცადეთ სხვადასხვა განათება (მზის შუქი IR სენსორებს აბნევს) და ყოველი გავლა ჩაიწერეთ. ივარჯიშეთ, რომ რობოტი ერთმა გაუშვას (არენაზე ერთი წევრი გამოდის); წონა და ზომა წინასწარ შეამოწმეთ. უსაფრთხოება: სარჩილავი სადგამზე, ოთახი განიავებული, LiPo მხოლოდ ბალანსირების დამტენით და არასდროს უყურადღებოდ (დაწვრილებით).

შემდეგი ნაბიჯი

ბლოგი

სხვა სტატიები

ყველა სტატია