Mündəricat:

IRobot Create-Mars Expedition Rover Mark I: 4 Addım
IRobot Create-Mars Expedition Rover Mark I: 4 Addım

Video: IRobot Create-Mars Expedition Rover Mark I: 4 Addım

Video: IRobot Create-Mars Expedition Rover Mark I: 4 Addım
Video: Посадка Марсохода Perseverance- История Изнутри 2024, Iyul
Anonim
IRobot Create-Mars Ekspedisiyası Rover Mark I
IRobot Create-Mars Ekspedisiyası Rover Mark I

Bu təlimat, MatLab kodlaşdırma istifadə edərək iRobot Create qurmağı öyrədəcək. Robotunuz, şəkilləri fərqləndirərək mineralları axtara biləcək, uçurum sensörleri istifadə edərək ensiz ərazini manevr edəcək və canlı yem vasitəsilə əllə idarə oluna biləcək.

Addım 1: Təchizat

Təchizat
Təchizat

Bu layihə üçün Roomba robot tozsoranının proqramlaşdırıla bilən bir iRobot Create -ə ehtiyacınız olacaq. Robot, bu layihə üçün lazım olan bütün sensorlar ilə təchiz olunmuşdur, xüsusən də qabar sensorlar, uçurum sensorlar və "İşıq Bump" sensorlar. Simsiz ünsiyyət, canlı proqramlaşdırma və canlı video yayımı üçün istifadə olunan bir Raspberry Pi və video kameraya da ehtiyacınız olacaq. Nəhayət, Raspberry Pi və kamera üçün 3D çaplı montaja ehtiyacınız olacaq.

Addım 2: İstədiyiniz nəticəni təmin etmək üçün kodlaşdırma hazırlayın

İstədiyiniz nəticəni təmin etmək üçün kodlaşdırma inkişaf etdirin
İstədiyiniz nəticəni təmin etmək üçün kodlaşdırma inkişaf etdirin

Roombanı bağladıqdan sonra, istədiyiniz girişlərdən sonra istədiyiniz nəticəni verəcək bir Matlab kodu yaratmalısınız.

Kodu burada görmək olar:

Roomba Layihəsi Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Problemin Təsviri: Marsın araşdırılması/məskunlaşması zamanı insanlara kömək etmək üçün bir rover yaradın. Həll üsulu: üzvi maddələri yoxlamaq üçün işıq tamponları, uçurum sensorlar və kamera istifadə edərək üzvi (yaşıl) maddə axtarın. Roverin tampon, uçurum sensoru və təkər hündürlüyü sensoru istifadə edərək kobud ərazi ilə hərəkət etməsinə icazə verin. İnsanların roveri etibarlı bir məsafədən idarə etmələrini təmin edin və mineralları əl ilə axtarın. choices = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Dialoq menyusundakı üç seçim Ayar = menyu ('', seçimlər) əgər Ayar> 0 %Seçilmiş seçim istifadəçidən təsdiq seçimləri istəsə2 = {'Bəli', 'Xeyr'} %"Bəli" və ya "Xeyr" üçün hüceyrə massivi yaradın "seçim Confirm = menyu (['Seçdiyiniz"' seçimlər {Setting} '"rejimi.'], seçimlər2) %Confirm əgər istifadəçi parametr seçimini təsdiq edin == 1 Setting == 1 %" LIFE "ayarının seçilmiş olub olmadığını yoxlayın i = 0 ikən i == 0 r.setLEDDigits (num2str ('LIFE')) %i = 1 üçün LED -də 'LIFE' göstərin: 100 r.setDriveVelocity (0.05) %Roombanı 0.05 m/sy = r.getCliffSensors -da irəli aparın "Y" hüceyrə quruluşunda uçurum sensoru dəyərlərini əldə edin və saxlayın l = r.getLightBampers %l.left> 100 %olarsa "f" strukturunda işıq zərbəsi dəyərlərini əldə edin və saxlayın r.moveDistance (-0.05)) %Roombanı 0,05 metr geri çəkin r.turnAngle (20) %Roomba 20 dərəcə döndərin CCW img = r.getImage %Roomba rect üzərindəki rasberry pasta kamerasından şəkil alın = [100 0 150 150]; img = imcrop (img, rect) %kəsmə görüntüsü mərkəzə diqqət yetirmək üçün qırmızı = orta (orta (img (:,,, 1))) %orta qırmızı intensivliyi yaşıl = orta (orta (img (:,:, 2)))) %orta yaşıl intensivliyi mavi = orta (orta (img (:,:, 3)))) %orta mavi intensivliyi yaşıl> qırmızı && yaşıl> mavi %Bitkinin şəkildə olub olmadığını yoxla d = msgbox (['Həyat tapıldı! ']); "Həyat tapıldı!" Deyən bir mesaj qutusu göstərin. gözlə (d); end elseif l.leftFront> 100 %Check sol/ön işıq tamponu örtülmüşdür r.moveDistance (-0.05) %roombanı geriyə çəkin 0.05 metr img = r.getImage %Roomberry üzərindəki rasberry pasta kamerasından şəkil alın və dəyişkən 'img-də saxlayın 'rect = [100 0 150 150]; img = imcrop (img, rect) %kəsmə görüntüsü mərkəzə diqqət yetirmək üçün qırmızı = orta (orta (img (:,,, 1))) %orta qırmızı intensivliyi yaşıl = orta (orta (img (:,:, 2)))) %orta yaşıl intensivliyi mavi = ortalaması (orta (img (:,:, 3)))) %orta mavi intensivliyi yaşıl olduqda> qırmızı && yaşıl> mavi %Bitkinin şəkildə olub olmadığını yoxla d = msgbox (['Həyat tapıldı! ']); "Həyat tapıldı!" Deyən bir mesaj qutusu göstərin. gözlə (d); end elseif l.leftCenter> 100 %sol/orta işıq tamponunun örtülü olub olmadığını yoxlayın r.moveDistance (-0.05) %roomba-nı geri çəkin 0.05 metr img = r.getImage %Roomberry-də rasberry pasta kamerasından şəkil alın və dəyişkən 'img-də saxlayın 'rect = [100 0 150 150]; img = imcrop (img, rect) %məhsul görüntüsü mərkəzə diqqət yetirmək üçün qırmızı = orta (ortalama (img (:,,, 1))) %orta qırmızı intensivliyi yaşıl = orta (orta (img (:,:, 2)))) %orta yaşıl intensivliyi mavi = orta (orta (img (:,:, 3)))) %orta mavi intensivliyi yaşıl> qırmızı && yaşıl> mavi %Bitkinin şəkildə olub olmadığını yoxla d = msgbox (['Həyat tapıldı! ']); "Həyat tapıldı!" Deyən bir mesaj qutusu göstərin. gözlə (d); end elseif l.rightCenter> 100 %sağ/orta işıq tamponunun örtülü olub olmadığını yoxlayın r.moveDistance (-0.05) %roomba-nı 0.05 metr geriyə çəkin img = r.getImage %Roomberdəki rasberry pasta kamerasından şəkil alın və dəyişkən 'img-də saxlayın 'rect = [100 0 150 150]; img = imcrop (img, rect) %kəsmə görüntüsü mərkəzə diqqət yetirmək üçün qırmızı = orta (orta (img (:,,, 1))) %orta qırmızı intensivliyi yaşıl = orta (orta (img (:,:, 2)))) %orta yaşıl intensivliyi mavi = orta (orta (img (:,:, 3)))) %orta mavi intensivliyi yaşıl> qırmızı && yaşıl> mavi %Bitkinin şəkildə olub olmadığını yoxla d = msgbox (['Həyat tapıldı! ']); "Həyat tapıldı!" Deyən bir mesaj qutusu göstərin. gözlə (d); end elseif l.rightFront> 100 %sağ/ön işıq tamponunun örtülü olub-olmadığını yoxlayın r.moveDistance (-0.05) %roomba-nı 0.05 metr geriyə çəkin img = r.getImage %Roomberry-də rasberry pasta kamerasından şəkil alın və dəyişkən 'img-də saxlayın 'rect = [100 0 150 150]; img = imcrop (img, rect) %kəsmə görüntüsü mərkəzə diqqət yetirmək üçün qırmızı = orta (orta (img (:,,, 1))) %orta qırmızı intensivliyi yaşıl = orta (orta (img (:,:, 2)))) %orta yaşıl intensivliyi mavi = orta (orta (img (:,:, 3)))) %orta mavi intensivliyi yaşıl> qırmızı && yaşıl> mavi %Bitkinin şəkildə olub olmadığını yoxla d = msgbox (['Həyat tapıldı! ']); "Həyat tapıldı!" Deyən bir mesaj qutusu göstərin. gözlə (d); sağ başqa> 100 %sağ işıq tamponunun örtülü olub olmadığını yoxlayın r.moveDistance (-0.05) %Roombanı geriyə 0.05 metr r.turnAngle (-20) %Roomba 20 dərəcə CW döndərin img = r.getImage %Görüntünü əldə edin rasber pasta kamerası Roomba və mağazada 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %məhsul görüntüsü mərkəzə diqqət yetirmək üçün qırmızı = orta (ortalama (img (:,,, 1))) %orta qırmızı intensivliyi yaşıl = orta (orta (img (:,:, 2)))) %orta yaşıl intensivliyi mavi = orta (orta (img (:,:, 3)))) %orta mavi intensivliyi yaşıl> qırmızı && yaşıl> mavi %Bitkinin şəkildə olub olmadığını yoxla d = msgbox (['Həyat tapıldı! ']); "Həyat tapıldı!" Deyən bir mesaj qutusu göstərin. gözlə (d); sonu başqa bir halda y.leftFront <1500 %Roombanın sol/ön hissəsinin uçurumdan kənarda olub olmadığını yoxlayın r.moveDistance (-0.1, 0.05) %0.05 m/s sürətində roombanı 0,1 metr geri çəkin r.turnAngle (-5) %roomba 5 döndürün dərəcə CW başqa y.sağFon <1500 %Roombanın sağ/ön hissəsinin uçurumdan kənarda olub olmadığını yoxlayın r.moveDistance (-0.1, 0.05) %Roombanı 0.05 m/s sürətlə 0.1 metr geriyə çəkin r.turnAngle (5) %roomba 5 döndürün dərəcə CCW başqa halda y.sol <1000 %Roombanın sol tərəfinin uçurumdan kənarda olub olmadığını yoxlayın r Məsafə (-0.05, 0.05) %Roombanı 0.05 m/s sürətlə 0.05 metr geri hərəkət etdirin r.turnAngle (-10) %Roomba 10 dərəcə döndürün CW elseif y.right0 %Continue == 1 i = 0 %düyməsinə basıldığı təqdirdə işə salın Davam == 1 i = 0 %Həyat axtarışına davam edin i = 1 %LIFE rejiminin sonu end end elseif Ayar == 2 %"ROUGH TERRAIN" ayarının seçilmiş olub olmadığını yoxlayın i = 0 ikən i == 0 r.setLEDDigits (num2str ('RGH')) %LED Ekranında "Kobud" i = 1: 1000 r.setDriveVelocity (0.05) %Roomba sürücü sürətini 0.05 m/sx = r.getBampers %"x" y = r.get strukturunda tampon sensoru dəyərlərini əldə edin və saxlayın. CliffSensors %"y" strukturunda uçurum sensoru dəyərlərini əldə edin və saxlayın x.right == 1 %Sağ tamponun basıldığını yoxlayın r.turnAngle (10) %Otağı 10 dərəcə döndərin CCF başqa x.sola == 1 %Sola yoxlayın bamperə basıldı r.turnAngle (-10) %Otaq dairəsini 10 dərəcə CW döndürmək başqa x.front == 1 %Ön bamperə basıldığını yoxlayın r.turnAngle (20) %Otaq hissəsini 20 dərəcə CCW başqa istiqamətdə döndərin x.rightWheelDrop == 1 % Sağ təkərin düşdüyünü yoxlayın r.turnAngle (-20) %Otağı 20 dərəcə CW döndərin, əgər başqa bir halda x.leftWheelDrop == 1 %sol təkərin aşağı düşdüyünü yoxlayın r.turnAngle (20) %Otağı 20 dərəcə CCW başqa istiqamətdə döndərin y.leftFront < 1500 %Roomba'nın sol ön hissəsinin uçurumdan kənarda olub olmadığını yoxlayın r.moveDistance (-0.05, 0.05) %Roombanı 0.05 m/s sürətlə 0.05 metr geriyə çevirin. 1500 %Roomba'nın sağ ön hissəsinin uçurumdan kənarda olub olmadığını yoxlayın r.moveDistance (-0.05, 0.05) %Roombanı 0.05 m/s sürətlə 0.05 metr geri hərəkət etdirin. Açı (5) %Roombanı 5 dərəcə CCW başqa istiqamətdə döndərin <sol <1000 Sol hissənin o olub olmadığını yoxlayın f roomba uçurum xaricindədir r.moveDistance (-0.05, 0.05)%0.05 m/s sürətlə otaq çubuğunu 0.05 metr geri çəkin r.turnAngle (-10)%Roomba 10 dərəcə CW başqa bir halda y. sağa döndərin Davam == 1 i = 0 Kobud əraziyə davam başqa i = 1 %Kobud ərazi sonu sonu başqa %Əl ilə rejimi i = 0 r.setLEDDigits (num2str ('KULLANICI')) %LED Ekranda 'KULLANICI' göstərin d = msgbox (['Ok Tuşları - Hərəkət; S - Roveri dayandırın; ESC - Son İstifadəçi Nəzarəti; A - Resurs tapın]); gözlə (d); i == 0 r.showCamera %ayrı bir pəncərədə rasberry pie kamera canlı yemini aç D = getkey (1) %İstifadəçi tərəfindən basıldıqda düyməni al, D == 30 %olarsa ASCII dəyərini D dəyişən olaraq saxla basıldı r.setDriveVelocity (0.1) %0,2 m/s -də roomba irəli göndərin başqa D == 28 %"sol" oxunun basıldığını yoxlayın r.setDriveVelocity (0) %Roombanın irəli və ya geriyə hərəkət etməsini dayandırın r.turnAngle (15), 0,05) %Roomba-nı 45 dərəcə CCW-ni 0,05 m/s-də döndərin başqa D == 31 %"aşağı" oxunun basıldığını yoxlayın r.setDriveVelocity (-0.1) %Roombanı 0.2 m/s-də geriyə çəkin, əks halda D == 29 % "Sağ" oxunun basıldığını yoxlayın r.setDriveVelocity (0) %Roombanın irəli və ya geri çəkilməsini dayandırın r.turnAngle (-15, 0.05) %Roomba-nı 45 dərəcə CW-də 0,05 m/s-də döndərin əgər D == 27 % "esc" (escape) düyməsinə basıldı i = 1 %loopdan çıxmaq üçün "i" dəyişəninin dəyərini dəyişdirin d = msgbox ('İstifadəçi Nəzarəti "ndən çıxırıq) %İstifadəçiyə əl rejimindən çıxıldığını bildirin, əgər başqa D == 115 %"s" düyməsinə basıldığını yoxlayın r.setDriveVelocity (0) %Roomba -nı dayandırın irəli və ya geriyə gedən başqa D == 97 %"a" ya basıldığını yoxlayın image = r.getImage; imwrite (image, 'image.png') W = Təsnif et (şəkil) K == 3 d = msgbox ('Mənbə tapıldı') %K = rejimi (W) %Dördbucaqlı qaynaq gözləmə (d) aşkar edərsə göstər; %İstifadəçinin "d" mesaj qutusunun bağlanmasını gözləyin başqa K == 0 d = msgbox ('Mənbə deyil:(') %Düzbucaqlı qaynaq aşkar edilmədikdə göstərin waitfor (d); %İstifadəçinin mesaj qutusunu bağlamasını gözləyin "d" son başqa d = msgbox ('Etibarlı düymə girişi deyil.') %İstifadəçi "ayarı seçin" menyusunu bağlayarsa gözlədir (d); %İstifadəçinin "d" mesaj qutusunu bağlamasını gözləyin, son gözləmə (d); %Gözləyin istifadəçi mesaj qutusunu bağlamaq üçün "d" bitiş sonu başqa d = msgbox ('Əlvida') %Variantlar sona çatdıqda (d) əlvida deyir;

Addım 3: Test

Test
Test

Kodunuz yazıldıqdan sonra Roomba'ınızı sınamalısınız. Kodunuz düzgün görünsə də, Roombanızın müəyyən etməsini istədiyiniz obyektləri düzgün tanımaq üçün bir çox dəyərlərinizin, xüsusən də rəng və ya forma baxımından dəyişdirilməli olacaq.

Addım 4: Vizual Çıxışlara baxın

Vizual Çıxışlara baxın
Vizual Çıxışlara baxın
Vizual Çıxışlara baxın
Vizual Çıxışlara baxın

Roomba -nızı vizual çıxışlarına əsasən uğurla proqramlaşdırıb -proqramlaşdırmadığınız çox aydın olacaq.

Çıxışlar daxildir:

  • Shape Detection: Roomba'nın düzgün mineralları tapmaq üçün şəkilləri düzgün ayırmaq qabiliyyəti
  • Kobud Arazi Manevrləri: Uçurumlardan və qaranlıq yerlərdən çəkinir
  • Manual rejim: Canlı yem və Roombanı idarə etmək imkanı
  • Şəkillər: Mineralların şəkilləri
  • Həyat tapıldı!: Bitkinizin üzvi həyatı təyin etdiyini bildirən MatLab mətn qutusu.

Dərsliyimizin sonu budur, yeni Mars Expedition Rover -dən zövq alın!

Tövsiyə: