Სარჩევი:

ბაღის დამხმარე რუმება ბოტი: 8 ნაბიჯი
ბაღის დამხმარე რუმება ბოტი: 8 ნაბიჯი

ვიდეო: ბაღის დამხმარე რუმება ბოტი: 8 ნაბიჯი

ვიდეო: ბაღის დამხმარე რუმება ბოტი: 8 ნაბიჯი
ვიდეო: Mushroom Foraging In Maine | Local Mushroom Course | Off The Beaten Path Things To Do In Maine! 2024, ნოემბერი
Anonim
ბაღის დამხმარე რუმბა ბოტი
ბაღის დამხმარე რუმბა ბოტი

კიარა მაირსი, აჰმად ალღადირი და მედისონ ტიპეტი

მიზანი:

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

Მახასიათებლები:

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

ნაბიჯი 1: მასალები და მასალები:

  • ერთი ლეპტოპი
  • MATLAB 2017
  • რუმბას მტვერსასრუტი
  • ჟოლო პი
  • Ხის ბლოკები
  • Თეთრი ქაღალდი
  • შავი ქაღალდი
  • ფერადი ლენტი/ფერადი ქაღალდის თხელი ზოლები
  • დიდი როკი

ნაბიჯი 2:

ნაბიჯი 3: შეიკრიბეთ თქვენი "ბაღი"

აწყობა შენი
აწყობა შენი
  1. აიღეთ შავი ქაღალდი და გაჭერით სხვადასხვა ზომის წრეები
  2. მიამაგრეთ ეს შავი წრეები დიდ თეთრ ქაღალდზე

    ეს კონტრასტი აუცილებელი იქნება ხილის გამოვლენისას

  3. გამოიყენეთ თქვენი ხის ბლოკები, რომ შექმნათ ლაბირინთის მსგავსი ბაღის ბილიკი თქვენი რობოტის ნავიგაციისთვის

    ჩვენ ავირჩიეთ U- ფორმის ბილიკი, როგორც ზემოთ მოცემულია სურათზე

  4. თქვენი ბაღის ბოლოს დაამატეთ კლდე ან კარი ან სხვა ობიექტი თქვენს რობოტს, რომ იცოდეს, რომ ეს კეთდება
  5. მიამაგრეთ თქვენი თეთრი ქაღალდი წრეზე ბაღის კედლებზე

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

  6. მიამაგრეთ ფერადი ლენტი/ფერადი ქაღალდის თხელი ზოლი მიწაზე ნაყოფის წინ

ნაბიჯი 4: კოდის წერა

ნავიგაცია ბაღში

Bump სენსორების გამოყენება: პროგრამის გასაშვებად, ჩვენ ვათავსებთ კოდირებას განცხადებაში, რომელიც გადადის სხვადასხვა if განცხადებებში, სანამ კოდი არ გატეხილია. თუ რომელიმე ბამპერს მოხვდა, ეს გამოიწვევს მათ მნიშვნელობას ჭეშმარიტთან (რაც ლოგინში არის მნიშვნელობა 1). If განაცხადი გამოიყენება კოდის შესამცირებლად, როდესაც მათი ერთი მნიშვნელობა უდრის 1 -ს.

Cliff სენსორების გამოყენება: while the statement- ში ჩვენ ვიყენებთ if დებულებას, რომ ვუთხრათ Roomba- ს, როდესაც ის მცენარის ადგილას მივიდა. Roomba ცნობს ფერად ლენტს იატაკზე წითელი ბარიერის შესწავლით, რომელსაც კლდის სენსორები იკავებენ. თუ მარცხენა ან მარჯვენა კლდის სენსორი ამოიცნობს ფერს უფრო დიდი ბარიერით ვიდრე მიწა, მაშინ ის გააჩერებს რობოტს 2 წამით (პაუზის ბრძანების გამოყენებით). ამ 2 წამის განმავლობაში, Roomba მიიღებს და აჩვენებს ნაყოფის გამოსახულებას. ბრძანებით აგებული imfindcircles გამოყენებით, დააყენეთ დიაპაზონი თქვენი წრეების რადიუსებისთვის და თქვენი Roomba იპოვის თქვენს ე.წ.

გამოსახულების დამუშავების გამოყენება: if განცხადებაში ჩვენ ჩავრთავთ სხვა if განცხადებას, რომელიც ამბობს: თუ რადიუსი გამოვლენილია, radii3 აღემატება ან უდრის მწიფე ხილის მინიმალურ მოთხოვნას, r1 (თქვენ გადაწყვიტეთ ეს), შემდეგ დაითვალეთ და აჩვენეთ Roomba რამდენი ხილი მზად არის და მოუხვიეთ და გააგრძელეთ ბაღში. თუ არა, რიგი გააგრძელეთ ბაღში. შენიშვნა: შეიძლება დაგჭირდეთ კუთხის მორგება, რადგან ყველა Roomba განსხვავებულია

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

დანარჩენი კოდი გამოიყენება Roomba– ს მიერ განვლილი გზის დასადგენად და შემდეგ შედეგების გაგზავნა თქვენს ელ.ფოსტაზე

ნაბიჯი 5: დააკოპირეთ კოდი

მიზანი: მათი ზომებიდან გამომდინარე, roomba გაივლის ბაღს და განასხვავებს ბოსტნეულს/ხილს, რომელიც მზად არის ასაღებად. შეყვანა: Lightbump სენსორები, Cliff სენსორები, Bump სენსორები, გამოსახულება კამერიდან შედეგები: როდესაც სინათლის სენსორები ზღურბლზე მეტია, roomba გადატრიალდება და იღებს სურათს, იძახებს თუ ბოსტნეულის/ხილის რადიუსი კონკრეტულ დიაპაზონს შორისაა. კოდი იშლება, როდესაც roomba ეჯახება ობიექტს, აგზავნის ასტრონავტს ელ.წერილს, თუ რამდენი ხილი მზად არის ასაღებად და ოთახის მოძრაობის რუქაზე. გამოყენება: თუ და სანამ განცხადებები, შეთქმულების ბრძანებები, ელ.ფოსტის კოდი MATLAB– დან

k = 0

ტიკ

timerVal = ტიკ

მართალია

v =.2; % სიჩქარე r.setDriveVelocity (v, v);% roomba წავიდეთ წინ L = r.getLightBumpers; LC = L.leftCenter; Rr = L. მარჯვენა; Lf = L. მარცხენა; RC = L.rightCenter; LF = L. მარცხენა წინა; RF = L. მარჯვენა წინა; Q = 75; % ბარიერი. RTH = 30; %მაღალი წითელი ბარიერი RTL = 10; %დაბალი წითელი ბარიერი B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; თუ S.leftFront> PL1 || S.rightFront> PL1 % ამოიცნობს თუ არა ფერი ადგილზე ბარიერის ზემოთ r. შეჩერება პაუზა (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % პაუზა 2 წამი img = r.getImage; %სურათის გადაღება imshow (img)%გამოსახულების ჩვენება [cent3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = ბორბლები (ცენტრები 3, რადიუსი 3); %ეძებს რადიუსების წრეებს/გამოსახულების განსაზღვრულ დიაპაზონში, თუ radii3> = r1 T = 1 k = k+1 dist1 = 0.2.*გასული დრო %თუ აღმოჩენილი რადიუსი აღემატება ან ტოლია მწიფე ხილის მინიმალურ %მოთხოვნას, მაშინ Roomba ითვლის ამ ხილს

თუ T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %თუ ნაყოფი გამოვლინდა, მაშინ აჩვენე ნომერი Roomba- ზე, %ხმაური და ჩართე elseif T == 2 r.turnAngle (78) %თუ გამოვლენილია 2 ხილი, შემდეგ გადაუხვიეთ, რათა გააგრძელოთ %ბაღში სხვა r.turnAngle (78) %თუ ხილი არ არის გამოვლენილი, შემდეგ გადაუხვიეთ %ბაღის ბოლომდე გასაგრძელებლად თუ LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) elseif RF> Q r.stop r turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end %თუ სინათლის ბამპერების რომელიმე მნიშვნელობა გადადის ბარიერის ზემოთ, მაშინ %Roomba ოდნავ მოტრიალდება შესაბამისი მიმართულებით, რათა თავიდან იქნას აცილებული კედელზე დარტყმა

თუ B.right == 1 || B. მარცხენა == 1 || B.front == 1 dist3 = 0.2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %თუ რომელიმე ბუმბულები მოხვდა, შემდეგ roomba უკრავს ხმას, ტრიალებს გარშემო, %და არღვევს კოდს

შესვენების დასასრული

ბოლოს გაფანტვა (0.533, 0, '^') გამართვა გაფანტვაზე (0.533, dist1, '<') გამართვა გაფანტვაზე (-dist2, dist1, 'v') გამართვა scatter (-dist2, 0, 'd') შემნახველი (gcf, 'Movement.png')

kmsg = num2str (k) mail = '[email protected]' პაროლი = 'Srsora123#' host = 'smtp.gmail.com' პორტი = '465'

setpref ('ინტერნეტი', 'E_mail', ფოსტა); setpref ("ინტერნეტი", "SMTP_Server", მასპინძელი) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', ფოსტა); props.setProperty ('mail.smtp.host', მასპინძელი); props.setProperty ('mail.smtp.port', პორტი); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.port', პორტი); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (ფოსტა, 'გამარჯობა ასტრონავტ! ბაღში არის ამდენი ხილი', kmsg, {'Movement.png'})

გირჩევთ: