Სარჩევი:

რობო-ტექნიკოსი: 8 ნაბიჯი
რობო-ტექნიკოსი: 8 ნაბიჯი

ვიდეო: რობო-ტექნიკოსი: 8 ნაბიჯი

ვიდეო: რობო-ტექნიკოსი: 8 ნაბიჯი
ვიდეო: პროფესინალი მკვლელები 2024, ივლისი
Anonim
რობო-ტექნიკოსი
რობო-ტექნიკოსი

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

რობო-ტექნიკოსი სამაშველოში.

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

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

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

ტექნიკა

  • ჟოლო Pi (ჩვენ გამოვიყენეთ ვერსია 3)
  • iRobot
  • რაიმე სახის საყრდენი მოწყობილობა, რათა ჟოლოს პი მიმაგრებულიყო რობო-ტექნიკოსზე
  • Raspberry Pi კამერა (არ აქვს მნიშვნელობა როგორია, რადგან აქვს კარგი ავტოფოკუსი და გამოსახულების გარჩევადობა)
  • რაიმე სახის სტენდი ან საფარი, რომ კამერა იყოს შემობრუნებული რობო-ტექნიკოსზე
  • მასალა, რომელიც გამოიყენება როგორც ზოლები, თეთრი (ან ძალიან ღია ფერის), რომელიც იატაკზე საიმედოდ ეჭირა. ის უნდა იყოს ოდნავ უფრო ფართო ვიდრე სივრცე წინა კლდის ორ სენსორს შორის.
  • 4 ნიშანი ძალიან დიდი ტექსტით (მათზე დაბეჭდილია სიტყვები IMAGE, RIGHT, BACK და LEFT)
  • ფერადი ქაღალდის ფურცლები (მინიმუმ სამი და სასურველია წითელი, მწვანე და ლურჯი)

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

  • Matlab (2018 ა და 2017 ბ ორივე გამოიყენებოდა და როგორც ჩანს, მცირე განსხვავებას ახდენს)
  • Raspberry Pi მხარდაჭერის პაკეტი Matlab– ისთვის
  • Raspberry Pi კოდი Matlab– თან დასაკავშირებლად (ქვემოთ მოყვანილი კოდის ბმული)
  • სურათების დამუშავების ყუთი Matlab– ისთვის (თქვენ თითქმის ვერ გააკეთებთ ამ პროექტს ინსტრუმენტთა ყუთის გარეშე)
  • სურვილისამებრ: Matlab Mobile დაინსტალირებულია თქვენს ტელეფონში, რასაც მოგვიანებით განვმარტავ

ნაბიჯი 1: აპარატურის დაყენება

ef.engr.utk.edu/ef230-2018-08/projects/roo…

ეს არის ძირითადი კოდის ბმული იმის უზრუნველსაყოფად, რომ iRobot®– ს შეუძლია დაუკავშირდეს Matlab– ს, ძირითად სახელმძღვანელოსთან ერთად. როგორც უკვე ვთქვი, მე არ გავაშუქებ ამ კონკრეტულ ნაწილს, რადგან სამეურვეო უკვე კარგად არის ასახული. აღვნიშნავ, რომ მას შემდეგ რაც მიჰყევით ნაბიჯებს ბმულზე, შეგიძლიათ გამოიყენოთ Matlab- ის "doc" ბრძანება, რომ გადახედოთ ჩართულ ინფორმაციას. კერძოდ:

დოქ რუმბა

და კიდევ ერთი ძალიან მნიშვნელოვანი წერტილი.

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

ამის გარეშე, მოდით გადავიდეთ კოდზე.

ნაბიჯი 2: იპოვნეთ ყველა ის სენსორი

ყველა იმ სენსორის პოვნა
ყველა იმ სენსორის პოვნა
ყველა იმ სენსორის პოვნა
ყველა იმ სენსორის პოვნა

ერთი წუთით დაუთმეთ iRobot® შემოწმება. კარგია იცოდეთ სად არის ეს, ასე რომ თქვენ გაქვთ წარმოდგენა რობო-ტექნიკოსის მიერ შეტანილ მონაცემებზე და თქვენ გექნებათ საშუალება გაარკვიოთ რატომ ტრიალებს ნივთი წრეებში იმის ნაცვლად, რომ მიჰყვეთ თქვენს მიერ შექმნილ გზას (ეს შეიძლება ან შეიძლება არ მომხდარიყო). თქვენ აშკარად დაინახავთ ფიზიკურ დარტყმის დიდ სენსორს წინა მხარეს. კლდის სენსორების დანახვა უფრო რთულია, თქვენ უნდა გადაატრიალოთ იგი და მოძებნოთ ოთხი გამჭვირვალე პლასტმასის ფანჯარა წინა კიდესთან ახლოს. სინათლის დარტყმის სენსორები კიდევ უფრო იმალება, მაგრამ ჯერჯერობით საკმარისი იქნება იმის თქმა, რომ ბრწყინვალე შავ ზოლში ცოცხალი მოძრაობს iRobot®– ის წინა მხარეს, რომელიც არის ფიზიკური დარტყმის სენსორული ბარის წინა მხარეს.

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

ნაბიჯი 3: ტესტირება პარამეტრების დასაყენებლად

ტესტირება პარამეტრების დასაყენებლად
ტესტირება პარამეტრების დასაყენებლად

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

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

დარწმუნდით, რომ Raspberry Pi ჩართულია iRobot®– ში და თქვენი კომპიუტერი დაკავშირებულია იმავე ინტერნეტ კავშირთან. თქვენ დახარჯავთ ნაკლებ დროს თმის გაწევაში, რათა გაარკვიოთ რატომ არ აკავშირებს მათლაბი

r = roomba (ნომერი, რომელიც შექმენით)

ცვლადი "r" ამ ვითარებაში არ არის აუცილებელი, შეგიძლიათ დაარქვათ ის, როგორც გსურთ, მაგრამ ეს ცხოვრებას აადვილებს ერთი ასო ცვლადის გამოყენებას.

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

ახლა გაუშვით ტესტის სენსორები ბრძანებით:

r.test სენსორები

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

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

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

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

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

სია = {"წითელი", "ლურჯი", "მწვანე"}

problist = {'შემთხვევითობა, სურათის შენახვა', 'კომპონენტი ადგილზე, სურათის შენახვა', 'მოსალოდნელი, გაგრძელება'} pathcolor = listdlg ('PromptString', 'Select a Path Color',… 'SelectionMode', 'single', 'ListString', list) prob = 0; driv = ;

"Prob" და "driv" ცვლადები აქ უნდა გამოცხადდეს, რადგან ისინი გამოყენებული იქნება ფუნქციის მთავარი მარყუჟის შიგნით, მაგრამ ისევ, თუ გსურთ რომელიმე ამ ცვლადის სახელის გადარქმევა ან სიის შერჩევის შეცვლა, კარგია მანამ თქვენ თანმიმდევრული ხართ დანარჩენ კოდში.

ნაბიჯი 5: მიუხედავად იმისა, რომ მარყუჟი: ფიზიკური დარტყმის სენსორები

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

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

ხოლო ჭეშმარიტი %მთავარი, ხოლო მარყუჟი %მიიღებს ბამპერის ინფორმაციას S = r.getBumpers თუ S. მარცხენა ~ = 0 რ. გაჩერება სხვაგან S. მარჯვენა ~ = 0 რ. გაჩერება სხვაგან S.front ~ = 0 რ. გაჩერების დასასრული

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

S. PromptString ',' მოიძებნა მოულოდნელი დაბრკოლება, გთხოვთ დაადგინოთ '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) პაუზა (0.5) img = r getImage image (img) prob = listdlg ('PromptString', 'იპოვეს მოულოდნელი დაბრკოლება, გთხოვთ დაადგინოთ'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~ = 0 r.moveDistance (- 0.1) პაუზა (0.5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Found Un მოულოდნელი დაბრკოლება, გთხოვთ იდენტიფიცირება'…, 'SelectionMode', 'single', 'ListString', problist) დასასრული

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

ახლა ჩავსვი კოდის განყოფილება მუწუკის სენსორის ნაწილსა და ფოტოს გადარჩენის ნაწილს შორის. ეს იღებს სინათლის ბამპერის მნიშვნელობებს და ადგენს დისკის სიჩქარეს 0.025 მეტრზე/წამში (ძალიან ნელი), რაც რეალურად არ არის აუცილებელი, მაგრამ ის ამცირებს რობო-ტექნიკოსს, რომელიც იჭერს ნივთებს და საბოლოოდ აცდება ფიზიკურ დარტყმის სენსორებს.

L = r.getLightBumpers თუ L. მარცხენა> 100 || L. მარცხენა წინა> 100 || L.rightFront> 100 || L.right> 100 driv = 0.025 r.setDriveVelocity (0.025) else driv = 0.1 end

ეს იქნება ნაწილი, სადაც ფასეულობები, რომლებიც თქვენ ადრე დააკვირდით (და იმედია ჩამოწერეთ), ამოქმედდება

"L. (სენსორის მხარე და მიმართულება)> 100" ემყარება ჩემს მიერ დაკვირვებულ მნიშვნელობებს, ასე რომ, თუ თქვენი დაკვირვებები განსხვავებულია, შეცვალეთ ეს რიცხვები. იდეა იმაში მდგომარეობს, რომ თუ რობო-ტექნიკოსი იგრძნობს მის წინ რამდენიმე სანტიმეტრს, ის შენელდება, რაც ზედმეტია.

შემდეგი ნაწილი არის ადგილი, სადაც ფოტოები ინახება მოგვიანებით.

%თუ პირველი ან მეორე ვარიანტი შეირჩა prob დიალოგში, ინახავს სურათს, თუ prob == 1 %თუ მარყუჟი აშენებს ფაილის ინფორმაციას ფოტოზე, წერს დროის ნიშნულით t = საათი; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); საქაღალდე = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = სრული ფაილი (საქაღალდე, ძირითადი სახელი); imwrite (img, fullFileName) დახურვა ფიგურა 1 პაუზა (2) elseif prob == 2 t = საათი; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); საქაღალდე = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = სრული ფაილი (საქაღალდე, ძირითადი სახელი); imwrite (img, fullFileName) დახურვა ფიგურა 1 პაუზა (2) დასასრული

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

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

ნაბიჯი 6: დაიცავით გზა

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

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

გარკვევა img გასუფთავება t გასუფთავება სახელის გასუფთავება სრული fullFileName წმინდა საქაღალდე

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

C = r.getCliff სენსორები %თუ მარყუჟი მიჰყვება ფერის ზოლს (თეთრი) თუ C.leftFront> 2000 && C.rightFront> 2000 %სწორი ბილიკი r.setDriveVelocity (driv) elseif C.leftFront 2000 %იქცევა მარჯვნივ, თუ რობოტი ძალიან შორს მიდის მარცხენა r.turnAngle (-2.5) elseif C.leftFront> 2000 && C.rightFront <2000%უხვევს მარცხნივ, თუ რობოტი ძალიან შორს მიდის მარჯვნივ r.turnAngle (2.5) elseif C.leftFront <2000 && C.rightFront 100 || L. მარცხენა წინა> 100 || L.rightFront> 100 || L.right> 100 img = r.get სურათის ბოლო %ამოწმებს, არის თუ არა მოსახვევი გზაზე, თუ C. მარცხნივ> 2800 && C. <2800 r. TurnAngle (2.5) elseif C.left 2800 r.turnAngle (- 2.5) ბოლოს %ადგილის დამჭერი ბილიკის გამოსახულების ამოცნობისთვის ('GETTING IMAGE') დასასრული ბოლომდე

გაითვალისწინეთ, რომ ცვლადების სახელები, რომლებიც მე ავირჩიე, არჩევითია, მაგრამ ისევ ვფიქრობ, რომ ეს გაადვილებს ცხოვრებას, როდესაც შესაძლებელია, ერთი ასო ცვლადების გამოყენება

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

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

%ადგილის დამჭერი სურათის ამოცნობისთვის disp ("სურათის მიღება")

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

ნაბიჯი 7: სურათის დამუშავება

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

img = r.getImage img = imcrop (img, [0 30 512 354]) imgb = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) წითელი = საშუალო (საშუალო (imgb (:,:, 1))); g = საშუალო (საშუალო (imgb (:,,, 2))); b = საშუალო (საშუალო (imgb (:,,, 3)));

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

თუ წითელი> g && red> b თუ pathcolor == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img) თუ R. სიტყვები {1} == სურათი || R. სიტყვები {2} == სურათი || R. სიტყვები {3} == IMAGE t = საათი; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); საქაღალდე = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = სრული ფაილი (საქაღალდე, ძირითადი სახელი); imwrite (img, fullFileName) პაუზა (2) elseif R. Words {1} == RIGHT || R. სიტყვები {2} == სწორი || R. Words {3} == RIGHT r.turnAngle (-75) elseif R. Words {1} == LEFT || R. სიტყვები {2} == მარცხენა || R. Words {3} == LEFT r.turnAngle (75) elseif R. Words {1} == BACK || R. სიტყვები {2} == BACK || R. Words {3} == BACK r.turnAngle (110) ბოლოს სხვა r.turnAngle (110) დასასრული

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

მე კოდის მხოლოდ ერთი განყოფილება მივაწოდე სხვადასხვა ფერისთვის

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

ნაბიჯი 8: მზა პროდუქტი

მზა პროდუქტი
მზა პროდუქტი

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

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

ვიმედოვნებთ, რომ თქვენ მოგეწონათ მცირე დამხმარეების შექმნა მარსის მისიისთვის და გაერთეთ მშენებლობით.

გირჩევთ: