Mündəricat:
- Addım 1: Kitabxanaları əldə edin
- Addım 2: Proqramların yazılması
- Addım 3: Kod
- Addım 4: Kodun işə salınması
Video: Mars Roomba Layihəsi UTK: 4 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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ə:
Avtomatlaşdırılmış EKQ- BME 305 Final Layihəsi Əlavə Kredit: 7 Addım
Avtomatlaşdırılmış EKQ- BME 305 Final Layihəsi Əlavə Kredit: Ürək döyüntüsünün istehsal etdiyi elektrik siqnallarını ölçmək üçün elektrokardioqram (EKQ və ya EKQ) istifadə olunur və ürək-damar xəstəliklərinin diaqnozu və proqnozunda böyük rol oynayır. EKQ -dən əldə edilən bəzi məlumatlar ritmləri ehtiva edir
Robot Layihəsi UTK 2017: 3 addım
Robot Layihəsi UTK 2017: Missiya: Mühəndislər qrupumuz, innovativ İnsan Yardımçı Mars Rover-in inkişaf etdirilməsi üçün açıq mənbəli texnologiya inkişafı üçün Kommersiya Təşkilatı olmayan Froogle tərəfindən işə götürüldü. bir seriyanı icra etmək üçün kodladığımız bir otaqdır
Roomba MATLAB Layihəsi: 5 addım
Roomba MATLAB Layihəsi: NASA -nın Mars gezici üçün hazırkı planı, bir məlumat toplayıcısı olmaq və Marsın ətrafında gəzmək, Yerə gətirmək üçün torpaq nümunələri toplamaqdır ki, elm adamları əvvəlki həyat formalarının olub olmadığını görə bilsinlər. planet. Əlavə
UTK EF 230 MarsRoomba Layihəsi Payız 2018: 5 Addım
UTK EF 230 MarsRoomba Layihəsi Payız 2018: Hal -hazırda, Mars gəzənləri planetin mikrob həyatı 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, ilk növbədə fotoşəkil və torpaq təhlili vasitələrindən istifadə edir
Roomba Layihəsi: 5 Addım (Şəkillərlə birlikdə)
Roomba Layihəsi: Bu təlimat, Cənubi Florida Universitetindəki Makecourse (www.makecourse.com) layihəsi tələbinin yerinə yetirilməsi üçün yaradılmışdır