Სარჩევი:

Mars Roomba Project UTK: 4 ნაბიჯი
Mars Roomba Project UTK: 4 ნაბიჯი

ვიდეო: Mars Roomba Project UTK: 4 ნაბიჯი

ვიდეო: Mars Roomba Project UTK: 4 ნაბიჯი
ვიდეო: AMA record with community manager Oleg. PARALLEL FINANCE 2024, ნოემბერი
Anonim
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

უარი პასუხისმგებლობაზე: ეს მხოლოდ იმუშავებს, თუ ოთახი დაყენებულია

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

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

საჭირო მასალები:

· რუმება

· MATLAB

· ჟოლო Pi და Pi კამერა

ნაბიჯი 1: ბიბლიოთეკების მოპოვება

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

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

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

ნაბიჯი 3: კოდი

დააკოპირეთ და ჩასვით MATLAB ფაილში, რომელიც მდებარეობს იმავე საქაღალდეში, როგორც ბიბლიოთეკები

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

ხოლო true % Infinte while loop კოდის გასაგრძელებლად

dontFall = cliffCheck (r) % ანიჭებს ცვლადს 'dontFall' ფუნქციას 'cliffCheck'

if dontFall % if განაცხადი გააგრძელოს კოდში 'cliffCheck' დასრულების შემდეგ

r.setDriveVelocity (0.1, 0.1) % ინარჩუნებს Roomba- ს მოძრაობას "cliffCheck" დასრულების შემდეგ

end % მთავრდება "dontFall" if statement

ბამპერი = bumpcheck (r) % მიანიჭებს ცვლადს "ბამპერს" ფუნქციას "bumpcheck"

თუ ბამპერი % if განცხადებას გააგრძელებს კოდი 'bumpcheck' დასრულების შემდეგ

r.setDriveVelocity (0.1, 0.1) % ინარჩუნებს Roomba- ს მოძრაობას "bumpcheck" - ის დასრულების შემდეგ

end % მთავრდება "bumper" if statement

liquids = LiquidCheck (r) % მიანიჭებს ცვლადი 'სითხეებს' ფუნქციას 'LiquidCheck'

თუ თხევადი % if განაცხადი უნდა გაგრძელდეს კოდში "LiquidCheck" დასრულების შემდეგ

r.setDriveVelocity (0.1, 0.1) % ინარჩუნებს Roomba– ს მოძრაობას „LiquidCheck“- ის დასრულების შემდეგ

end % ამთავრებს "სითხეებს" თუ განცხადება

lightbumper = lightcheck (r) % ანიჭებს ცვლადს "lightbumper" ფუნქციას "lightcheck"

პაუზა (0.1) % მოკლე პაუზა მარყუჟის უწყვეტი გამეორების თავიდან ასაცილებლად

ბოლოს % მთავრდება უსასრულოდ, ხოლო მარყუჟი

end % მთავრდება ფუნქცია

ფუნქცია ბამპერი = bumpcheck (r) % ქმნის 'bumpcheck' ფუნქციას

bumpdata = r.getBumpers % მიანიჭებს ყველა მონაცემს ბამპერიდან ცვლადი 'bumpdata'

ბამპერი = bumpdata.right || bumpdata.left || bumpdata.front ქმნის შენახულ ცვლადს, "ბამპერს", სხვადასხვა ბამპერებისთვის

თუ bumpdata.right> 0 % თუ განცხადება იწვევს ოთახის სხვადასხვა ფუნქციებს, თუ ბამპერი ბუმბერაზდება

r.stop % აჩერებს Roomba

r.moveDistance (-0.3, 0.2) % უკუაგდებს Roomba 0.3 მ

r.turnAngle (90, 0.5) % ბრუნავს ოთაბას 90 გრადუსით რაც შეიძლება სწრაფად

დასასრული

თუ bumpdata.front> 0

რ. გაჩერება

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0.5) % ბრუნავს Roomba შემთხვევითი ინტერვალით 0 -დან 270 გრადუსამდე რაც შეიძლება სწრაფად

დასასრული

თუ bumpdata.left> 0

რ. გაჩერება

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0.5) % ბრუნავს Roomba -90 გრადუსით რაც შეიძლება სწრაფად

დასასრული

დასასრული

ფუნქცია lightbumper = lightcheck (r) % ქმნის 'lightcheck' ფუნქციას

lightdata = r.getLightBumpers % ანიჭებს ყველა მონაცემს სინათლის დარტყმის სენსორიდან ცვლადი 'lightdata'

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % ქმნის შენახულ ცვლადს, "lightbumper", სხვადასხვა სინათლის ბამპერებისთვის

if lightbumper % If განაცხადი, რომ გამოიძახოს lightbumper მონაცემები ზემოდან

თუ lightdata.left> 10 % თუ განცხადება იწვევს ოთახის სხვადასხვა ფუნქციებს, თუ სინათლის ბამპერი გრძნობს 10 -ზე მეტ მნიშვნელობას

r.setDriveVelocity (0.05, 0.05) % შენელდება ოთახის მომზადება მუწუკებისათვის

end % მთავრდება საწყისი if განცხადებით

if lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

დასასრული

თუ lightdata.right> 10

r.setDriveVelocity (0.05, 0.05)

დასასრული

თუ lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

დასასრული

end % მთავრდება "lightbumper" if statement

end %მთავრდება lightcheck ფუნქცია

ფუნქცია dontFall = cliffCheck (r) % ქმნის 'cliffCheck' ფუნქციას

მონაცემები = r.getCliffSensors; % ანიჭებს ყველა მონაცემს კლდის სენსორიდან ცვლადი 'მონაცემებისთვის'

dontFall = data.left <1020 || data.left წინა <1020 || data.right წინა <1020 || data.right <1020 % ქმნის შენახულ ცვლადს, 'dontFall', კლდის სხვადასხვა სენსორებისთვის

if dontFall % if განაცხადის გამოძახება cliff სენსორი მონაცემები ზემოდან

თუ მონაცემები. მარცხნივ <1010 % თუ განცხადება, რომელიც იწვევს ოთახის სხვადასხვა ფუნქციებს, მოხდება, თუ კლდის სენსორი გრძნობს 1010 -ზე ნაკლებ მნიშვნელობას

რ. გაჩერება

r.moveDistance (-0.2, 0.2) % უკუაგდებს Roomba 0.2 მ

r.turnAngle (-90, 0.5) % ბრუნავს Roomba -90 გრადუსით რაც შეიძლება სწრაფად

elseif data.left წინა <1010

რ. გაჩერება

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % ბრუნავს ოთაბას 90 გრადუსით რაც შეიძლება სწრაფად

elseif data.right წინა <1010

რ. გაჩერება

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % ბრუნავს ოთაბას 90 გრადუსით რაც შეიძლება სწრაფად

elseif data.right <1010

რ. გაჩერება

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % ბრუნავს ოთაბას 90 გრადუსით რაც შეიძლება სწრაფად

დასასრული

დასასრული

დასასრული

ფუნქციის სითხეები = LiquidCheck (r) % ქმნის 'LiquidCheck' ფუნქციას

ხოლო ჭეშმარიტი %იწყებს უსასრულო მარყუჟს დაკალიბრებისათვის

img = r.getImage; % კითხულობს რობოტის კამერას

image (img) % აჩვენებს სურათს ფიგურის ფანჯარაში

red_mean = საშუალო (საშუალო (img (200, 150, 1)))% კითხულობს წითელი პიქსელების საშუალო რაოდენობას

blue_mean = საშუალო (საშუალო (img (200, 150, 3)))% კითხულობს ლურჯი პიქსელების საშუალო რაოდენობას

სითხეები = წითელი_მნიშვნელობა || blue_mean % ქმნის შენახულ ცვლადს "სითხე" სხვადასხვა ფერის ცვლადებისთვის

თუ სითხეები % If განაცხადის გამოძახება სურათის მონაცემების ზემოდან

თუ red_mean> 170 % თუ განცხადება იწვევს ოთახის სხვადასხვა ფუნქციებს, თუ კამერა ხედავს საშუალო წითელ ფერს 170 -ზე მეტი

r.stop % აჩერებს roomba

r.setLEDCenterColor (255) % ადგენს წრეს წითელ ფერს

r.setLEDDigits (); % ეკრანის გასუფთავება

f = waitbar (0, '*შემომავალი შეტყობინება*'); % ქმნის მელოდიის ჩატვირთვის შეტყობინებას

r.setLEDDigits ("ცხელი"); % ადგენს LED ეკრანს გამომავალი 'HOT'

პაუზა (0.5) %მოკლე პაუზა გაფანტული ინფორმაციის წასაკითხად

r.setLEDDigits ('LAVA'); % ადგენს LED ეკრანს გამომავალი 'LAVA'

პაუზა (0.5)

waitbar (.33, f, '*შემომავალი შეტყობინება*'); %ქმნის ლოდინის ზოლის ზრდას

r.setLEDDigits ("ცხელი");

პაუზა (0.5)

r.setLEDDigits ('LAVA');

პაუზა (0.5)

waitbar (.67, f, '*შემომავალი შეტყობინება*'); % ქმნის ლოდინის ზოლის ზრდას

r.setLEDDigits ("ცხელი");

პაუზა (0.5)

r.setLEDDigits ('LAVA');

waitbar (1, ვ, '*შემომავალი შეტყობინება*'); %ასრულებს ლოდინის ზოლს

პაუზა (1)

დახურვა (ვ) %ხურავს საცდელად

r.setLEDDigits (); % ასუფთავებს LED ეკრანს

ყველა დახურვა ხურავს ყველა წინა ფანჯარას

ცულები ("ფერი", "არცერთი", "XColor", "არცერთი", "YColor", "არცერთი") % წმენდს ნაკვეთების ფანჯარას ღერძებისა და დიაგრამისგან

y = 0.5; % ადგენს ტექსტის y პოზიციას შედგენის ფანჯარაში

x = 0.06; % ადგენს ტექსტის x- პოზიციას შედგენის ფანჯარაში

სათაური ('MARS ROOMBA', 'fontsize', 32) % ამატებს სათაურს შედგენის ფანჯარაში

quadeqtxt = 'DANGER LAVA'; % ადგენს ცვლადს 'quadeqtxt' 0 გამომავალზე

ტექსტი (x, y, quadeqtxt, "თარჯიმანი", "ლატექსი", "შრიფტის ზომა", 36); % აჩვენებს quadeq ტექსტს შედგენის ფანჯარაში

r.moveDistance (-0.2, 0.2) %უკუაგდებს ოთახს 0.2 მ

r.turnAngle (180, 0.5) %გადააქცევს ოთახს 180 გრადუსით რაც შეიძლება სწრაფად

r.setLEDCenterColor (128, 128); ადგენს ოთახის ცენტრის LED- ს ნარინჯისფერზე

დახურვა ყველა %ხურავს დარჩენილ ღია ფანჯარას

elseif blue_mean> 175 % თუ განცხადება იწვევს ოთახის სხვადასხვა ფუნქციებს, თუ კამერა ხედავს საშუალო ლურჯ ფერს 175 -ზე მეტი

r.stop % აჩერებს roomba

r.setLEDCenterColor (255) % ადგენს წრეს წითელ ფერს

r.setLEDDigits (); % ეკრანის გასუფთავება

f = waitbar (0, '*შემომავალი შეტყობინება*'); % ქმნის მელოდიის ჩატვირთვის შეტყობინებას

r.setLEDDigits ('LOOK'); % აყენებს LED ეკრანს გამომავალი 'LOOK'

პაუზა (0.5) %მოკლე პაუზა გაფანტული ინფორმაციის წასაკითხად

r.setLEDDigits ('WATR'); % ადგენს LED ეკრანს გამომავალი 'WATR'

პაუზა (0.5)

waitbar (.33, f, '*შემომავალი შეტყობინება*'); %ქმნის ლოდინის ზოლის ზრდას

r.setLEDDigits ('LOOK');

პაუზა (0.5)

r.setLEDDigits ('WATR');

პაუზა (0.5)

waitbar (.67, f, '*შემომავალი შეტყობინება*'); % ქმნის ლოდინის ზოლის ზრდას

r.setLEDDigits ('LOOK');

პაუზა (0.5)

r.setLEDDigits ('WATR');

waitbar (1, ვ, '*შემომავალი შეტყობინება*'); %ასრულებს ლოდინის ზოლს

პაუზა (1)

დახურვა (ვ) %ხურავს საცდელად

r.setLEDDigits (); % ასუფთავებს LED ეკრანს

ყველა დახურვა ხურავს ყველა წინა ფანჯარას

ცულები ("ფერი", "არცერთი", "XColor", "არცერთი", "YColor", "არცერთი") % წმენდს ნაკვეთების ფანჯარას ღერძებისა და დიაგრამისგან

y = 0.5; % ადგენს ტექსტის y პოზიციას შედგენის ფანჯარაში

x = 0.06; % ადგენს ტექსტის x- პოზიციას შედგენის ფანჯარაში

სათაური ('MARS ROOMBA', 'fontsize', 32) % ამატებს სათაურს შედგენის ფანჯარაში

quadeqtxt = 'ნაპოვნი წყალი'; % ადგენს ცვლადს 'quadeqtxt' 0 გამომავალზე

ტექსტი (x, y, quadeqtxt, "თარჯიმანი", "ლატექსი", "შრიფტის ზომა", 36); % აჩვენებს quadeq ტექსტს შედგენის ფანჯარაში

r.moveDistance (-0.2, 0.2) %უკუაგდებს ოთახს 0.2 მ

r.turnAngle (180, 0.5) %რაც შეიძლება სწრაფად ატრიალებს ოთახს 180 გრადუსით

r.setLEDCenterColor (128, 128); ადგენს ოთახის ცენტრის LED- ს ნარინჯისფერზე

დახურვა ყველა %ხურავს დარჩენილ ღია ფანჯარას

end %მთავრდება "red_mean" if განცხადება

end %ამთავრებს "სითხეებს" თუ განცხადება

end % იხურება უსასრულოდ, ხოლო მარყუჟი

end % მთავრდება ფუნქცია 'LiquidCheck'

ნაბიჯი 4: კოდის გაშვება

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

გირჩევთ: