Мазмұны:

Робот-техник: 8 қадам
Робот-техник: 8 қадам

Бейне: Робот-техник: 8 қадам

Бейне: Робот-техник: 8 қадам
Бейне: Дана найманбаева 2024, Шілде
Anonim
Робот-техник
Робот-техник

Сіз Марсқа қонатын ғарышкерлердің бірі екеніңізді елестетіп көріңіз. Сізде миллиондаған нәрселер бар, алу керек үлгілер, тәжірибелер, жинау үшін деректер бар, бірақ оларды тексеру үшін сіз тұратын және жұмыс істейтін тұрғын үйді және/немесе зерттеу модульдерін күніне бір немесе екі рет айналып өту керек. Қажет болса, біреу заттың жақсы күйде болуын, мыңдаған бөлшектер мен бөлшектердің жұмыс істеп тұрғанын және орнында болуын қамтамасыз етуі керек. Бірақ егер сізде кейбір міндеттерден босататын автоматтандырылған көмекші болса ше? Егер бәрі орнында, жұмыс істейтін және қауіпсіз екеніне көз жеткізу үшін модульдердің ішінде қозғалатын кішкентай робот болса ше?

Робот-техник көмекке келді.

Негізінде бұл код робот-техникті басқарады, өйткені ол жердегі ашық түсті жолмен жүреді. Ол осы жолмен жүреді, ол жолдың қиылысын немесе бұрылысты тапқанға дейін, бұл робот-техникке қайда бару керектігі туралы шешім қабылдауға мүмкіндік беретін суретті өңдеу үшін суретке түсуге итермелейді. Жеңіл соққылар мен соққылар сенсорлары робот-техникті зақымданудан қорғау үшін жұмыс істейді, ал соққы сенсорлары диагностикалық фото түсіруді басқарады. Роботехник Мардың модульдерін ұлғайтуға арналған, ғарышкерлердің тексерудің негізгі тапсырмасын орындау кезінде уақытты босатады, тек бірдеңе дұрыс болмай қалса, адамдардың көмегіне жүгінеді.

Тағы да ескерту ретінде бұл жұмыс жүріп жатыр. Бұл код жұмыс істейді, бірақ ол бірнеше рет бір -біріне сәйкес келетін бағдарламалар бар болғандықтан, ол жұмыс істемейді. Сонымен қатар, бұл жоба Марстың нақты миссиясында жұмыс істеуі үшін роботты дәл осы мақсатта жасау керек еді, сондықтан тағы да менің ойымша, бұл «тұжырымдаманың дәлелі».

Мұны іске қосу үшін сізге бірнеше нәрсе қажет. Сізге қымбат бағдарлама, сол бағдарламаның қолдау пакеттері және кодтаудың аз тәжірибесі қажет болады. Мен студент болғандықтан және бірінші қабаттың кейбір кодтары берілген (таңқурай пи үшін), мен орнату туралы нақты айтпаймын. Төменде осы негізгі кодқа арналған барлық сілтемелерді таба аласыз. Материалдар тізіміне көшейік.

Аппараттық құрал

  • Raspberry Pi (біз 3 нұсқасын қолдандық)
  • iRobot ®
  • Raspberry Pi-ді робот-техникке бекітіп қоюға арналған ұстайтын құрылғы
  • Raspberry Pi камерасы (қандай автофокус пен суреттің ажыратымдылығы жақсы болса да, қандай түрі маңызды емес)
  • камераны робот-техникке алға қаратып қою үшін қандай да бір стенд немесе қапшық
  • еденге мықтап бекітілген ақ (немесе өте ашық түсті) жолақ ретінде қолданылатын материал. Ол алдыңғы екі жарта сенсорының арасындағы кеңістіктен сәл кеңірек болуы керек.
  • Өте үлкен мәтіні бар 4 белгі (олардың үстінде IMAGE, RIGHT, BACK және LEFT жазулары бар)
  • Түсті қағаз парақтары (кем дегенде үш, жақсырақ қызыл, жасыл және көк)

Бағдарламалық қамтамасыз ету

  • Matlab (2018a және 2017b екеуі де қолданылған және айырмашылығы жоқ сияқты)
  • Matlab үшін Raspberry Pi қолдау пакеті
  • Matlab -ке қосылу үшін Raspberry Pi коды (төменде берілген бастапқы кодқа сілтеме)
  • Matlab үшін кескіндерді өңдеу құралдар жинағы (сіз бұл жобаны құралдар тақтасынсыз жасай алмайсыз)
  • ҚОСЫМША: телефоныңызға Matlab Mobile орнатылған, мен оны кейін түсіндіремін

1 -қадам: Жабдықты орнату

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

Бұл iRobot® -тың негізгі оқулықпен бірге Matlab -пен байланыса алатынын қамтамасыз ететін негізгі кодқа сілтеме. Бұрын айтқанымдай, мен бұл бөлікті қамтымаймын, себебі оқу құралы қазірдің өзінде жақсы дайындалған. Мен сілтемедегі әрекеттерді орындағаннан кейін, енгізілген ақпаратты қарау үшін Matlab «doc» пәрменін қолдануға болатынын айтамын. Атап айтқанда:

құжат бөлмесі

Және тағы бір маңызды сәт.

Файлдарды жоғарыдағы сілтемеден жүктеген кезде, оларды мен жоғарыда сипатталған папкаға қойыңыз, өйткені Matlab пайдаланушы жасаған файлдарды ағымдағы жұмыс қалтасында болуын талап етеді.

Бұған жол бермеу үшін кодқа көшейік.

2 -қадам: Барлық сенсорларды табыңыз

Барлық сенсорларды табу
Барлық сенсорларды табу
Барлық сенсорларды табу
Барлық сенсорларды табу

Бір секундты бөліп, iRobot® тексеруге беріңіз. Олардың қай жерде екенін білу жақсы, сондықтан сіз Robo-Technician алатын ақпарат туралы түсінікке ие боласыз, және сіз бұл жолды ұстанудың орнына, оның айналасында айналатынын біле аласыз. немесе бұл болмауы мүмкін). Сіз алдынан үлкен физикалық соққы сенсорын көресіз. Жартастың сенсорларын көру қиынырақ, оны төңкеріп, алдыңғы шетіне жақын төрт мөлдір пластикалық терезені іздеу керек. Жарық соққыларының сенсорлары одан да жасырын, бірақ әзірге жарқыраған қара жолақта физикалық соққы сенсорының алдыңғы жағында орналасқан iRobot® алдыңғы жағында жүгіретінін айту жеткілікті.

Дөңгелектердің түсу сенсорлары бар, бірақ олар бұл жобада қолданылмайды, сондықтан біз сенсорларды тексеруге көшеміз.

3 -қадам: параметрлерді орнату үшін тестілеу

Параметрлерді орнату үшін тестілеу
Параметрлерді орнату үшін тестілеу

Робо-техниканы жұмысқа жібермес бұрын, оның ерекшеліктері мен сенсор диапазондарын анықтау керек. Әрбір iRobot® роботтың қызмет ету мерзімінен сәл өзгеше болғандықтан, сенсорлар оның жұмыс істейтін аудандарда қалай оқылатынын анықтау керек. Мұны істеудің ең оңай жолы - ашық түсті жолды орнату (Мен ақ принтер қағазының жолақтарын қолдандым, бірақ робот-техник жұмыс істейтін бетінде ақшыл түсті болады.

Matlab іске қосыңыз және жаңа сценарийді ашыңыз. Сценарийді бір қалтаға сақтап қойдым, мен оны ертерек сипаттадым және қалағаныңызша ат қойыңыз (дегенмен қысқа сақтауға тырысыңыз, себебі бұл файлдың аты функция атауы болады). Роботты қосыңыз және командалық терезеге пәрмендерді енгізіп, оқулықтан Roomba айнымалы мәнін орнатуды қолданыңыз.

Raspberry Pi iRobot® -қа қосылғанын және сіздің компьютеріңіз сол интернетке қосылғанын тексеріңіз. Сіз шашыңызды жұлуға аз уақыт жұмсайсыз, неге Matlab қосылмайды

r = Roomba (сіз орнатқан нөмір)

Бұл жағдайда «r» айнымалысы қажет емес, оны қалағаныңызша атауға болады, бірақ бұл бір әріптік айнымалы мәнді пайдалануды жеңілдетеді.

Жол орнатылғаннан кейін және бөлмені сәтті қосқаннан кейін, болашақ робот-техникті жолдың бір немесе екі сенсоры жолдың үстіне қойыңыз. Әлбетте, бұл қалған екі немесе үшеуі сіз таңдаған беттің үстінде екенін білдіреді.

Енді тест сенсорларын келесі пәрменмен іске қосыңыз:

r.testSensors

Есіңізде болсын, «r.» - бұл сіз бұрын анықтаған айнымалы, сондықтан егер «r» болмаса, «r» -ді өзгертіңіз. сіз шешкен нәрсеге. Бұл көптеген ақпарат бар тест сенсорының экранын шығарады.

Бұл жоба үшін жарық бамперлері, бамперлер мен жартастарға назар аударыңыз. Робот-техникті жылжытыңыз, сенсорлардың әр түрлі беттерде қалай өзгеретінін немесе шамның шамы өзгеруі үшін объектінің қаншалықты жақын болуы керектігін қадағалаңыз. Бұл сандарды есте сақтаңыз (немесе оларды жазыңыз), себебі параметрлерді секунд ішінде орнату үшін қажет.

4 -қадам: кодты іске қосу

Алдымен сіз функция құрасыз. Мен оны «жол» деп атадым, бірақ тағы да бұл атау қажет емес, бірақ мен бұдан былай оны «жол» деп атаймын.

Кодтың жоғарғы бөлігі пайдаланушының енгізу параметрлерін орнатады. Ол listdlg -де қолданылатын кейбір тізімдерді құрады, содан кейін тізім диалогтық терезесін шығарады. Бұл пайдаланушыға қай жолдың түсіне сәйкес келетінін таңдауға мүмкіндік береді, ол кейінірек пайда болады.

list = {'Қызыл', 'Көк', 'Жасыл'}

problist = {'Кездейсоқтық, кескінді сақтау', 'компонент орнында емес, суретті сақтау', 'күтілуде, жалғастыру'} pathcolor = listdlg ('PromptString', 'жолдың түсін таңдау',… 'SelectionMode', 'жалғыз', 'ListString', list) prob = 0; driv = ;

Мұнда «prob» және «driv» айнымалы мәндері жариялануы керек, себебі олар функцияның негізгі циклінің ішінде пайдаланылады, бірақ тағы да, егер сіз осы айнымалылардың кез келгенінің атын өзгерткіңіз келсе немесе тізім таңдауын өзгерткіңіз келсе, бәрі жақсы. сіз кодтың қалған бөлігінде келісесіз.

5 -қадам: Циклдің жоғарғы жағы: физикалық соққылар сенсорлары

Уақытша циклдің жоғарғы жағында соққылардың физикалық логикасы бар. Негізінде, Robo-техник тоқтайтын нәрсеге тап болғанда (немесе алдыңғы соққы сенсоры үшін ол 0,1 метрге артқа), содан кейін суретке түсу үшін орналасады. Алдымен жылдамдықты және позицияны басқару бөлігін қарастырайық.

Егер сіз барлық сенсорларды Robo-Technician-те алдыңғы қадамдарда тексерген болсаңыз, онда соққы сенсорларының логикалық мәні (0 немесе 1) бар екенін білесіз, бұл сенсордың қалыпты, басылмаған күйін білдіреді. Мұны код үшін есте сақтаңыз.

шын %негізгі, ал цикл %бампер туралы ақпарат алады S = r.getBampers егер S.left ~ = 0 r.stop elseif S.right ~ = 0 r.stop elseif S.front ~ = 0 r.stop end

Бұл «егер ол бір нәрсеге соғылса, тоқта» негізгі бөлігі. Егер сенсорлар соқтығысуды анықтаса, ол кодтың келесі бөлігіне ауысады, ол суретке түсу үшін робот-техниктің орнын өзгертеді.

if S.left ~ = 0 %, егер цикл бампер ақпаратын алса және камераны фотосуретке теңестірсе PromptString ',' Күтпеген тосқауыл табылды, анықтаңыз '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) pause (0.5) img = r. getImage image (img) prob = listdlg ('PromptString', 'Күтпеген тосқауыл табылды, анықтаңыз'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~ = 0 r.moveDistance (- 0.1) кідірту (0.5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Күтпеген кедергі табылды, анықтаңыз'…, 'SelectionMode', 'single', 'ListString', problist) соңы

Негізінде, сурет түсірілгеннен кейін үш опциямен басқа диалогтық терезе пайда болады. Алғашқы екі нұсқа фотосуретті белгіленген қалтаға сақтайды, мен оны кейінірек жабамын, ал үшінші нұсқа диалогтық терезені жабады және цикл бойынша жалғасады. Егер сіз опцияларды еске түсіре алмасаңыз, алдыңғы қадамды қараңыз.

Енді мен соққы сенсоры мен фотосуретті сақтау бөлігінің арасына код бөлігін енгіздім. Бұл lightBamper мәндерін қабылдайды және жетек жылдамдығын секундына 0,025 метрге (өте баяу) орнатады, бұл іс жүзінде қажет емес, бірақ ол робот-техниктің заттарға соғылуын азайтады және ақырында физикалық соққы датчиктерін тоздырады.

L = r.getLightBampers, егер L.солға> 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 driv = 0.025 r.setDriveVelocity (0.025) else driv = 0.1 end

Бұл бұрын сіз байқаған (және жазылады деп үміттенетін) құндылықтар ойнайтын бөлік болар еді

«L. (сенсордың жағы мен бағыты)> 100» мен байқаған мәндерге негізделген, сондықтан сіздің бақылауларыңыз басқаша болса, осы сандарды өзгертіңіз. Идея, егер Robo-Technician алдында бірнеше сантиметрлік нәрсені сезсе, ол баяулайды, бұл қажет емес.

Келесі бөлімде фотосуреттер кейінірек сақталады.

егер prob диалогында бірінші немесе екінші опция таңдалса %, егер кескін файл үшін сақталса, онда = = 1 %болса, суретті сақтайды, t = сағат уақыт белгісімен жазады; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); папка = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = толық файл (қалта, негізгі атау); imwrite (img, fullFileName) жабу 1 -сурет 1 кідіріс (2) elseif prob == 2 t = сағат; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); папка = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = толық файл (қалта, негізгі атау); imwrite (img, fullFileName) жабу 1 -сурет үзілістің (2) соңы

Фотосуреттер сақталатын барлық файл атаулары мен орындары міндетті емес. Мен кіріспе қадамында жасаған Roomba қалтасының ішіне салынған қалтаны таңдадым, бірақ ол сіз таңдаған жерде болуы мүмкін. Сонымен қатар, фотосуреттер уақыт белгісімен сақталады, бірақ бұл әсіресе қажет емес (бұл Марс миссиясы үшін гипотетикалық тұрғыдан пайдалы болар еді).

Физикалық соққылардың сенсорлары жабылған кезде біз жартастың сенсорларына және келесі жолға қарай жылжи аламыз.

6 -қадам: жолмен жүру

Жартасты сенсорлардың коды екі алдыңғы және екі бүйірлік сенсордың мәндерін салыстыру үшін орнатылған. Сізге бұл мәндерді (мүмкін) бақыланған мәндер негізінде өзгерту қажет болады. Сондай -ақ, бұл мәндерді бірнеше сынақтан кейін өңдеп, оларды қоршаған жарыққа, тәуліктің уақытына (сынақ алаңының қаншалықты жақсы жарықтандырылғанына байланысты) немесе сенсор терезелері кір болғанына қарай өзгерту қажет болуы мүмкін.

Жартастың сенсорлық кодына жетпес бұрын, мен Matlab -тен қажет емес деректерді тазарту үшін енгізген қысқа код сегменті бар. Бұл бөлік қажет емес, бірақ мен оны бағдарламаны іске қосу үшін қажет қойманы қысқарту үшін қолдандым.

clear img clear t clear basename clear fullFileName clear қалтасы

Келесі код сегменті - бұл жобаның еті. Бұл робот-техникке еденге қойылған ашық түсті жолмен жүруге мүмкіндік береді. Қысқаша айтқанда, ол өзін басқаруға тырысады, осылайша алдыңғы екі қиғаш сенсор табалдырықтан жоғары болады және сіздің бағаларыңызға сәйкес бағдарламаға суретті өңдеу қадамдарын сәл кейінірек бастауға мүмкіндік береді.

C = r.getCliffSensors %егер цикл түсті белдеуде болса (ақ), егер C.leftFront> 2000 &&rrightFront> 2000 %түзу бағыттау r.setDriveVelocity (драйв) elseif C.leftFront 2000 %робот тым алыс кетсе оңға бұрылады сол жақ r.turnAngle (-2.5) егер C.leftFront> 2000 && C.rightFront <2000%солға бұрылады, егер робот тым оңға кетсе r.turnAngle (2.5) басқа C.leftFront <2000 &&rrightFront 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 img = r.getImage end %тексереді, егер C.left> 2800 && C. оң жақта <2800 r.turnAngle (2.5), егер C.left 2800 r.turnAngle (- 2.5) жол кескінін тану дискі ('GETTING IMAGE') үшін соңғы %орын ұстаушы

Есіңізде болсын, мен таңдаған айнымалы атаулар міндетті емес, бірақ менің ойымша, мүмкін болса, бір әріпті айнымалыларды қолдану өмірді жеңілдетеді

Кодтың ортаңғы бөлігін түсіндіру үшін екі алдыңғы сенсор жолдың жиегінен шығып кеткенде (жол қиылысына келгенде немесе жолдың соңына жеткенде) оның алдында бірдеңе бар -жоғын көруге болады.. Бұл жұмыс үшін жолдың соңында немесе кез келген қиылыста жерге объект қою керек.

Фото түсірілгеннен кейін ол не істеу керектігін анықтау үшін суретті тануды қолданады. Кодтың осы бөлімінде де орын иегері бар:

жол кескінін тану дисплейі үшін %орын ұстаушы ('GETTING IMAGE')

Мен мұны бір сәтте қолдандым, себебі мен келесі қадамда орын алатын мәтін мен түстерді өңдеу туралы нақты айтқым келді.

7 -қадам: Суретті өңдеу

Суретті өңдеудің екі бөлімі бар. Біріншіден, мәтінді тануды жалғастыру -жалғастырмауды шешу үшін суреттегі түс қарқындылығын есептейтін түс тану. Түстерді есептеу бірінші диалогтық терезеде қандай таңдау жасалғанына негізделген (мен қызыл, көк, жасыл түстерді қолдандым, бірақ түс қарқындылығының орташа мәндерін тануға болатын жағдайда, сіз қалаған түстерді таңдай аласыз. Raspberry Pi камерасы).

img = r.getImage img = imcrop (img, [0 30 512 354]) imgb = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) қызыл = орташа (орташа (imgb (:,:,, 1))); g = орташа (орташа (imgb (:,,:, 2)))); b = орташа (орташа (imgb (:,,: 3))));

Бұл қарқындылықты тексеру. Бұл келесі сегментте не істегісі келетінін шешу үшін қолданылады.

егер қызыл> g && red> b if pathcolor == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img) егер R. Words {1} == КЕСІРІС || R. Words {2} == КЕСІРІМ || R. Words {3} == IMAGE t = сағат; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); папка = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = толық файл (қалта, негізгі атау); imwrite (img, fullFileName) кідірту (2) elseif R. Words {1} == ДҰРЫС || R. Words {2} == ДҰРЫС || R. Words {3} == RIGHT r.turnAngle (-75) else R. R. Words {1} == LEFT || R. Words {2} == СОЛҒА || R. Words {3} == LEFT r.turnAngle (75) else if R. Words {1} == BACK || R. Words {2} == BACK || R. Words {3} == BACK r.turnAngle (110) соңы басқа r.turnAngle (110) соңы

Бұл сегмент бірінші диалогтық терезеде таңдалған түс камера көріп тұрған түске сәйкес келетінін шешеді. Олай болса, ол мәтінді тануды іске қосады. Ол қай сөздің (КЕЙІН, АРҚА, ОҢ немесе СОЛ) пайда болатынын, содан кейін не бұрылатынын (оңға және солға), айналасында (артқа) айналатынын немесе суретке түсіріп, оны бұрынғыдай сақтайтынын көреді.

Мен әр түрлі түстер үшін кодтың бір бөлігін ғана ұсындым

Кодтың көк және жасыл түстерді тануына мүмкіндік беру үшін кодты көшіріп, сегменттің жоғарғы жағындағы логикалық тексеруді өзгертіңіз және «pathcolor == (сан)» жоғарғы диалогтық терезеден түс таңдауына сәйкес етіп орнатыңыз (код көрсетілгенде көк 2 болады, жасыл 3 болады).

8 -қадам: Дайын өнім

Дайын өнім
Дайын өнім

Енді Роботехник Марстың миссиясы модульдерінің айналасында үлкейтіп, бірдеңе орынсыз болған кезде ғарышкерлерге есеп беруі керек.

Есіңізде болсын, барлық қиғаштық сенсоры мен lightBamper мәндері сіз бақылайтын мәндерге өзгертілуі керек. Сондай-ақ, тәжірибе бойынша мен бұл жобаны қара түсті еденде сынауды жақсы деп таптым, егер бұл қабат шағылыспаса, одан да жақсы. Бұл жол мен еден арасындағы қарама-қарсылықты арттырады, бұл робот-техниктің оны дұрыс орындауын ықтимал етеді.

Сізге Марстың миссиясына кішкене көмекші орнату ұнады деп үміттенемін және ғимаратты қызықты өткізіңіз.

Ұсынылған: