Სარჩევი:
ვიდეო: Mars Roomba Project UTK: 4 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
უარი პასუხისმგებლობაზე: ეს მხოლოდ იმუშავებს, თუ ოთახი დაყენებულია
ძალიან სპეციფიკური გზა, ეს ინსტრუქცია შეიქმნა და განკუთვნილი იყო გამოსაყენებლად 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 უნდა გაუშვა ინსტრუქციის მიხედვით.
გირჩევთ:
Robot Project UTK 2017: 3 ნაბიჯი
Robot Project UTK 2017: მისია: ჩვენი ინჟინრების გუნდი დაიქირავა Froogle– მა, არაკომერციულმა ფონდმა ღია კოდის ტექნოლოგიის განვითარებისათვის, ინოვაციური Mars Rover– ის შემქმნელი ადამიანის დასახმარებლად. არის ოთახი, რომელიც ჩვენ დავწერეთ სერიის შესასრულებლად
Roomba Bot Bulider: 5 ნაბიჯი (სურათებით)
Roomba Bot Bulider: ბოტი აღმაშენებელი არის roomba, რომელიც " ატაცებით " მიმაგრებული წინ შეძლებს საგნების გადაადგილებას. მასთან ერთად კოდი მითითებულია პირველი მოძრაობის ჩაწერას GUI ყუთით, რომლის კონტროლიც შეგიძლიათ მაუსის დაჭერით. შემდგომ
MATLAB კონტროლირებადი Roomba: 5 ნაბიჯი
MATLAB კონტროლირებადი Roomba: ამ პროექტის მიზანია გამოიყენოს MATLAB, ასევე შეცვლილი iRobot პროგრამირებადი რობოტი. ჩვენმა ჯგუფმა გააერთიანა ჩვენი კოდირების უნარი, რათა შეიქმნას MATLAB სკრიპტი, რომელიც იყენებს iRobot– ის მრავალ ფუნქციას, მათ შორის კლდის სენსორებს, ბამპერის შეგრძნებას
UTK EF 230 MarsRoomba Project შემოდგომა 2018: 5 ნაბიჯი
UTK EF 230 MarsRoomba Project შემოდგომა 2018: ამჟამად, მარსზე მყოფი როვერები გამოიყენება მარსის ზედაპირზე მონაცემების შეგროვების მიზნით სხვადასხვა მეთოდით, რათა საბოლოოდ გაიგოთ მეტი პლანეტის მიკრობული სიცოცხლის პოტენციალის შესახებ. როვერები პირველ რიგში იყენებენ ფოტოგრაფიისა და ნიადაგის ანალიზის ინსტრუმენტებს მონაცემებისათვის
IRobot Create-Mars Expedition Rover Mark I: 4 ნაბიჯი
IRobot Create-Mars Expedition Rover Mark I: ეს ინსტრუქცია გასწავლით თუ როგორ უნდა შექმნათ iRobot Create MatLab კოდირების გამოყენებით. თქვენს რობოტს ექნება მინერალების ძებნა ფორმების განასხვავებით, მანევრირება მკაცრი რელიეფის კლდის სენსორების გამოყენებით და აქვს უნარი