Სარჩევი:

AI LEGO EV3 ლაბირინთში მყოფი რობოტი: 13 ნაბიჯი
AI LEGO EV3 ლაბირინთში მყოფი რობოტი: 13 ნაბიჯი

ვიდეო: AI LEGO EV3 ლაბირინთში მყოფი რობოტი: 13 ნაბიჯი

ვიდეო: AI LEGO EV3 ლაბირინთში მყოფი რობოტი: 13 ნაბიჯი
ვიდეო: Labyrinthe - Université Paris Diderot 2024, ივლისი
Anonim
Image
Image
როგორ წყდება ლაბირინთიდან
როგორ წყდება ლაბირინთიდან

ეს არის მარტივი, ავტონომიური რობოტი, რომელსაც აქვს გარკვეული ხელოვნური ინტელექტი. ის შექმნილია ლაბირინთის შესასწავლად და შესასვლელთან დაბრუნების მიზნით, გასასვლელად გასასვლელად და ჩიხების თავიდან ასაცილებლად. ეს ბევრად უფრო რთულია, ვიდრე ჩემი წინა პროექტი, რომელმაც უბრალოდ ლაბირინთიდან გაიარა. აქ რობოტმა უნდა გაიხსენოს თავისი გავლილი გზა, ამოიღოს ჩიხები, შეინახოს ახალი გზა და შემდეგ მიჰყვეს ახალ გზას.

ჩემი წინა რობოტი აღწერილია აქ:

რობოტი შექმნილია LEGO Mindstorms EV3 გამოყენებით. EV3 პროგრამული უზრუნველყოფა მუშაობს კომპიუტერზე და ქმნის პროგრამას, რომელიც შემდეგ გადმოწერილია მიკროკონტროლერში, სახელწოდებით EV3 Brick. პროგრამირების მეთოდი არის ხატზე დაფუძნებული და მაღალი დონის. ეს არის ძალიან მარტივი და მრავალმხრივი.

მარაგები

ნაწილები

  1. LEGO Mindstorms EV3 კომპლექტი
  2. LEGO Mindstorms EV3 ულტრაბგერითი სენსორი. ის არ შედის EV3 ნაკრებში.
  3. გოფრირებული მუყაო ლაბირინთისთვის. ორი მუყაო საკმარისი უნდა იყოს.
  4. პატარა ნაჭერი თხელი მუყაო, რომელიც ხელს შეუწყობს ზოგიერთი კუთხისა და კედლის სტაბილიზაციას.
  5. წებო და ლენტი მუყაოს ნაჭრების ერთმანეთთან დასაკავშირებლად.
  6. წითელი მისალოცი ბარათის კონვერტი ლაბირინთიდან გასასვლელის დასადგენად.

ინსტრუმენტები

  1. სასარგებლო დანა მუყაოს მოსაჭრელად.
  2. ფოლადის მმართველი ჭრის პროცესში დასახმარებლად.

პროგრამული უზრუნველყოფა

პროგრამა აქ არის:

ნაბიჯი 1: როგორ წყდება ლაბირინთიდან

სატრანსპორტო საშუალების მართვის მეთოდი

ლაბირინთში ნავიგაციის რამდენიმე მეთოდი არსებობს. თუ თქვენ დაინტერესებული ხართ მათი შესწავლით, ისინი ძალიან კარგად არის აღწერილი ვიკიპედიის შემდეგ სტატიაში:

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

  1. თუ შესაძლებელია მარცხნივ მოხვევა, ასე მოიქეცი.
  2. წინააღმდეგ შემთხვევაში, თუ შესაძლებელია, პირდაპირ წადი.
  3. თუ ის ვერ მიდის მარცხნივ ან პირდაპირ, მოუხვიეთ მარჯვნივ, თუ ეს შესაძლებელია.
  4. თუ ზემოთ ჩამოთვლილთაგან არცერთი არ არის შესაძლებელი, ეს უნდა იყოს ჩიხი. Შემობრუნდი.

ერთი სიფრთხილე არის ის, რომ მეთოდი შეიძლება ჩაიშალოს, თუ ლაბირინთში არის მარყუჟი. მარყუჟის ადგილმდებარეობიდან გამომდინარე, რობოტს შეუძლია გააგრძელოს მარყუჟის გარშემო და მის გარშემო. ამ პრობლემის შესაძლო გადაწყვეტა იქნება რობოტი გადავიდეს მარჯვენა კედლის მიმდევრის წესზე, თუ მიხვდება, რომ ის მარყუჟში მიდის. მე არ ჩავრთე ეს დახვეწა ჩემს პროექტში.

გადაჭრა ლაბირინთიდან პირდაპირი გზის საპოვნელად

ლაბირინთის გავლისას რობოტმა უნდა დაიმახსოვროს ის გზა, რომელსაც ის გადის და აღმოფხვრას ჩიხები. ის ამას ახერხებს თითოეული შემობრუნების და კვეთა მასივში შესანახად, შემობრუნებისა და კვეთაზე კონკრეტული კომბინაციების შემოწმებისას და შეცვლის კომბინაციებს, რომლებიც მოიცავს ჩიხს. მოსახვევებისა და კვეთათა საბოლოო ჩამონათვალი არის პირდაპირი გზა ლაბირინთში.

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

კომბინაციები იცვლება შემდეგნაირად:

  • "მარცხნივ, უკან, მარცხნივ" ხდება "სწორი".
  • "მარცხნივ, უკან, მარჯვნივ" ხდება "უკან".
  • "მარცხნივ, უკან, პირდაპირ" ხდება "მარჯვენა".
  • "მარჯვნივ, უკან, მარცხნივ" ხდება "უკან".
  • "პირდაპირ, უკან, მარცხნივ" ხდება "მარჯვენა".
  • "პირდაპირ, უკან, პირდაპირ" ხდება "უკან".

როგორ უმკლავდება რობოტი ჩემს ლაბირინთს

  1. როდესაც რობოტი იწყებს მართვას ის ხედავს სივრცეს მარჯვნივ და ინახავს Straight მასივის სიაში.
  2. შემდეგ ის იქცევა მარცხნივ და ამატებს სიას მარცხნივ. სია ახლა შეიცავს: Straight, Left.
  3. ჩიხიდან, ის ბრუნდება და ამატებს უკან სიას. სია ახლა შეიცავს: პირდაპირ, მარცხნივ, უკან.
  4. გასასვლელი ბილიკიდან, რომელიც გამოიყენებოდა შესასვლელიდან, ის პირდაპირ ამატებს სიას. სია ახლა შეიცავს: Straight, Left, Back, Straight. ის ცნობს კომბინაციას და ცვლის მარცხნივ, უკან, პირდაპირ მარჯვნივ. სია ახლა შეიცავს Straight, Right.
  5. ჩიხი, ის ბრუნდება და დასძენს უკან სიაში. სია ახლა შეიცავს: პირდაპირ, მარჯვნივ, უკან.
  6. მარცხენა მოსახვევის შემდეგ სია შეიცავს პირდაპირ, მარჯვნივ, უკან, მარცხნივ. ის ცნობს კომბინაციას და ცვლის მარჯვნივ, უკან, მარცხნიდან უკან. სია ახლა შეიცავს Straight, Back.
  7. შემდეგ მარცხენა მოსახვევის შემდეგ სია შეიცავს Straight, Back, Left. ის ცვლის ამ კომბინაციას მარჯვნივ. სია არის მხოლოდ მარჯვენა.
  8. ის გადის სივრცეს და პირდაპირ ამატებს სიას. სია ახლა შეიცავს Right, Straight.
  9. მარჯვენა მოსახვევის შემდეგ სია შეიცავს მარჯვნივ, პირდაპირ, მარჯვნივ, რომელიც არის პირდაპირი გზა.

ნაბიჯი 2: მოსაზრებები რობოტის პროგრამირებისას

განხილვა ნებისმიერი მიკროკონტროლისთვის

როდესაც რობოტი გადაწყვეტს შემობრუნებას, მან უნდა გააკეთოს ფართო ბრუნვა, ან წინ წავიდეს მცირე მანძილით შემობრუნებამდე და შემობრუნების შემდეგ კვლავ წინ წავიდეს მოკლე მანძილი სენსორის შემოწმების გარეშე. პირველი მცირე მანძილის მიზეზი ის არის, რომ რობოტი არ უნდა ხვდებოდეს კედელში შემობრუნების შემდეგ, ხოლო მეორე მცირე მანძილის მიზეზი ის არის, რომ რობოტის შემობრუნების შემდეგ, სენსორი დაინახავს დიდ სივრცეს და რობოტი იფიქრებდა, რომ ის კვლავ უნდა შემობრუნებულიყო, რაც არ არის სათანადო საქმე.

როდესაც რობოტი გრძნობს კვეთას მარჯვნივ, მაგრამ ეს არ არის სწორი შემობრუნება, მე აღმოვაჩინე, რომ კარგია რობოტი მიიყვანოს წინ 25 სანტიმეტრით წინ მისი სენსორების შემოწმების გარეშე.

LEGO MINDSTORMS EV3– ის სპეციფიკური განხილვები

მიუხედავად იმისა, რომ LEGO Mindstorms EV3 ძალიან მრავალმხრივია, ის იძლევა არაუმეტეს ერთ ტიპს თითოეულ სენსორზე, რომელიც დაკავშირებულია ერთ აგურთან. ორი ან მეტი აგური შეიძლება მიჯაჭვული იყოს ჯაჭვით, მაგრამ მე არ მინდოდა სხვა აგურის ყიდვა და ამიტომ გამოვიყენე შემდეგი სენსორები (სამი ულტრაბგერითი სენსორის ნაცვლად): ინფრაწითელი სენსორი, ფერის სენსორი და ულტრაბგერითი სენსორი. ეს კარგად გამოვიდა.

მაგრამ ფერის სენსორს აქვს ძალიან მცირე დიაპაზონი, დაახლოებით 2 ინჩი (5 სმ), რაც იწვევს რამდენიმე განსაკუთრებულ მოსაზრებას, როგორც ეს აღწერილია ქვემოთ:

  1. როდესაც ფერის სენსორი ამოიცნობს კედელს წინ და რობოტი გადაწყვეტს მარჯვნივ მოტრიალებას ან შემობრუნებას, ის ჯერ უკან უნდა იდგეს უკან, რათა მიანიჭოს საკმარისი სივრცე იმისათვის, რომ გადაუხვიოს კედელზე დარტყმის გარეშე.
  2. რთული საკითხი ჩნდება ზოგიერთ "პირდაპირ" კვეთაზე. ფერადი სენსორის მოკლე დიაპაზონის გამო, რობოტს არ შეუძლია განსაზღვროს გრძნობს ის სწორად "პირდაპირ" კვეთაზე თუ მარჯვნივ შემობრუნებამდე. მე შევეცადე ამ საკითხის მოგვარება პროგრამის დაყენებით, რომლითაც რობოტი შეინახავს სიაში "პირდაპირ", როდესაც რობოტი გრძნობს ერთს და შემდეგ აღმოფხვრის ერთზე მეტ "პირდაპირ" სიაში. ეს აფიქსირებს სიტუაციას, როდესაც მარჯვნივ მოქცევა მიჰყვება "პირდაპირ" ლაბირინთში, მაგრამ არა იმ სიტუაციას, როდესაც არის სწორი შემობრუნება "სწორი" გარეშე. მე ასევე შევეცადე პროგრამის დაყენება, რათა აღმოეფხვრა "სწორი", თუ ის იყო "მარჯვნივ" ადრე, მაგრამ ეს არ გამოდგება, თუ მარჯვენა შემობრუნება მიჰყვება "პირდაპირ". მე ვერ ვიპოვე გამოსავალი, რომელიც შეესაბამება ყველა შემთხვევას, მაგრამ მე ვფიქრობ, რომ შესაძლებელი იქნებოდა რობოტს დაენახა გავლილი მანძილი (საავტომობილო ბრუნვის სენსორების კითხვით) და გადაწყვიტოს ეს არის "სწორი" თუ უფლება მობრუნება. არ მეგონა, რომ ეს გართულება ღირდა ამ პროექტში AI კონცეფციის დემონსტრირების მიზნით.
  3. ფერადი სენსორის უპირატესობა ის არის, რომ ის განასხვავებს კედლის ყავისფერს და ბარიერის წითელს, რომელიც მე გამოვიყენე გასასვლელში და უზრუნველყოფს რობოტს მარტივ გადაწყვეტილებას, როდის დაასრულა ლაბირინთი.

ნაბიჯი 3: მთავარი პროგრამა

მთავარი პროგრამა
მთავარი პროგრამა

LEGO Mindstorms EV3– ს აქვს ძალიან მოსახერხებელი პროგრამირების ხატი. ბლოკები ნაჩვენებია კომპიუტერის ეკრანის ბოლოში და შეიძლება გადაიტანოთ და ჩამოაგდოთ პროგრამირების ფანჯარაში პროგრამის შესაქმნელად. EV3 Brick შეიძლება კომპიუტერთან იყოს დაკავშირებული USB კაბელით, Wi-Fi- ით ან Bluetooth- ით, ხოლო პროგრამა შეიძლება გადმოწერილი იყოს კომპიუტერიდან Brick- ში.

პროგრამა შედგება ძირითადი პროგრამისა და რამდენიმე "ჩემი ბლოკისგან", რომლებიც ქვეგეგმებია. ატვირთული ფაილი შეიცავს მთელ პროგრამას, რომელიც აქ არის:

ძირითადი პროგრამის ნაბიჯები შემდეგია:

  1. შემობრუნების დათვლის ცვლადი და მასივის განსაზღვრა და ინიციალიზაცია.
  2. დაელოდეთ 5 წამს და თქვით "წადი".
  3. დაიწყეთ მარყუჟი.
  4. იმოძრავეთ ლაბირინთში. როდესაც გასასვლელი მიღწეულია, მარყუჟი გადის.
  5. აგურის ეკრანზე ჩვენება, ლაბირინთში აქამდე ნაპოვნი კვეთა.
  6. შეამოწმეთ უნდა შემცირდეს თუ არა გზა.
  7. აჩვენეთ კვეთა შემოკლებული ბილიკით.
  8. დააბრუნეთ ნაბიჯი 4.
  9. მარყუჟის შემდეგ, მართეთ პირდაპირი გზა.

ეკრანის კადრი აჩვენებს ამ მთავარ პროგრამას.

ნაბიჯი 4: ჩემი ბლოკები (ქვეპროგრამები)

ჩემი ბლოკები (ქვეპროგრამები)
ჩემი ბლოკები (ქვეპროგრამები)

ნაჩვენებია ნავიგაცია ჩემს ბლოკში, რომელიც აკონტროლებს როგორ მოძრაობს რობოტი ლაბირინთში. ნაბეჭდი ძალიან მცირეა და შეიძლება არ იკითხებოდეს. მაგრამ ეს კარგი მაგალითია იმისა, თუ რამდენად მრავალმხრივი და მძლავრია if- განცხადებები (რომელსაც უწოდებენ გადამრთველებს LEGO EV3 სისტემაში).

  1. ისარი #1 მიუთითებს გადამრთველზე, რომელიც ამოწმებს, ხედავს თუ არა ინფრაწითელი სენსორი ობიექტს უფრო კონკრეტულ მანძილზე. თუ ასეა, ბლოკების ზედა სერია შესრულებულია. თუ არა, მაშინ კონტროლი გადადის ბლოკების დიდ, ქვედა სერიაზე, სადაც ისარი #2 მდებარეობს.
  2. ისარი #2 მიუთითებს გადამრთველზე, რომელიც ამოწმებს რა ფერს ხედავს ფერის სენსორი. არის 3 შემთხვევა: ზედა ფერი არ არის, შუაში წითელი და ყავისფერი ბოლოში.
  3. ორი ისარი #3 მიუთითებს კონცენტრატორებზე, რომლებიც ამოწმებენ, ხედავს თუ არა ულტრაბგერითი სენსორი ობიექტს უფრო კონკრეტულ მანძილზე. თუ ასეა, ბლოკების ზედა სერია შესრულებულია. თუ არა, მაშინ კონტროლი გადადის ბლოკების ქვედა სერიაზე.

ჩემი ბლოკები გზის შესამცირებლად და პირდაპირი ბილიკის გასავლელად უფრო რთულია და სრულიად გაუგებარი იქნება და ამიტომ ისინი არ შედის ამ დოკუმენტში.

ნაბიჯი 5: რობოტის მშენებლობის დაწყება: ბაზა

იწყება რობოტის მშენებლობა: ბაზა
იწყება რობოტის მშენებლობა: ბაზა
იწყება რობოტის მშენებლობა: ბაზა
იწყება რობოტის მშენებლობა: ბაზა

როგორც უკვე აღვნიშნეთ, LEGO Mindstorms EV3 საშუალებას იძლევა არა უმეტეს ერთი ტიპის სენსორისა, რომელიც დაკავშირებულია ერთ აგურთან. მე გამოვიყენე შემდეგი სენსორები (სამი ულტრაბგერითი სენსორის ნაცვლად): ინფრაწითელი სენსორი, ფერის სენსორი და ულტრაბგერითი სენსორი.

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

პირველი ნაბიჯი არის რობოტის ბაზის შექმნა ნაჩვენები ნაწილების გამოყენებით. რობოტის ბაზა თავდაყირაა ნაჩვენები. რობოტის უკანა ნაწილში პატარა L- ფორმის ნაწილი არის ზურგის საყრდენი. ის სრიალებს რობოტის მოძრაობისას. ეს კარგად მუშაობს. EV3 ნაკრები არ აქვს მოძრავი ბურთის ტიპის ნაწილი.

ნაბიჯი 6: ბაზის თავზე, 1

ბაზის თავზე, 1
ბაზის თავზე, 1
ბაზის თავზე, 1
ბაზის თავზე, 1

ეს ნაბიჯი და შემდეგი 2 ნაბიჯი არის რობოტის ფუძის ზედა ნაწილზე, ფერის სენსორზე და კაბელებზე, რომლებიც 10 ინჩიანი (26 სმ) კაბელია.

ნაბიჯი 7: ბაზის თავზე, 2

ბაზის თავზე, 2
ბაზის თავზე, 2
ბაზის თავზე, 2
ბაზის თავზე, 2

ნაბიჯი 8: ბაზის თავზე, 3

ბაზის თავზე, 3
ბაზის თავზე, 3
ბაზის თავზე, 3
ბაზის თავზე, 3

ნაბიჯი 9: ინფრაწითელი და ულტრაბგერითი სენსორები

ინფრაწითელი და ულტრაბგერითი სენსორები
ინფრაწითელი და ულტრაბგერითი სენსორები
ინფრაწითელი და ულტრაბგერითი სენსორები
ინფრაწითელი და ულტრაბგერითი სენსორები

შემდეგი, არის ინფრაწითელი სენსორი (რობოტის მარცხენა მხარეს) და ულტრაბგერითი სენსორი (მარჯვნივ). ასევე, 4 ქინძისთავი აგურის თავზე დასამაგრებლად.

ინფრაწითელი და ულტრაბგერითი სენსორები განლაგებულია ვერტიკალურად ჩვეულებრივი ჰორიზონტალური ნაცვლად. ეს უზრუნველყოფს კედლების კუთხეების ან ბოლოების უკეთეს იდენტიფიკაციას.

ნაბიჯი 10: კაბელები

კაბელები
კაბელები

კაბელები აგურს უკავშირდება შემდეგნაირად:

  • პორტი B: მარცხენა დიდი ძრავა.
  • პორტი C: მარჯვენა დიდი ძრავა.
  • პორტი 2: ულტრაბგერითი სენსორი.
  • პორტი 3: ფერის სენსორი.
  • პორტი 4: ინფრაწითელი სენსორი.

ნაბიჯი 11: ბოლო ნაბიჯი რობოტის მშენებლობაში: დეკორაცია

ბოლო ნაბიჯი რობოტის მშენებლობაში: დეკორაცია
ბოლო ნაბიჯი რობოტის მშენებლობაში: დეკორაცია
რობოტის მშენებლობის ბოლო ნაბიჯი: დეკორაცია
რობოტის მშენებლობის ბოლო ნაბიჯი: დეკორაცია

ფრთები და ფარფლები მხოლოდ დეკორაციისთვისაა.

ნაბიჯი 12: ააშენეთ ლაბირინთი

ააშენეთ ლაბირინთი
ააშენეთ ლაბირინთი
ააშენეთ ლაბირინთი
ააშენეთ ლაბირინთი

ლაბირინთისთვის საკმარისი უნდა იყოს ორი გოფრირებული მუყაოს მუყაო. მე გავაკეთე ლაბირინთის კედლები 5 ინჩის (12.5 სმ) სიმაღლეზე, მაგრამ 4 ინჩი (10 სმ) უნდა მუშაობდეს ისევე კარგად, თუ გოფრირებული მუყაო აკლია.

პირველ რიგში, მუყაოს კედლებს ვჭრი, ქვედადან 10 ინჩი (25 სმ). შემდეგ კედლების ირგვლივ დავჭრა ბოლოდან 5 სანტიმეტრით. ეს უზრუნველყოფს რამდენიმე 5 დიუმიან კედელს. ასევე, მუყაოს ქვედა ნაწილებს ვჭრი და კედლებზე სტაბილურობისთვის დავტოვე დაახლოებით 1 ინჩი (2.5 სმ).

სხვადასხვა ნაჭრების დაჭრა და წებოვანა შესაძლებელია იქ, სადაც საჭიროა ლაბირინთის შესაქმნელად. გვერდითა კედლებს შორის უნდა იყოს 11 ან 12 ინჩიანი (30 სმ) მანძილი ჩიხიანი ბილიკით. სიგრძე უნდა იყოს არანაკლებ 10 ინჩი (25 სმ). ეს მანძილები საჭიროა რობოტის შემობრუნებისთვის.

ლაბირინთის ზოგიერთი კუთხე შეიძლება გაძლიერდეს, ასევე, ზოგიერთი სწორი კედელი უნდა იყოს დაცული მოსახვევისგან, თუ მათ აქვთ გასწორებული მუყაოს კუთხე. თხელი მუყაოს მცირე ნაჭრები იმ ადგილას უნდა იყოს წებოვანი, როგორც ეს ნაჩვენებია.

გასასვლელს აქვს წითელი ბარიერი, რომელიც შედგება წითელი მისალოცი ბარათის კონვერტისა და 2 ნაჭერი თხელი მუყაოსგან, როგორც ნაჩვენებია.

ნაბიჯი 13: ლაბირინთი

Ლაბირინთი
Ლაბირინთი

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

ამ საკითხის გადასაჭრელად არის გზის გასწორების რუტინის ჩართვა, რომელიც რობოტს შეინარჩუნებს კონკრეტულ დისტანციას მარცხენა კედლიდან. მე ეს არ ჩავრთე. პროგრამა საკმაოდ გართულებულია და საკმარისია ამ პროექტში AI კონცეფციის დემონსტრირებისთვის.

დასკვნითი შენიშვნა

ეს იყო სახალისო პროექტი და დიდი გამოცდილება. ვიმედოვნებ თქვენც დაგაინტერესებთ.

გირჩევთ: