Mündəricat:

Mars Roomba Layihəsi UTK: 4 addım
Mars Roomba Layihəsi UTK: 4 addım

Video: Mars Roomba Layihəsi UTK: 4 addım

Video: Mars Roomba Layihəsi UTK: 4 addım
Video: Prüfungsvorbereitung B2 🚀 Deutsch lernen 2024, Noyabr
Anonim
Mars Roomba Layihəsi UTK
Mars Roomba Layihəsi UTK
Mars Roomba Layihəsi UTK
Mars Roomba Layihəsi UTK

DİQQƏT: BU YALNIZ ROOMBA A KURULSA İŞLƏYƏCƏK

ÇOX XÜSUSİYYƏTLİ BU TƏLİMAT TENNESSEE TƏLƏBƏLƏRİ VƏ FAKÜLTESİ ÜNİVERSİTESİ İLƏ İSTİFADƏ EDİLMİŞDİR.

Bu kod MATLAB -da yerli olaraq yazılmış və saxlanılan kodu işə salmaq üçün Roomba qurmaq üçün istifadə olunur. Tennessi Universitetinin veb saytından lazımi kitabxanaları ala bilmirsinizsə, bu işləməyəcək. Kitabxanalarınız varsa, kitabxanadakı funksiyalardan istifadə edərək öz Roomba proqramlaşdırmaq üçün onlardan istifadə edə bilərsiniz. Bu Təlimat kitabxanaları necə quracağınızı, bütün kodlar üçün qovluq yaratmağı və aşağıda təqdim etdiyimiz proqramı necə kodlaşdırıb istifadə etməyi öyrədir.

Lazımi materiallar:

· Otaq

· MATLAB

· Raspberry Pi və Pi Kamera

Addım 1: Kitabxanaları əldə edin

Mühəndislik veb saytında bir alət qutusu/kitabxana var, yükləyin və yeni bir qovluğa yerləşdirin. Bu qovluq bütün layihə iş fayllarını ehtiva etməlidir, çünki proqramda istifadə etdiyiniz hər hansı bir funksiyanın kitabxanaya müraciət etməsi lazımdır. Bunu etdikdən sonra proqramlarınız üzərində işləməyə başlaya bilərsiniz

Addım 2: Proqramların yazılması

Proqramda istifadə edilə bilən bir çox funksiya var, bu funksiyalara "doc roomba" əmrindən istifadə etməklə daxil olmaq olar. Bu funksiyalardan istifadə edərək Roomba'nızı bir çox fərqli şəkildə idarə edə bilərsiniz. Aşağıda verilən kod, mars gəzintisi yaratmaq üçün qabar sensorlar, işıq çubuğu sensorları, kamera və uçurum sensorlarından fərqli şəkildə istifadə edir. Roombanın bir cismə vurduğunu, bu baş verəndə robot tərsinə dönüb dönməyə və hərəkət etməyə davam edəcəyini təyin etmək üçün qabar sensorlarından istifadə etdik. Roomba bir obyektə dəyməzdən əvvəl, işıq çubuğu obyekti aşkarlayacaq və Roombanı yavaşlatacaq, beləliklə, qabar sensoru işə salmaq üçün obyektə dəyəndə Roomba zərbədən daha az zədələnəcək/təsirlənməyəcək. Kamera səthdə su və ya lav axtarır, əgər heç bir maye tapılmazsa, robot axtarışa davam edəcək, bir az su varsa, robot operatorlara mesaj göndərəcək. Uçurum sensorlar robotun uçuruma yaxınlaşması halında onu dayandırmaq üçün nəzərdə tutulmuşdur. Robot uçurum hiss edərsə, yıxılmamaq üçün tərsinə dönər və dönər.

Addım 3: Kod

Bunu kopyalayın və kitabxanalarla eyni qovluqda yerləşən bir MATLAB faylına yapışdırın

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

əsl isə % Infinte isə kodun davam etməsini təmin edir

dontFall = cliffCheck (r) % 'dontFall' dəyişənini 'cliffCheck' funksiyasına təyin edir

if dontFall % if ifadəsi 'cliffCheck' tamamlandıqdan sonra kodda davam edəcək

r.setDriveVelocity (0.1, 0.1) % 'CliffCheck' tamamlandıqdan sonra Roombanı hərəkətdə saxlayır.

end % ifadəsi 'dontFall' if ifadəsini bitirir

bumper = bumpcheck (r) % 'bumpcheck' funksiyasına 'bamper' dəyişənini təyin edir

if bumper if if 'bumpcheck' tamamlandıqdan sonra kodda davam etmək

r.setDriveVelocity (0.1, 0.1) % 'Bumpcheck' tamamlandıqdan sonra Roombanı hərəkətdə saxlayır.

end % ifadəsi 'bumper' if ifasını bitirir

sıvılar = LiquidCheck (r) % 'LiquidCheck' funksiyasına dəyişən 'mayelər' təyin edir

əgər mayelər % if ifadəsi 'LiquidCheck' tamamlandıqdan sonra kodda davam edəcək

r.setDriveVelocity (0.1, 0.1) % 'LiquidCheck' tamamlandıqdan sonra Roombanı hərəkətdə saxlayır.

son % if 'ifadəsini' mayelər 'ilə bitirir

lightbumper = lightcheck (r) % 'lightcheck' funksiyasına dəyişən 'lightbamper' təyin edir

fasilə (0.1) % Davamlı döngə təkrarlanmasının qarşısını almaq üçün qısa fasilə verin

end % loop sonsuz olaraq bitir

son % bitmə funksiyası

bumper = bumpcheck (r) % 'bumpcheck' funksiyasını yaradır

bumpdata = r.getBumpers % Bütün məlumatları bamperdən 'bumpdata' dəyişəninə təyin edir

bamper = bumpdata.right || bumpdata.left || bumpdata.front Fərqli tamponlar üçün saxlanılan dəyişən, 'tampon' yaradır

if bumpdata.right> 0 % Tampon vurulduqda roombanın fərqli funksiyalarının meydana gəlməsinə səbəb olacaq ifadə

r.stop Roombanı dayandırır

r.moveDistance (-0.3, 0.2) % Roomba 0.3m geri çevirir

r.turnAngle (90, 0.5) % Roombanı mümkün qədər tez 90 dərəcə döndürür

bitmək

bumpdata.front> 0 olarsa

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0.5) % 0 və 270 dərəcə arasında təsadüfi bir intervalda Roombanı mümkün qədər tez döndürür

bitmək

bumpdata.left> 0 olarsa

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0.5) % Roombanı mümkün qədər tez -90 dərəcə döndürür

bitmək

bitmək

lightbumper = lightcheck (r) % 'lightcheck' funksiyasını yaradır

lightdata = r.getLightBampers % İşıq çarpma sensöründən bütün məlumatları dəyişən 'işıq məlumatlarına' təyin edir

lightbamper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Fərqli işıq tamponları üçün saxlanılan dəyişən, 'lightbumper' yaradır

əgər lightbumper Əgər yuxarıdan lightbumper data zəng etmək üçün If

Əgər lightdata.left> 10 % -dən çoxdursa, işığın tamponu 10 -dan çox dəyər hiss edərsə, otaq işinin fərqli funksiyalarına səbəb olar

r.setDriveVelocity (0.05, 0.05) % Zərbəyə hazırlaşmaq üçün roombanı yavaşlatır

end % ifadəsi if ifadəsini bitirir

əgər lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

bitmək

əgər lightdata.right> 10

r.setDriveVelocity (0.05, 0.05)

bitmək

əgər lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

bitmək

end % ifadəsi 'lightbumper' ifasını bitirir

son %işığı yoxlama funksiyasını bitir

dontFall = cliffCheck (r) % funksiyası 'cliffCheck' funksiyasını yaradır

məlumatlar = r.getCliffSensors; Uçurum sensöründən bütün məlumatları dəyişkən 'məlumatlara' təyin edir

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Fərqli uçurum sensorlar üçün saxlanılan 'dontFall' dəyişənini yaradır

if dontFall Yuxarıdan uçurum sensoru məlumatlarına zəng etmək üçün ifadəsi

if data.left <1010 % uçurum sensoru 1010 -dən aşağı dəyərlər hiss edərsə, roomba'nın fərqli funksiyalarının meydana gəlməsinə səbəb olacaq ifadə

r.stop

r.moveDistance (-0.2, 0.2) % Roomba 0.2m geri çevirir

r.turnAngle (-90, 0.5) % Roomba -90 dərəcəsini mümkün qədər tez döndərir

elseif data.leftFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Roombanı mümkün qədər 90 dərəcə döndürür

elseif data.rightFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Roombanı mümkün qədər tez 90 dərəcə döndürür

elseif data.right <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Roombanı mümkün qədər 90 dərəcə döndürür

bitmək

bitmək

bitmək

maye funksiyası = LiquidCheck (r) % 'LiquidCheck' funksiyasını yaradır

əsl %isə kalibrləmə üçün sonsuz döngəyə başlayır

img = r.getImage; robotun kamerasını oxuyur

image (img) % şəkli bir pəncərədə göstərir

red_mean = ortalama (orta (img (200, 150, 1)))% qırmızı piksellərin orta miqdarını oxuyur

blue_mean = ortalama (orta (img (200, 150, 3)))% mavi piksellərin orta miqdarını oxuyur

mayelər = red_mean || blue_mean Fərqli rəng dəyişənləri üçün saxlanılan dəyişən, 'mayelər' yaradır

əgər mayelər % Əgər yuxarıdakı şəkil məlumatlarına zəng etmək üçün ifadələr

Əgər red_mean> 170 % əgər kamera 170 -dən yuxarı orta qırmızı rəng görürsə, roombanın fərqli funksiyalarının meydana gəlməsinə səbəb olacaq ifadə

r.stop % roomba dayandırır

r.setLEDCenterColor (255) % dairəni qırmızı rəngə təyin edir

r.setLEDDigits (); % ekranı silin

f = gözləmə çubuğu (0, '*GƏLƏN MESAJ*'); % yükləmə mesajı üçün gözləmə çubuğu yaradır

r.setLEDDigits ('SICAK'); % LED ekranını 'HOT' çıxışı olaraq təyin edir

fasilə (0.5) %Qısa fasilə məlumatları oxumaq üçün yoxa çıxdı

r.setLEDDigits ('LAVA'); % LED ekranı 'LAVA' çıxışı olaraq təyin edir

fasilə (0.5)

gözləmə çubuğu (.33, f, '*GƏLƏN MESAJ*'); %gözləmə çubuğunda artım yaradır

r.setLEDDigits ('SICAK');

fasilə (0.5)

r.setLEDDigits ('LAVA');

fasilə (0.5)

gözləmə çubuğu (.67, f, '*GƏLƏN MESAJ*'); % gözləmə çubuğunda artım yaradır

r.setLEDDigits ('SICAK');

fasilə (0.5)

r.setLEDDigits ('LAVA');

gözləmə çubuğu (1, f, '*GƏLƏN MESAJ*'); %gözləmə çubuğunu tamamlayır

fasilə (1)

close (f) %gözləmə çubuğunu bağlayır

r.setLEDDigits (); % LED ekranı təmizləyir

hamısını bağla %Bütün əvvəlki pəncərələri bağlayır

axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Baltaların və qrafikin süjet pəncərəsini təmizləyir

y = 0.5; % mətnin y-mövqeyini qurma pəncərəsində təyin edir

x = 0.06; % mətnin x-mövqeyini qurma pəncərəsində təyin edir

başlıq ('FROM MARS ROOMBA', 'fontsize', 32) % Çizgi pəncərəsinə başlıq əlavə edir

quadeqtxt = 'DANGER LAVA'; % 'Quadeqtxt' dəyişənini 0 çıxışı olaraq təyin edir

mətn (x, y, quadeqtxt, 'tərcüməçi', 'lateks', 'fontsize', 36); %, qrafik pəncərəsində quadeq mətnini göstərir

r.moveDistance (-0.2, 0.2) %otaqda 0.2m geri çevirir

r.turnAngle (180, 0.5) %, otağı mümkün qədər 180 dərəcə döndərir

r.setLEDCenterColor (128, 128); Roomba mərkəzi LEDini narıncıya qoyur

hamısını bağla qalan açıq pəncərələri bağlayır

elseif blue_mean> 175 % Kamera 175 -dən böyük bir orta mavi rəng görürsə, roomba'nın fərqli funksiyalarının meydana gəlməsinə səbəb olacaq bir ifadə

r.stop % roomba dayandırır

r.setLEDCenterColor (255) % dairəni qırmızı rəngə təyin edir

r.setLEDDigits (); % ekranı silin

f = gözləmə çubuğu (0, '*GƏLƏN MESAJ*'); % yükləmə mesajı üçün gözləmə çubuğu yaradır

r.setLEDDigits ('Bax'); % LED ekranı 'LOOK' çıxışı olaraq təyin edir

fasilə (0.5) %Qısa fasilə məlumatları oxumaq üçün yoxa çıxdı

r.setLEDDigits ('WATR'); % LED ekranı 'WATR' çıxışı olaraq təyin edir

fasilə (0.5)

gözləmə çubuğu (.33, f, '*GƏLƏN MESAJ*'); %gözləmə çubuğunda artım yaradır

r.setLEDDigits ('Bax');

fasilə (0.5)

r.setLEDDigits ('WATR');

fasilə (0.5)

gözləmə çubuğu (.67, f, '*GƏLƏN MESAJ*'); % gözləmə çubuğunda artım yaradır

r.setLEDDigits ('Bax');

fasilə (0.5)

r.setLEDDigits ('WATR');

gözləmə çubuğu (1, f, '*GƏLƏN MESAJ*'); %gözləmə çubuğunu tamamlayır

fasilə (1)

close (f) %gözləmə çubuğunu bağlayır

r.setLEDDigits (); % LED ekranı təmizləyir

hamısını bağla %Bütün əvvəlki pəncərələri bağlayır

axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Baltaların və qrafikin süjet pəncərəsini təmizləyir

y = 0.5; % mətnin y-mövqeyini qurma pəncərəsində təyin edir

x = 0.06; % mətnin x-mövqeyini qurma pəncərəsində təyin edir

başlıq ('FROM MARS ROOMBA', 'fontsize', 32) % Çizgi pəncərəsinə başlıq əlavə edir

quadeqtxt = 'SU TUTULDU'; % 'Quadeqtxt' dəyişənini 0 çıxışı olaraq təyin edir

mətn (x, y, quadeqtxt, 'tərcüməçi', 'lateks', 'fontsize', 36); %, qrafik pəncərəsində quadeq mətnini göstərir

r

r.turnAngle (180, 0.5) %, otağı mümkün qədər 180 dərəcə döndərir

r.setLEDCenterColor (128, 128); Roomba mərkəzi LEDini narıncı olaraq təyin edir

hamısını bağla qalan açıq pəncərələri bağlayır

end %ifadəsi 'red_mean' if ifadəsi ilə bitir

son %if 'ifadəsini' mayelər 'ilə bitirir

son % döngə sonsuz olaraq bağlanır

son % bitər 'LiquidCheck' funksiyası

Addım 4: Kodun işə salınması

Kodu MATLAB -a kopyalayıb yapışdırdıqdan sonra Roomba -ya qoşulmalısınız. Roomba bağlandıqdan sonra r dəyişəninə ad verməlisiniz. Funksiyalar Roombaya istinad edərkən r dəyişənindən istifadə edir, buna görə Roomba r dəyişəni kimi təyin olunmalıdır. Kodu işlədikdən sonra Roomba göstərişlərə uyğun olaraq işləməlidir.

Tövsiyə: