Mündəricat:

UTK EF 230 MarsRoomba Layihəsi Payız 2018: 5 Addım
UTK EF 230 MarsRoomba Layihəsi Payız 2018: 5 Addım

Video: UTK EF 230 MarsRoomba Layihəsi Payız 2018: 5 Addım

Video: UTK EF 230 MarsRoomba Layihəsi Payız 2018: 5 Addım
Video: UTK - EF 230 Autonomous Vehicle Project 2024, Iyul
Anonim
UTK EF 230 MarsRoomba Layihəsi Payız 2018
UTK EF 230 MarsRoomba Layihəsi Payız 2018

Hal -hazırda, Mars gəmiləri, planetin mikrob canlıları üçün potensialı haqqında daha çox məlumat əldə etmək üçün müxtəlif üsullarla Mars səthində məlumat toplamaq üçün istifadə olunur. Rovers əsasən məlumat toplamaq üçün fotoqrafiya və torpaq analizi vasitələrindən istifadə edir, lakin gəzənlərə naviqasiya alətləri, radiasiya detektorları, atmosfer sensorlar və qaya nümunələrinin buxarlanması üçün lazer də daxildir. NASA -ya görə, 2020 -ci ildə planlaşdırılan rover missiyasının məqsədi əsasən eynidir, lakin "torpaq və qaya nümunələri toplamaq və gələcəkdə bir missiya ilə Yerə qayıtmaq üçün onları səthdə gizlətmək" xüsusi vəzifəsi ilə.

Bununla birlikdə, gələcək roverlərin insan yardımı üçün istifadə ediləcəyi fərziyyəsi altında, komandamız, roverin insanların hansı cəhətlərini izləyə biləcəyini düşündü. Belə bir nəticəyə gəldik ki, bəzi fövqəladə hallar bir astronavtı həyat dəstəyi və avadanlıqları ilə birlikdə şüursuz hala gətirərsə, gəmiçimiz, təqib etdiyi astronavtın hərəkətsiz olduğunu müşahidə edərək, narahatlıq mesajı verərək mobil bir mayak kimi xidmət edə bilər. İnsanı izləmək və hərəkətsizliyi müəyyən etmək üçün, rover insanın ayaqqabılarının rəngi və hərəkəti kimi girişləri alacaqdı. Nəzərə alınmalı olan başqa bir məqam, fövqəladə bir vəziyyətdə bir siqnal ötürmək üçün yolunu xatırlamalıdır. Gəzicimiz Marsda bir ehtiyaca cavab verir ki, belə bir xarici ərazidə bu qədər baha başa gələn bir missiyanı yerinə yetirmək üçün bir neçə qat təhlükəsizlik kassası tələb olunur və kosmonavt uyğunsuzluq və ya şüursuzluq səbəbindən öz yardımını ala bilmirsə, gəzən başqalarını xəbərdar edə bilər..

Bu Təlimat, oxucunun Roombasını "astronavt" ı uğurla təqib etməsi və lazım olduqda bir narahatlıq siqnalı göndərməsi üçün proqramlaşdırmasında kömək etmək üçün hazırlanmışdır.

Addım 1: Lazım olan materiallar

Lazım olan materiallar
Lazım olan materiallar

1) İnternetə çıxışı olan kompüter/dizüstü kompüter

2) MATLAB_R2018a

3) Roomba və Roomba Yükləmə

Addım 2: Quraşdırma/Yükləmə

Quraşdırma/Yükləmə
Quraşdırma/Yükləmə

Roomba'ya daxil olmaq üçün lazım olan proqramı yükləmək üçün bu layihəni MATLAB -da işlədin (layihə qovluğunda öz faylında saxlanılır)

Əlavə Yardım:

EF 230 Roomba Layihəsi üçün Quraşdırma Proqramı Son yeniləmə: 13 Sentyabr 2017 (https serveri ilə əlaqəli sabit təhlükəsizlik problemləri və səhvlər baş verərsə silinmiş fayl silmə xəbərdarlığı) functionbabaInstall clc; Faylların quraşdırılacağı faylların % siyahısı = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; variantlardan yükləniləcək % yer = weboptions ('CertificateFilename', ''); % sertifikat tələblərinə məhəl qoymamağı söyləyin server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba Quraşdır/Yeniləyin'; % keçirmək məqsədi və təsdiq sorğusu alın = {'Bu proqram bu EF 230 Roomba fayllarını yükləyəcək:' '' strjoin (files, '') '' 'bu qovluğa:' '' cd '' 'Davam etmək istəyirsiniz? '}; bip; yn = questdlg (sorğu,… dlgTitle,… 'Bəli', 'Xeyr', 'Bəli');

if ~ strcmp (yn, 'Yes'), return; bitmək

% mövcud faylların siyahısını əldə edin_files = fayllar (cellfun (@exist, files)> 0); if ~ isempty (existing_files) % onları dəyişdirməyin həqiqətən yaxşı olduğundan əmin olun = {'Bu faylları dəyişdirirsiniz:' '' strjoin (mevcut_files, '') '' 'Əvəz etmək yaxşıdır?' }; bip; yn = questdlg (sorğu,… dlgTitle,… 'Bəli', 'Xeyr', 'Bəli'); if ~ strcmp (yn, 'Yes'), return; sonu son

% faylları yükləyin cnt = 0; i = 1 üçün: uzunluq (fayllar) f = fayllar {i}; disp (['Yüklənir' f]); url = [server f] cəhd edin; websave (f, url, seçimlər); Təhlükəsizlik səhvlərinin qarşısını almaq üçün əlavə variantlar cnt = cnt + 1; catch disp (['Yükləmə xətası' f]); kukla = [f '.html']; varsa (kukla, 'fayl') == 2 silmək (kukla) son ucu sonu

if cnt == length (files) msg = 'Quraşdırma Uğurlu'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Quraşdırma xətası - ətraflı məlumat üçün komanda pəncərəsinə baxın'; waitfor (səhv (msg, dlgTitle)); bitmək

son %roombaInstall

Addım 3: Kod 1 -ci hissə: İzləmə funksiyası

Kod 1 -ci hissə: İzləmə funksiyası
Kod 1 -ci hissə: İzləmə funksiyası

Bu funksiya Roomba dəyişənini və Roomba'daki kameradan şəkil alır və izlənilən obyektin mərkəzi xy koordinatlarını tapır

Bu kodu eyni qovluqdakı başqa bir faylda qeyd edin.

function [xm, ym] = trackingblue (r) %Girişlər: roomba dəyişən %Çıxışlar: Aşağıdakı obyektin mərkəzinin x və y dəyəri %Məqsəd: bir şəkil verilən mavi bir obyektin mərkəzini tapır %İstifadə [x dəyər, y dəyər] = trackingblue (roomba dəyişən) img = r.getImage; % robotun alt sahəsinin kamerasını oxuyur (1, 2, 2) alt görüntü (img); %şəkli yolun başlığı ilə eyni pəncərədə göstərir ('İzləmə Şəkli') red = img (:,:,, 1); yaşıl = img (:,,:, 2); mavi = img (:,,:, 3); justBlue = mavi - yaşıl/2 - qırmızı/2; bw = justBlue> 40; subplot (1, 2, 2) alt görüntüsünü (bw) saxlayın; [x, y] = tap (bw); if ~ isempty (x) && ~ isempty (y) xm = round (ortalama (x)); ym = yuvarlaq (orta (y)); xx = maksimum (1, xm-5): min (xm+5, ölçü (bw, 1)); yy = maksimum (1, ym-5): min (ym+5, ölçü (bw, 2)); bwbw = sıfır (ölçü (bw), 'uint8'); bwbw (xx, yy) = 255; subplot (1, 2, 2) alt görüntüsünü tutun (justBlue + bwbw); bitmək

Addım 4: Kod 2 -ci hissə: Döngə halında

Bu kod, Obyektin x və y mövqeyinə əsaslanaraq Roombanı izləmə funksiyasından uzaqlaşdırır. Bu, Roombanı mavi axtararkən divarlara və uçurumlara diqqət yetirməyə məcbur edəcək. Bu da Roomba yolunun x və y koordinatlarını alacaq və izləmə şəkli ilə uyğun bir süjet yaradacaq. Zərbə sensoru işə salınsa, e -poçt bölməsinə keçəcək

Rover Layihəsi

Jonah Zahn, Wade Price, Noah Sloan jzahn2, wprice15, nsloan1 %Girişlər: otaq dəyəri, kamera məlumatları, qabar, işıq və divar sensorları Məqsəd: Astronavtı izləyir və maneələrin qarşısını alır. Xəbərdar olunarsa, roomba xəritəni və başlanğıc mövqeyinə görə harada olduğunu ətraflı bir e -poçt göndərir. İstifadə: yalnız bir roomba dəyişən elan edərək proqramı çalıştırın, bir də hərəkət edən yaşıl obyekti var Çıxışlar: şəkil izləmə şəklini, e -poçt xəritəsini və istifadəçiyə mətni göstərir %% Bölmə aşağıdakı b = 0; %Dəyişənlərin işə salınması c = 0; x = 0; y = 0; teta = 0; mavi obyekti və maneələri aşkar etmək üçün c == 0 %Loop isə t = r.timeGet; d = r.getDistance; [xval, yval] = izləmə mavisi (r); uçurum = getCliffSensors (r); sensor dəyərləri üçün strukturların işə salınması işıq = getLightBumpers (r); bump = getBampers (r); əgər light.leftCenter> = 10 || light.rightCenter> = 10 % r.stop r.setLEDDigits ('yardım') c = 1 % yaxınlığında bir divar varsa hissləri c = 1 %, b == 0 % bump.right == 1 || bump.left == 1 || bump.front == 1 % Divar hiss etdikdən sonra bir şeyin çarpdığını hiss edir % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Bir şeyin toqquşduğunu hiss edir, əgər belədirsə, e -poçt göndərir r.stop c = 1 b = 1 başqa cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %r.stop c = 1 r.setLEDDigits ('help') başqa bir uçurumun olub olmadığını hiss edir %yval = 100 r.setDriveVelocity (0.1) başqa yifdə olduqda sürücü sürətlərini mavi rəngə uyğun olaraq təyin edir. 400 r.turnAngle (-5) son ucu teta = teta + r.getAngle; x = d.*cosd (teta) + x; Roomba % x koordinatı y = d.*sind (teta).*d + y; Roomba alt sahəsinin % y koordinatı (1, 2, 1) sahə (x, y, 'bd') % yolu göstərir və bir başlıq başlığı ('Roomba Yolu') saxlayır; bitmək

Addım 5: Kod Part 3: E -poçt Bölməsi

Bu, qurulmuş yolu və görüntünü götürəcək və müəyyən bir e -poçt ünvanına göndərəcəkdir

(E -poçt nümunəsi ilə burada göstərilmişdir)

%% E -poçt Bölməsi

əgər b == 1 saveas (gcf, 'rovermap.png') %setpref rəqəmini saxlayırsa ('İnternet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('İnternet', 'E_mail', '[email protected]'); setpref -dən göndəriləcək % poçt hesabı ('İnternet', 'SMTP_Username', '[email protected]'); % göndərən istifadəçi adı setpref ('İnternet', 'SMTP_Password', 'gssegsse'); % Göndərənlər parol rekvizitləri = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'doğru'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('nümunə e -poçt', 'RoverBeacon', 'Astronavt hərəkəti dayandırdı. Bərpa üçün əlavə olunmuş fayldakı təlimatları izləyin.', 'rovermap.png') disp ('e -poçt göndərildi') sonu

Tövsiyə: