Სარჩევი:

Roomba Explorer: 4 ნაბიჯი
Roomba Explorer: 4 ნაბიჯი

ვიდეო: Roomba Explorer: 4 ნაბიჯი

ვიდეო: Roomba Explorer: 4 ნაბიჯი
ვიდეო: CS50 2015 - Week 10 2024, ნოემბერი
Anonim
Roomba Explorer
Roomba Explorer

MATLAB- ისა და iRobot's Create2 Robot– ის გამოყენებით, ეს პროექტი შეისწავლის უცნობი მდებარეობის სხვადასხვა სფეროს. ჩვენ გამოვიყენეთ სენსორები რობოტზე, რათა დაგეხმაროთ საშიში რელიეფის მანევრირებაში. Raspberry Pi– დან თანდართული ფოტოსურათებისა და ვიდეო საკვების მიღებით, ჩვენ შევძელით განვსაზღვროთ ის დაბრკოლებები, რომლებსაც რობოტი შეხვდება და ისინი კლასიფიცირდება.

ნაწილები და მასალები

ამ პროექტისთვის დაგჭირდებათ

-კომპიუტერი

-MATLAB– ის უახლესი ვერსია (MATLAB R2018b იყო გამოყენებული ამ პროექტისთვის)

- roombaInstall ინსტრუმენტების ყუთი

-iRobot's Create2 Robot

-ჟოლო პი კამერით

ნაბიჯი 1: ინიციალიზაცია და სენსორები

ინიციალიზაცია და სენსორები
ინიციალიზაცია და სენსორები

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

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

ქვემოთ მოცემულია კოდი (MATLAB R2018b– დან)

%% ინიციალიზაცია

dlgPrompts = {'Roomba Number'};

dlgTitle = 'შეარჩიე შენი ოთახის ოთახი';

dlgDefaults = {''};

opts. Resize = 'ჩართული';

dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlg ნაგულისხმევი, არჩეული) % ფანჯრის შექმნა, რომელიც მომხმარებელს მოუწოდებს შეიყვანოს თავისი ოთახის ნომერი

n = str2 გაორმაგებული (dlgout {1});

r = roomba (n); % ინიციალიზებს მომხმარებლის მითითებულ Roomba %% სიჩქარის განსაზღვრას Light Bump სენსორებიდან ჭეშმარიტი s = r.getLightBumpers; მიიღეთ მსუბუქი დარტყმის სენსორები

lbumpout_1 = extractfield (s, 'left'); % იღებს სენსორების რიცხვით მნიშვნელობებს და ხდის მათ უფრო გამოსაყენებელ lbumpout_2 = extractfield (s, 'leftFront');

lbumpout_3 = extractfield (s, 'leftCenter');

lbumpout_4 = extractfield (s, 'rightCenter');

lbumpout_5 = extractfield (s, 'rightFront');

lbumpout_6 = extractfield (s, 'right');

lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % გარდაქმნის მნიშვნელობებს მატრიცაში

sLbump = დახარისხება (lbout); %დახარისხების მატრიცა ყველაზე დაბალ მნიშვნელობამდე შეიძლება მოიპოვოს

lowLbump = sLbump (1); სიჩქარე =.05+(lowLbump)*. 005 %იყენებს ყველაზე დაბალ მნიშვნელობას, რომელიც წარმოადგენს ახლო დაბრკოლებებს, რათა დადგინდეს სიჩქარე, უფრო მაღალი სიჩქარე, როდესაც არაფერია გამოვლენილი

r.setDriveVelocity (სიჩქარე, სიჩქარე)

დასასრული

% ფიზიკური ბამპერები

b = r.getBumpers; %გამოყვანა მართალია, ყალბი

bsen_1 = ამონაწერი (ბ, 'მარცხნივ')

bsen_2 = ამონაწერი (ბ, 'მარჯვნივ')

bsen_3 = ამონაწერი (ბ, 'წინა')

bsen_4 = extractfield (b, 'leftWheelDrop')

bsen_5 = extractfield (b, 'rightWheelDrop')

მუწუკები = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = თანხა (bums)

თუ tbump> 0 r.setDriveVelocity (0, 0)

დასასრული

Cliff სენსორები

c = r.getCliff სენსორები %% 2800 უსაფრთხო, სხვა წყალი

csen_1 = ამონაწერი (გ, 'მარცხნივ')

csen_2 = ამონაწერი (გ, 'მარჯვნივ')

csen_3 = ამონაწერი (გ, "მარცხენა წინა")

csen_4 = ექსტრაქფილდი (გ, 'მარჯვენა წინა')

კლდეები = [csen_1, csen_2, csen_3, csen_4]

ordcliff = დახარისხება (კლდეები)

თუ ორდკლიფი (1) <2750

r.setDriveVelocity (0, 0)

თუ კლდე <800

გაფანტული "კლდე"

სხვა

წყლის დალევა

დასასრული

r. TurnAngle (45)

დასასრული

ნაბიჯი 2: მონაცემების მიღება

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

img = r.getImage; imshow (img);

imwrite (img, 'imgfromcamera.jpg')

ფოტო = imread ('imgfromcamera.jpg')

ocrResults = ocr (ფოტო)

აღიარებული ტექსტი = ocrResults. Text;

ფიგურა;

imshow (ფოტო) ტექსტი (220, 0, აღიარებული ტექსტი, 'BackgroundColor', [1 1 1]);

ნაბიჯი 3: მისიის დასრულება

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

ელ.ფოსტის გაგზავნა

setpref ("ინტერნეტი", "SMTP_Server", "smtp.gmail.com");

setpref ("ინტერნეტი", "E_mail", "[email protected]"); % ფოსტის ანგარიში setpref– დან გასაგზავნად („ინტერნეტი“, „SMTP_Username“, „შეიყვანეთ გამგზავნის ელფოსტა“); % გამგზავნის მომხმარებლის სახელი setpref ("ინტერნეტი", "SMTP_Password", "შეიყვანეთ გამგზავნის პაროლი"); გამგზავნის პაროლი

props = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('შეიყვანეთ ელ.ფოსტის მიღება', 'Roomba', 'Roomba დაბრუნდა სახლში !!', 'imgfromcamera.jpg') % ფოსტის ანგარიში გასაგზავნად

რობოტი დასრულებულია.

ნაბიჯი 4: დასკვნა

დასკვნა
დასკვნა

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

*შეხსენება: არ უნდა დაგვავიწყდეს, რომ roombaInstall ინსტრუმენტების ყუთი საჭიროა MATLAB– ს რობოტთან და ბორტზე Raspberry Pi– სთან ურთიერთობისათვის.

გირჩევთ: