Სარჩევი:

UTK EF 230 MarsRoomba Project შემოდგომა 2018: 5 ნაბიჯი
UTK EF 230 MarsRoomba Project შემოდგომა 2018: 5 ნაბიჯი

ვიდეო: UTK EF 230 MarsRoomba Project შემოდგომა 2018: 5 ნაბიჯი

ვიდეო: UTK EF 230 MarsRoomba Project შემოდგომა 2018: 5 ნაბიჯი
ვიდეო: DIY ALTERNATÖR - FLANŞ ALTERNATÖR DEVİR GERİLİM TESTİ - MANYETİK AKI İLE ELEKTRİK. 2024, ივლისი
Anonim
UTK EF 230 MarsRoomba Project შემოდგომა 2018
UTK EF 230 MarsRoomba Project შემოდგომა 2018

ამჟამად, მარსმავლები გამოიყენება მარსის ზედაპირზე მონაცემების შეგროვების მიზნით სხვადასხვა მეთოდით, რათა საბოლოოდ გაიგონ მეტი პლანეტის მიკრობული სიცოცხლის პოტენციალის შესახებ. როვერები ძირითადად იყენებენ ფოტოგრაფიისა და ნიადაგის ანალიზის ინსტრუმენტებს მონაცემთა შეგროვებისთვის, მაგრამ როვერები ასევე მოიცავს სანავიგაციო ინსტრუმენტებს, რადიაციის დეტექტორებს, ატმოსფერულ სენსორებს და ლაზერს კლდის ნიმუშის აორთქლებისთვის. NASA– ს თანახმად, 2020 წლის როვერული მისიის მიზანი ძირითადად იგივეა, მაგრამ სპეციალური ამოცანაა „ნიადაგისა და კლდის ნიმუშების შეგროვება და ზედაპირზე მათი შენახვა მომავალი მისიით დედამიწაზე პოტენციური დაბრუნებისთვის“.

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

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

ნაბიჯი 1: საჭირო მასალები

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

1) ინტერნეტით ხელმისაწვდომი კომპიუტერი/ლეპტოპი

2) MATLAB_R2018 ა

3) Roomba და Roomba ჩამოტვირთვა

ნაბიჯი 2: დაყენება/ჩამოტვირთვა

დაყენება/ჩამოტვირთვა
დაყენება/ჩამოტვირთვა

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

დამატებითი დახმარება:

% EF 230 Roomba პროექტის ინსტალაციის პროგრამა% ბოლო განახლება: 13 სექტემბერი, 2017 (დაფიქსირდა უსაფრთხოების საკითხები, რომლებიც დაკავშირებულია https სერვერთან და ამოღებულია გაფრთხილების წაშლის გაფრთხილების შემთხვევაში) roombaInstall clc; % ფაილების სია ფაილების დასაყენებლად = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % ადგილმდებარეობა პარამეტრებიდან = weboptions ('CertificateFilename', ''); % უთხარი სერტიფიკატის მოთხოვნების იგნორირება სერვერზე = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba- ს ინსტალაცია/განახლება'; % ჩვენების მიზანი და მიიღეთ დადასტურების მოთხოვნა = {'ეს პროგრამა გადმოწერს ამ EF 230 Roomba ფაილებს:' '' strjoin (ფაილები, ''] '' 'ამ საქაღალდეში:' '' cd '' 'გსურთ გააგრძელოთ? '}; სიგნალი; yn = questdlg (მოთხოვნა,… dlgTitle,… 'დიახ', 'არა', 'დიახ');

if ~ strcmp (yn, 'დიახ'), დაბრუნება; დასასრული

% მიიღეთ არსებული ფაილების სია არსებული_ ფაილები = ფაილები (cellfun (@exist, files)> 0); if ~ isempty (არსებული_ ფაილები) % დარწმუნდით, რომ ნამდვილად კარგია მათი სწრაფი შეცვლა = {'თქვენ შეცვლით ამ ფაილებს (ფაილებს):' '' strjoin (არსებული_ ფაილები, '') '' 'კარგი შესაცვლელად?' }; სიგნალი; yn = questdlg (მოთხოვნა,… dlgTitle,… 'დიახ', 'არა', 'დიახ'); if ~ strcmp (yn, 'დიახ'), დაბრუნება; დასასრული დასასრული

% ჩამოტვირთეთ ფაილები cnt = 0; for i = 1: სიგრძე (ფაილები) f = ფაილები {i}; disp (['' გადმოტვირთვა 'f]); სცადეთ url = [სერვერი f]; websave (f, url, პარამეტრები); % დამატებული პარამეტრები უსაფრთხოების შეცდომების თავიდან ასაცილებლად cnt = cnt + 1; catch disp (['გადმოწერის შეცდომა' f]); დუმილი = [f '.html']; თუ არსებობს (დუმილი, 'ფაილი') == 2 წაშლა (ვიწრო) ბოლო დასასრული

თუ cnt == სიგრძე (ფაილები) msg = 'ინსტალაცია წარმატებულია'; waitfor (msgbox (msg, dlgTitle)); else msg = 'ინსტალაციის შეცდომა - იხილეთ ბრძანების ფანჯარა დეტალებისთვის'; waitfor (errordlg (msg, dlgTitle)); დასასრული

დასრულება %roombaInstall

ნაბიჯი 3: კოდი ნაწილი 1: თვალთვალის ფუნქცია

კოდი ნაწილი 1: თვალთვალის ფუნქცია
კოდი ნაწილი 1: თვალთვალის ფუნქცია

ეს ფუნქცია იღებს Roomba ცვლადს და სურათს კამერადან Roomba- ზე და პოულობს თვალყურს ადევნებული ობიექტის ცენტრალურ xy კოორდინატებს

შეინახეთ ეს კოდი იმავე საქაღალდეში სხვა ფაილში.

ფუნქცია [xm, ym] = თვალთვალის ლურჯი (r) %შეყვანა: roomba ცვლადი %შედეგები: შემდეგი ობიექტის ცენტრის x და y მნიშვნელობა %მიზანი: პოულობს სურათის მოცემული ცისფერი ობიექტის ცენტრს %გამოყენება [x მნიშვნელობა, y მნიშვნელობა] = თვალთვალის ლურჯი (ოთახის ცვლადი) img = r.getImage; % კითხულობს რობოტის ქვეპლოტის (1, 2, 2) ქვესახეობის კამერას (img); %გვიჩვენებს სურათს იმავე ფანჯარაში, როგორც ბილიკის სათაური ('სურათის თვალყურის დევნება') red = img (:,:, 1); მწვანე = img (:,:, 2); ლურჯი = img (:,,, 3); justBlue = ლურჯი - მწვანე/2 - წითელი/2; bw = justBlue> 40; დაიჭირეთ ქვემეხი (1, 2, 2) ქვესახეობა (ბ.ვ.); [x, y] = იპოვეთ (bw); თუ ~ გათავისუფლებულია (x) && ~ გათავისუფლებულია (y) xm = მრგვალი (საშუალო (x)); ym = მრგვალი (საშუალო (y)); xx = max (1, xm-5): min (xm+5, ზომა (bw, 1)); yy = max (1, ym-5): min (ym+5, ზომა (bw, 2)); bwbw = ნულოვანი (ზომა (bw), 'uint8'); bwbw (xx, yy) = 255; დაიჭირეთ ქვემეხი (1, 2, 2) ქვესახეობა (justBlue + bwbw); დასასრული

ნაბიჯი 4: კოდი ნაწილი 2: მიუხედავად იმისა, რომ მარყუჟი

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

როვერის პროექტი

Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %საშუალებები: ოთახის ღირებულება, კამერის მონაცემები, დარტყმის, შუქისა და კედლის სენსორები მიზანი: მიჰყვება ასტრონავტს და თავს არიდებს დაბრკოლებებს. გაფრთხილების შემთხვევაში, roomba აგზავნის ელ.წერილს, სადაც აღწერილია რუკა და სად არის მისი საწყისი პოზიციის მიხედვით. გამოყენება: უბრალოდ გაუშვით პროგრამა ოთახის ცვლადის გამოცხადებით, ასევე აქვს მოძრავი მწვანე ობიექტი %შედეგები: აჩვენებს გამოსახულების თვალთვალის სურათს, ელ.ფოსტის რუქას და ტექსტს მომხმარებლისთვის %% შემდეგნაირად b = 0; %ცვლადების ინიციალიზაცია c = 0; x = 0; y = 0; თეტა = 0; ხოლო c == 0 %მარყუჟი, რათა აღმოაჩინოს ლურჯი ობიექტი და დაბრკოლებები t = r.timeGet; d = r.getDistance; [xval, yval] = თვალთვალის ლურჯი (r); cliff = getCliffSensors (r); %სენსორული მნიშვნელობების სტრუქტურების ინიციალიზაცია სინათლე = getLightBumpers (r); bump = getBumpers (r); თუ light.leftCenter> = 10 || light.rightCenter> = 10 % გრძნობს თუ არის კედელი r.stop r.setLEDDigits ('დახმარება') c = 1 % ხოლო b == 0 % თუ bump.right == 1 || bump.left == 1 || bump.front == 1 % გრძნობს, თუ მას აქვს შეჯახებული რაღაც მას შემდეგ, რაც იგრძნობა კედელი % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %გრძნობს, თუ მას აქვს რაღაც შეჯახებული, თუ ასეა, ის გამოგიგზავნით ელ.წერილს r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.right წინა = <100 || კლდე. მარცხენა <= 100 || cliff.right <= 100 %გრძნობს, თუ არის კლდე r.stop– ის მახლობლად r. 400 r.turnAngle (-5) დასასრულის დასასრული თეტა = თეტა + რ. მიიღეთAngle; x = d.*cosd (theta) + x; ოთახის % x კოორდინატი y = d.*sind (theta).*d + y; roomba ქვეპლოტის (1, 2, 1) ნაკვეთის (x, y, 'bd') % y კოორდინატი ასახავს გზას და ამატებს სათაურის სათაურს ('Roomba Path') დასასრული

ნაბიჯი 5: კოდი ნაწილი 3: ელ.ფოსტის განყოფილება

ეს მიიღებს შედგენილ გზას და სურათს და გაუგზავნის მითითებულ ელ.ფოსტის მისამართს

(აქ ნაჩვენებია ელ.ფოსტის მაგალითით)

%% ელ.ფოსტის განყოფილება

თუ b == 1 saveas (gcf, 'rovermap.png') %ინახავს ფიგურის setpref ('ინტერნეტი', 'SMTP_Server', 'smtp.gmail.com'); setpref ('ინტერნეტი', 'E_mail', '[email protected]'); % ფოსტის ანგარიში გაგზავნის setpref- დან ("ინტერნეტი", "SMTP_Username", "[email protected]"); % გამგზავნის მომხმარებლის სახელი setpref ("ინტერნეტი", "SMTP_Password", "gssegsse"); % გამგზავნის პაროლის რეკვიზიტები = 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 ("ელ.ფოსტის მაგალითი", "RoverBeacon", "ასტრონავტმა შეწყვიტა მოძრაობა. გამოჯანმრთელებისთვის მიჰყევით მითითებებს თანდართულ ფაილში.", "rovermap.png") disp ("გაგზავნილი ელფოსტა") დასასრული

გირჩევთ: