Mündəricat:

Robotexnik: 8 addım
Robotexnik: 8 addım

Video: Robotexnik: 8 addım

Video: Robotexnik: 8 addım
Video: Robototexnika darsida o'zi yurar mashina yasadik 2024, Noyabr
Anonim
Robotexnik
Robotexnik

Bir anlığa Marsa enən astronavtlardan biri olduğunuzu düşünün. Milyonlarla işiniz, götürəcəyiniz nümunələr, aparmaq üçün təcrübələr, toplanacaq məlumatlar var, ancaq gündə bir və ya iki dəfə yaşadığınız və çalışdığınız yaşayış yeri və/və ya araşdırma modullarını yoxlamaq üçün qaçmalısınız. Bunun üçün kimsə şeyin yaxşı vəziyyətdə olmasını, minlərlə parça və hissənin işlək vəziyyətdə olmasını təmin etməlidir. Ancaq bu vəzifələrdən bəzilərini azad etmək üçün avtomatik bir köməkçi olsaydı. Hər şeyin yerində, işlək və təhlükəsiz olduğundan əmin olmaq üçün modulların daxilində hərəkət edə bilən kiçik bir robot olsaydı nə olardı?

Xilasetmə üçün Robo-Texnik.

Əslində, bu kod yerdəki açıq rəngli bir yolu izlədiyi üçün Robo-Texniki idarə edir. Yolda bir qovşağı və ya döngəni tapana qədər bu yolu izləyəcək, bu da Robotexnikin hara gedəcəyi ilə bağlı qərar verməsinə imkan verən şəkil işlənməsi üçün bir fotoşəkil çəkilməsini istəyəcək. İşıq zərbəsi və qabar sensorlar Robo-Texniki zədələnmədən qorumaq üçün işləyir və qabar sensorlar diaqnostik fotoşəkilin nə vaxt çəkiləcəyini nəzarət edir. Robo-Technician, hamısı birlikdə, Mar'ın modullarını yaxınlaşdırmaq üçün hazırlanmışdır, astronavtların vaxtını yoxlayaraq əsas vəzifəni yerinə yetirərkən, yalnız səhv bir şey tapdıqda insanlara müraciət etməyi tələb edir.

Yenə xəbərdarlıq olaraq, bu iş davam edir. Kod mövcud olduğu kimi işləyir, ancaq çox sayda üst -üstə düşən proqramlar olduğundan, hıçqırıqlar var. Ayrıca, bu layihənin həqiqi bir Mars missiyasında çalışması üçün bu məqsədlə bir robotun qurulması lazım olacaq, buna görə də yenə də bunun "konsepsiyanın sübutu" quruluşu olduğunu düşünürəm.

Bunu işə salmaq üçün bir neçə şey lazımdır. Bahalı bir proqrama, bu proqram üçün dəstək paketlərinə və kodlaşdırmada kiçik bir məlumata ehtiyacınız olacaq. Tələbə olduğum üçün və bir neçə mərtəbə kodu verilmişdi (moruq pi üçün), konfiqurasiya haqqında xüsusi danışmayacağam. Bu baza kodu üçün bütün bağlantıları aşağıda tapa bilərsiniz. Material siyahısına keçək.

Avadanlıq

  • Raspberry Pi (3 -cü versiyadan istifadə etdik)
  • iRobot ®
  • Raspberry Pi-ni Robo-Texnikə bağlı saxlamaq üçün bir növ tutma cihazı
  • Raspberry Pi kamera (nə qədər yaxşı olursa olsun, yaxşı avtomatik fokus və görüntü qətnaməsi var)
  • kameranı Robo-Technician-da irəli baxan vəziyyətdə saxlamaq üçün bir növ dayaq və ya çanta
  • zəminə etibarlı şəkildə yapışdırılmış ağ (və ya çox açıq rəngli) bir zolaq kimi istifadə ediləcək bir material. Ön iki uçurum sensoru arasındakı boşluqdan biraz daha geniş olmalıdır.
  • Çox böyük mətni olan 4 işarə (ÜZRƏ, SAĞ, GERİ və SOL sözləri yazılmış)
  • Rəngli kağız vərəqləri (ən azı üç və tercihen qırmızı, yaşıl və mavi)

Proqram təminatı

  • Matlab (2018a və 2017b həm istifadə edilib, həm də çox az fərq var)
  • Matlab üçün Raspberry Pi dəstək paketi
  • Matlab -a qoşulmaq üçün Raspberry Pi kodu (aşağıda göstərilən mənbə koduna keçid)
  • Matlab üçün Şəkil İşləmə Alət qutusu (alət qutusu olmadan bu layihəni çox edə bilməzsiniz)
  • İSTEĞMƏLİ: Telefonunuzda Matlab Mobile quraşdırılıb, bunu daha sonra izah edəcəyəm

Addım 1: Avadanlıq qurulması

ef.engr.utk.edu/ef230-2018-08/projects/roo…

Bu, iRobot® -un əsas təlimatla birlikdə Matlab ilə əlaqə qura biləcəyini təmin etmək üçün əsas kodun keçididir. Daha əvvəl dediyim kimi, bu hissəni əhatə etməyəcəyəm, çünki dərslik çox yaxşı qurulmuşdur. Qeyd edim ki, linkdəki addımları izlədikdən sonra daxil olan məlumatlara baxmaq üçün Matlabın "doc" əmrindən istifadə edə bilərsiniz. Xüsusilə:

sənəd otağı

Və daha çox vacib bir məqam.

Faylları yuxarıdakı linkdən yüklədiyiniz zaman, onları yuxarıda təsvir etdiyim qovluğa yerləşdirin, çünki Matlab istifadəçi tərəfindən yaradılmış faylların cari iş qovluğunda olmasını tələb edir.

Yoldan çıxaraq koda keçək.

Addım 2: Bütün Sensorları Tapın

Bütün Sensorların Tapılması
Bütün Sensorların Tapılması
Bütün Sensorların Tapılması
Bütün Sensorların Tapılması

Bir saniyə ayırın və iRobot® -u yoxlayın. Bunların harada olduğunu bilmək yaxşıdır, buna görə də Robotexnikin əldə etdiyi məlumatlar haqqında bir təsəvvürünüz var və quracağınız yolu izləmək əvəzinə şeyin niyə dairələrdə fırlandığını anlaya biləcəksiniz. ya ola bilməzdi). Açıq şəkildə ön tərəfdəki böyük fiziki zərbə sensorunu görəcəksiniz. Uçurum sensorlarını görmək bir az daha çətindir, onu çevirərək ön kənarına yaxın olan dörd şəffaf plastik pəncərəni axtarmalısınız. İşıq zərbəsi sensörləri daha da gizlidir, amma indiyə qədər parlaq qara bandda canlı zərbə sensoru çubuğunun ön tərəfində olan iRobot® -un ön tərəfində qaçdığını söyləmək kifayətdir.

Təkər düşmə sensorları var, lakin bu layihədə istifadə edilmir, buna görə də sensorların sınağına keçəcəyik.

Addım 3: Parametrləri təyin etmək üçün test edin

Parametrləri təyin etmək üçün test
Parametrləri təyin etmək üçün test

Robo-Texniki işini yerinə yetirməyə göndərməzdən əvvəl onun xüsusi xüsusiyyətlərini və sensor aralığını anlamalıyıq. Hər bir iRobot® bir az fərqli olduğundan və robotun ömrü boyu dəyişdiyindən, sensorların işləyəcəyi sahələri necə oxuduğunu anlamalıyıq. Bunun ən asan yolu açıq rəngli bir yol qurmaqdır (Robo-Texnikin işləyəcəyi səthdə ağ rəngli kağız zolaqları istifadə etdim, amma açıq rəngli hər şey edəcək).

Matlab -ı işə salın və yeni bir skript açın. Skriptini ERKƏN TƏSVİR ETDİYİM QADIRDA QEYD edin və istədiyinizə ad verin (baxmayaraq ki, qısa saxlamağa çalışın, çünki bu faylın adı funksiya adı olacaq). Robotu yandırın və komanda pəncərəsinə əmrləri yazaraq dərsdən Roomba dəyişən quruluşundan istifadə edin.

Raspberry Pi -nin iRobot® -a qoşulduğundan və kompüterinizin eyni internet bağlantısına qoşulduğundan əmin olun. Matlabın niyə bağlanmayacağını anlamağa çalışaraq saçlarınızı çıxarmaq üçün daha az vaxt sərf edəcəksiniz

r = roomba (qurduğunuz nömrə)

Bu vəziyyətdə "r" dəyişəninə ehtiyac yoxdur, istədiyinizə zəng edə bilərsiniz, ancaq bir hərf dəyişənindən istifadə etmək həyatı asanlaşdırır.

Yol qurulduqdan və Roomba uğurla birləşdirildikdən sonra, gələcək Robo-Texniki bir və ya iki uçurum sensörünün yolun üstündə olduğu yerə yerləşdirin. Aydındır ki, digər iki və ya üçü seçdiyiniz səthin üstündədir.

İndi komanda ilə test sensorlarını işə salın:

r.testSensorları

Unutmayın ki, "r." Daha əvvəl təyin etdiyiniz dəyişəndir, buna görə də "r" deyilsə, "r" ni dəyişin. qərar verdiyiniz hər şeyə. Bu, bir ton məlumat olan test sensoru ekranını gətirəcək.

Bu layihə üçün lightBampers, bamperlər və uçurum bölmələrinə diqqət yetirin. Sensorların fərqli səthlərdə necə dəyişdiyini və ya ligthBamper dəyərlərinin dəyişməsi üçün bir obyektin nə qədər yaxın olması lazım olduğunu izləmək üçün Robo-Texniki hərəkət etdirin. Bu rəqəmləri unutmayın (və ya yazın) çünki Parametrlərinizi bir saniyədə təyin etmələri üçün onlara ehtiyac var.

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

Əvvəlcə bir funksiya quracaqsınız. Buna "yol" dedim, amma yenə də ad lazım deyil, amma bundan sonra onu "yol" adlandıracağam.

Kodun yuxarı hissəsi bəzi istifadəçi giriş seçimlərini qurmaqdır. İn listdlg -də istifadə ediləcək bəzi siyahılar qurur və sonra bir siyahı dialoq qutusu açır. Bu, istifadəçiyə hansı yolu izləmək istədiyini seçməyə imkan verir ki, bu da daha sonra işə düşür.

list = {'Qırmızı', 'Mavi', 'Yaşıl'}

problist = {'Təsadüfi, Şəkli Saxla', 'Komponent Yerində deyil, Şəkli Saxla', 'Gözlənilir, Davam et'} pathcolor = listdlg ('PromptString', 'Bir Yol Rəngi Seçin',… 'SelectionMode', 'single', 'ListString', list) prob = 0; sürücü = ;

"Problem" və "driv" dəyişənlərinin burada elan edilməsi lazımdır, çünki onlar funksiyanın əsas döngəsinin içərisində işlədiləcəklər, amma yenə də bu dəyişənlərdən hər hansı birinin adını dəyişdirmək və ya siyahı seçimlərini dəyişdirmək istəyirsinizsə, hər şey yaxşıdır. kodun qalan hissəsində ardıcılsınız.

Addım 5: Zaman Döngəsinin Üstü: Fiziki Zərbə Sensorları

Zaman döngəsinin yuxarı hissəsində fiziki zərbə sensoru məntiqi var. Əsasən, Robo-Technician dayandığı bir şeylə qarşılaşdıqda (və ya öndəki qabar sensoru üçün 0,1 metr geri çəkilir), sonra şəkil çəkmək üçün özünü yerləşdirir. Əvvəlcə sürəti və mövqe nəzarət hissəsini əhatə edək.

Əvvəlki addımlarda Robo-Technician üzərindəki bütün sensorları sınamısınızsa, qabar sensörlərin məntiq dəyərinə (0 və ya 1) malik olduğunu, sensorun normal, basılmamış mövqeyini təmsil etdiyini biləcəksiniz. Kod üçün bunu unutmayın.

əsl %ana isə döngə %tampon məlumatı alır S = r.getBampers S. sol ~ = 0 r.stop elseif S.right ~ = 0 r.stop elseif S.front ~ = 0 r.stop end

Bu, "bir şey vurarsa, dayandır" hissəsidir. Sensorlar bir toqquşma aşkar edərsə, o zaman bir şəkil çəkmək üçün Robotexnikin mövqeyini yenidən tənzimləyən kodun növbəti hissəsinə keçir.

əgər S.sol ~ = 0 %, əgər döngə bamper məlumatı alarsa və kameranı fotoşəkil üçün hizalasa PromptString ',' Gözlənilməz bir maneə tapıldı, zəhmət olmasa müəyyən et '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) pause (0.5) img = r. getImage image (img) prob = listdlg ('PromptString', 'Gözlənilməz bir maneə tapıldı, zəhmət olmasa müəyyən et'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~ = 0 r.moveDistance (- 0.1) pause (0.5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Gözlənilməz bir maneə tapıldı, zəhmət olmasa müəyyən et'…, 'SelectionMode', 'single', 'ListString', problist) sonu

Əsasən, şəkil çəkildikdən sonra üç variantdan ibarət başqa bir dialoq qutusu görünəcək. İlk iki seçim fotoşəkili daha sonra əhatə edəcəyim müəyyən bir qovluğa saxlayır, üçüncü seçim isə sadəcə dialoq qutusunu bağlayır və döngədə davam edir. Seçimləri xatırlaya bilmirsinizsə, əvvəlki addıma nəzər salın.

İndi qabar sensoru ilə foto qənaət hissəsinin arasına bir kod bölməsi qoydum. Bu, LightBumper dəyərlərini götürür və sürücünün sürətini saniyədə 0,025 metr (çox yavaş) olaraq təyin edir, bu əslində lazım deyil, amma Robo-Texnikin şeylərə vurmasını və nəticədə fiziki zərbə sensorlarını köhnəlməsini azaldır.

L = r.getLightBampers L. sol> 100 || L.leftFront> 100 || L.rightFront> 100 || L. sağ> 100 driv = 0.025 r.setDriveVelocity (0.025) başqa driv = 0.1 son

Bu, əvvəllər müşahidə etdiyiniz (və inşallah yazdığınız) dəyərlərin işə düşdüyü hissə olardı

"L. (sensorun tərəfi və istiqaməti)> 100", müşahidə etdiyim dəyərlərə əsaslanıb, buna görə də müşahidələriniz fərqlidirsə, bu rəqəmləri dəyişdirin. Fikir budur ki, Robo-Texniki qarşısında bir neçə santimetrlik bir şey hiss edərsə, yavaşlayacaq, hətta lazımsızdır.

Növbəti hissə fotoşəkillərin daha sonra saxlanılacağı yerdir.

prob dialoqunda birinci və ya ikinci seçim seçilmişsə %, prob == 1 %olduqda şəkil saxlayır, əgər loop fotoşəkil üçün fayl məlumatı qurarsa, t = saat işarəsi ilə yazar; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); qovluq = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (qovluq, əsas ad); imwrite (img, fullFileName) yaxın Şəkil 1 fasilə (2) elseif prob == 2 t = saat; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); qovluq = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (qovluq, əsas ad); imwrite (img, fullFileName) yaxın Şəkil 1 fasilə (2) sonu

Fotoşəkillərin saxlandığı bütün fayl adları və yerlər isteğe bağlıdır. Giriş addımında yaratdığım roomba qovluğunun içərisində olan bir qovluq seçdim, ancaq seçdiyiniz hər yerdə ola bilər. Həm də fotoşəkillər zaman damgası ilə qeyd olunur, lakin bu xüsusilə vacib deyil (baxmayaraq ki, Mars missiyası üçün hipotetik olaraq faydalı olardı).

Fiziki çarpma sensörləri ilə uçurum sensörlerine və izləyən yola keçə bilərik.

Addım 6: Yolu izləyin

Uçurum sensorlarının kodu iki ön və iki yan sensor dəyərlərinin dəyərlərini müqayisə etmək üçün qurulmuşdur. Bu dəyərləri (ehtimal ki) müşahidə etdiyiniz dəyərlərə əsaslanaraq dəyişdirməlisiniz. Yəqin ki, bir neçə testdən sonra bu dəyərləri düzəltməlisiniz və onları ətrafdakı işığa, günün vaxtına (test sahəsinin nə qədər yaxşı işıqlandığına görə) və ya sensor pəncərələrin çirkli olmasına görə dəyişdirməlisiniz.

Uçurum sensoru koduna çatmadan əvvəl, Matlab -dan lazımsız məlumatların bir hissəsini silmək üçün daxil etdiyim qısa bir kod seqmenti var. Bu hissəyə ehtiyac yoxdur, amma proqramı işə salmaq üçün lazım olan yaddaşı azaltmaq üçün istifadə etdim.

clear img clear t clear basename clear fullFileName clear folder

Növbəti kod seqmenti layihənin ətidir. Robo-Texnikin yerə qoyulmuş açıq rəngli yolu izləməsinə imkan verir. Bir sözlə, özünü idarə etməyə çalışır, belə ki, öndəki iki uçurum sensoru, müşahidə etdiyiniz dəyərlərə əsaslanaraq eşikin üstündədir və proqramın görüntü işləmə addımlarına bir az sonra başlamasına imkan verir.

C = r.getCliffSensors %əgər loop bir rəng zolağını (ağ) izləyirsə C.leftFront> 2000 &&CrightFront> 2000 %düz yol bələdçisi r.setDriveVelocity (driv) elseif C.leftFront robot çox uzağa gedərsə 2000 %sağa dönər sol r.turnAngle (-2.5) başqa C.leftFront> 2000 && C.rightFront <2000%robot çox sağa gedirsə r.turnAngle (2.5) başqa C. solFront <2000 &&rrightfront 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 img = r.getImage end %, C.solda> 2800 &&C sağda <2800 r.turnAngle (2.5) olarsa yolda əyilmə olub olmadığını yoxlayır. C. sol 2800 r.turnAngle (- 2.5) yol görüntüsünü tanıma disp ("GETTING IMAGE") ucu ucu üçün %yer tutucu

Unutmayın ki, seçdiyim dəyişən adlar isteğe bağlıdır, amma yenə də düşünürəm ki, mümkün olduqda tək hərfli dəyişənlərdən istifadə etmək həyatı asanlaşdırır

Kodun orta hissəsini izah etmək üçün, iki ön sensör yolun kənarından qaçdıqda (bir kəsişməyə gəldikdə və ya yolun sonuna çatanda) qarşısında bir şey olub olmadığını görür.. Bunun işləməsi üçün yolun sonunda və ya hər hansı bir kəsişmədə yerə bir obyekt qoymalısınız.

Şəkil çəkildikdən sonra nə edəcəyini anlamaq üçün görüntü tanıma istifadə edir. Kodun bu hissəsində də yer sahibi var:

yol görüntüsünün tanınması üçün %yer tutucu ('ŞƏKİL ALINIR')

Növbəti mərhələdə baş verən mətn və rəng işlənməsi haqqında xüsusi danışmaq istədiyim üçün bu anı istifadə etdim.

Addım 7: Şəkil emalı

Şəkil emalının iki hissəsi var. Birincisi, mətn tanınmasına davam edib -etməyəcəyinizə qərar vermək üçün şəkildəki rəng intensivliyini hesablayan rəng tanımadır. Rəng hesablamaları əvvəlində ilk dialoq qutusunda hansı seçimin edildiyinə əsaslanır (qırmızı, mavi, yaşıl rənglərdən istifadə etdim, ancaq rəng intensivliyi üçün orta dəyərlər tanına bildiyi müddətcə istədiyiniz rəngləri seçə bilərsiniz. Raspberry Pi kamerası).

img = r.getImage img = imcrop (img, [0 30 512 354]) imgb = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) qırmızı = orta (orta (imgb (:,,:, 1))); g = orta (orta (imgb (:,,:, 2)))); b = orta (orta (imgb (:,,: 3))));

Bu intensivliyin yoxlanılmasıdır. Bu, növbəti seqmentdə nə etmək istədiyinə qərar vermək üçün istifadə ediləcək.

əgər qırmızı> g && red> b if pathcolor == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img) əgər R. Sözləri {1} == RESİM || R. Sözləri {2} == RESİM || R. Sözləri {3} == RESİM t = saat; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); qovluq = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (qovluq, əsas ad); imwrite (img, fullFileName) fasilə (2) elseif R. Words {1} == SAĞ || R. Sözləri {2} == SAĞ || R. Sözləri {3} == SAĞ r.turnAngle (-75) başqa R. Sözləri {1} == SOL || R. Sözləri {2} == SOL || R. Sözləri {3} == SOL r.turnAngle (75) başqa R. sözlər {1} == GERİ || R. Sözləri {2} == GERİ || R. Sözləri {3} == BACK r.turnAngle (110) son başqa r.turnAngle (110) son ucu

Bu seqment, ilk dialoq qutusunda seçilmiş rəngin kameranın gördüyü rənglə uyğun olub -olmamasına qərar verir. Bunu edərsə, mətn tanıma funksiyasını yerinə yetirir. Hansı sözün (GÖRÜNTÜ, GERİ, SAĞ və SOL) göründüyünü və sonra ya döndüyünü (sağa və sola), ətrafa (arxa tərəfə) döndüyünü və ya şəkil çəkdiyini və əvvəlki kimi eyni şəkildə saxladığını görmək görünür.

Fərqli rənglər üçün kodun yalnız bir hissəsini verdim

Kodun mavi və yaşıl rəngləri tanımasına icazə vermək üçün sadəcə kodu kopyalayın və seqmentin yuxarısındakı məntiq yoxlamasını dəyişdirin və "pathcolor == (sayı)" ı yuxarı dialoq qutusundakı rəng seçimlərinə uyğun olaraq təyin edin. kodu göstərildiyi kimi mavi 2, yaşıl 3 olardı).

Addım 8: Hazır məhsul

Hazır məhsul
Hazır məhsul

İndi Robo-Texnik, Marsın missiya modullarını yaxınlaşdırmalı və bir şey yerində olmadıqda astronavtlara hesabat verməlidir.

Unutmayın ki, uçurum sensoru və lightBumper -in bütün dəyərlərini müşahidə etdiyiniz dəyərlərə dəyişdirmək lazımdır. Həm də təcrübəmdən bu layihəni tünd rəngli bir zəmində sınamağın daha yaxşı olduğunu gördüm və əgər bu mərtəbə yansıtıcı deyilsə daha yaxşıdır. Bu, yol və mərtəbə arasındakı artan kontrastı əldə edir ki, bu da Robo-Texnikin onu düzgün şəkildə yerinə yetirəcəyini ehtimal edir.

Ümid edirik ki, Mars missiyası üçün kiçik bir köməkçi qurmaqdan zövq alırsınız və bina tikməkdən zövq alırsınız.

Tövsiyə: