Mündəricat:
- Addım 1: Təchizat
- Addım 2: İstədiyiniz nəticəni təmin etmək üçün kodlaşdırma hazırlayın
- Addım 3: Test
- Addım 4: Vizual Çıxışlara baxın
Video: IRobot Create-Mars Expedition Rover Mark I: 4 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
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
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
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
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
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ə:
Dəmir Adam Mark II Dəbilqəsi: 4 addım
Dəmir Adam Mark II Dəbilqəsi: 2 hissədən ibarət olan, iki hissədən ibarət olan, hər iki tərəfdən AAC və ya digər tərəfdən, mikrokontrolörün arxa cəbhəsi üçün ən yaxşı seçimdir. apert
Mark Tven Evin xəyal qırıqlığı: 5 addım
Mark Twain House Haunting: Mark Twain evinin məşhur yazar tərəfindən təqib edildiyi söylənilir. Bu Təlimat kitabında " kəşf etdim " Tvenin xəyalının həqiqətən də bu tarixi köhnə evi təqib etdiyini şübhə etmədən sübut edən köhnə bir fotoşəkil
Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 addım (şəkillərlə)
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: Giriş PongMate CyberCannon Mark III, xalqa satılacaq ən yeni və ən qabaqcıl pivə pong texnologiyasıdır. Yeni CyberCannon ilə hər kəs pivə stolüstü oyununda ən qorxulu oyunçu ola bilər. Bu necə p
Slave Trigger Flash Mark II: 6 Addım (Şəkillərlə birlikdə)
Slave Trigger Flash Mark II: Bu təlimatda, minimum komponentlərlə həqiqi (optik) bir tətik flaşının necə ediləcəyini izah edəcəyəm. İnternetdə tapa biləcəyiniz bir çox kompleks dizayn var, bu dizayn çox sadədir və işləyir Parlaq və qaranlıq bir mühitdə yaxşı
IRobot Create -in Komanda Modulunu Linux ilə istifadə etmək: 4 addım
IRobot Create -in Linuxda Komanda Modulundan istifadə: iRobot linux istifadəçilərinə komanda modulundan istifadə etmə üsulu təqdim etmədiyi üçün bunu özüm başa düşməli oldum. Qorxma, heç də çətin deyil. Etməyiniz lazım olan hər şey bir neçə skript işlətməkdir. Başlayaq, elə deyilmi?