Мазмұны:
- 1 -қадам: Жабдықтар
- 2 -қадам: Қажетті нәтижені қанағаттандыру үшін кодтауды жасаңыз
- 3 -қадам: тестілеу
- 4 -қадам: Визуалды нәтижелерді бақылаңыз
Бейне: IRobot Create-Mars экспедициясы Rover Mark I: 4 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Бұл нұсқаулық сізге MatLab кодтау арқылы iRobot Create құруды үйретеді. Сіздің роботта пішіндерді ажырату арқылы пайдалы қазбаларды іздеу, жартасты датчиктерді қолдану арқылы қатал рельефті басқару мүмкіндігі болады және тірі беріліс арқылы қолмен басқаруға болады.
1 -қадам: Жабдықтар
Бұл жоба үшін сізге iRobot Create қажет, ол Roomba робот шаңсорғышының бағдарламаланатын нұсқасы. Робот осы жобаға қажетті барлық сенсорлармен жабдықталған, атап айтқанда соққы сенсорлары, жартасты сенсорлар және «Light Bump» сенсорлары. Сондай -ақ, сізге сымсыз байланыс, тікелей бағдарламалау және тікелей бейне беру үшін қолданылатын Raspberry Pi мен бейнекамера қажет болады. Ақырында сізге Raspberry Pi мен камераға 3D басып шығарылған қондырғы қажет болады.
2 -қадам: Қажетті нәтижені қанағаттандыру үшін кодтауды жасаңыз
Roomba -ды қосқаннан кейін сізге қажет кірістерден кейін сізге қажетті нәтижелерді беретін Matlab кодын жасау қажет болады.
Кодты мына жерден көруге болады:
%Roomba жобасы%Брентен Арнольд (barnol15); Джулианна Корн (qdp218); Mike Heal (mheal) %4/11/19 %Проблеманың сипаттамасы: Марстарды зерттеу/тұру кезінде адамдарға көмектесетін ровер жасаңыз. %Шешім әдісі: органикалық заттарды тексеру үшін %жарық бамперлерін, жартасты датчиктер мен камераны қолдану арқылы органикалық (жасыл) заттарды іздеңіз. %Роверге бамперлер, жартастар %сенсорлары мен доңғалақтың биіктігі сенсорларын қолдану арқылы кедір -бұдырлы жерлерді басқаруға рұқсат етіңіз. Адамдарға роверді қауіпсіз жерден %қашықтықтан басқаруға және пайдалы қазбаларды қолмен іздеуге мүмкіндік беріңіз. таңдаулар = {'ӨМІР', 'ДҰРЫС ЖЕРІ', 'ПАЙДАЛАНУШЫНЫ БАСҚАРУ'}; %Диалогтық мәзірдегі үш параметр Setting = мәзір ('', таңдаулар) егер Параметр> 0 %Егер таңдалған опция пайдаланушыны растауды сұрайды2 = {'Иә', 'Жоқ'} %«Иә» немесе «Жоқ» ұяшықтар жиынын жасаңыз «таңдау Confirm = мәзір (['Сіз таңдадыңыз' 'таңдау {Параметр}'» режимі. '], таңдаулар2) %Пайдаланушы параметрін таңдауды растаңыз Растау == 1 болса Параметр == 1 %«ӨМІР» параметрі таңдалғанын тексеріңіз. = 0 кезінде i == 0 r.setLEDDigits (num2str ('LIFE')) %i = 1: 100 r.setDriveVelocity (0,05) %шамасындағы жарық диодты дисплейде «LIFE» дисплейі 0.05 м/sy = r.getCliffSensors %«Y» ұяшық құрылымында қия сенсорының мәндерін алу және сақтау l «сол»> 100 %болса, «f» құрылымында жарық соққысының мәндерін шығарып алыңыз және сақтаңыз r.moveDistance (-0.05)) %Roomba -ны 0,05 метр артқа жылжытыңыз r.turnAngle (20) %Roomba 20 градусқа бұру CCW img = r.getImage %Roomberry rect -те rasberry пирог камерасынан сурет алу = [100 0 150 150]; img = imcrop (img, rect) %кескіннің ортасына назар аудару үшін қызыл = орташа (орташа (img (:,:, 1))) %орташа қызыл қарқындылығы жасыл = орташа (орташа (img (:,:, 2)))) %орташа жасыл қарқындылығы көк = орташа (орташа (орташа (img (:,:, 3)))) %орташа көк қарқындылығы жасыл болса> қызыл && жасыл> көк %Өсімдіктің суретте бар -жоғын тексеріңіз d = msgbox (['Өмір табылды! ']); %«Өмір табылды!» Деген хабарлама терезесін көрсетіңіз. күту (d); end elseif l.leftFront> 100 %Тексеру сол жақта/алдыңғы жарық бампері жабылған 'түз = [100 0 150 150]; img = imcrop (img, rect) %кескіннің ортасына назар аудару үшін қызыл = орташа (орташа (img (:,,, 1))) %орташа қызыл қарқындылығы жасыл = орташа (орташа (img (:,:, 2)))) %орташа жасыл қарқындылығы көк = орташа (орташа (img (:,:, 3)))) %орташа көк қарқындылығы жасыл болса> қызыл && жасыл> көк %Өсімдіктің суретте бар -жоғын тексеріңіз d = msgbox (['Өмір табылды! ']); %«Өмір табылды!» Деген хабарлама терезесін көрсетіңіз. күту (d); end elseif l.leftCenter> 100 %Сол жақ/орталық жарық бамперінің жабылғанын тексеріңіз r.moveDistance (-0.05) %Roomba-ны артқа қарай 0,05 метрге жылжытыңыз img = r.getImage %Roomberry-де rasberry пирог камерасынан суретті алыңыз және айнымалы 'img сақтаңыз 'түз = [100 0 150 150]; img = imcrop (img, rect) %кескіннің ортасына назар аудару үшін қызыл = орташа (орташа (img (:,:, 1))) %орташа қызыл қарқындылығы жасыл = орташа (орташа (img (:,:, 2)))) %орташа жасыл қарқындылығы көк = орташа (орташа (орташа (img (:,:, 3)))) %орташа көк қарқындылығы жасыл болса> қызыл && жасыл> көк %Өсімдіктің суретте бар -жоғын тексеріңіз d = msgbox (['Өмір табылды! ']); %«Өмір табылды!» Деген хабарлама терезесін көрсетіңіз. күту (d); end elseif l.rightCenter> 100 %Оңға/орталық жарық бамперінің жабылғанын тексеріңіз r.moveDistance (-0.05) %Roomba-ны артқа қарай 0,05 метрге жылжытыңыз img = r.getImage %Roomberry-де rasberry пирог камерасынан суретті алыңыз және айнымалы 'img сақтаңыз 'түз = [100 0 150 150]; img = imcrop (img, rect) %кескіннің ортасына назар аудару үшін қызыл = орташа (орташа (img (:,:, 1))) %орташа қызыл қарқындылығы жасыл = орташа (орташа (img (:,:, 2)))) %орташа жасыл қарқындылығы көк = орташа (орташа (img (:,:, 3)))) %орташа көк қарқындылығы жасыл болса> қызыл && жасыл> көк %Өсімдіктің суретте бар -жоғын тексеріңіз d = msgbox (['Өмір табылды! ']); %«Өмір табылды!» Деген хабарлама терезесін көрсетіңіз. күту (d); end elseif l.rightFront> 100 %Оң жақ/алдыңғы жарық бамперінің жабылғанын тексеріңіз r.moveDistance (-0.05) %Roomba-ны артқа қарай 0,05 метрге жылжытыңыз img = r.getImage %Roomberry-де rasberry пирог камерасынан суретті алыңыз және айнымалы 'img сақтаңыз 'түз = [100 0 150 150]; img = imcrop (img, rect) %кескіннің ортасына назар аудару үшін қызыл = орташа (орташа (img (:,,, 1))) %орташа қызыл қарқындылығы жасыл = орташа (орташа (img (:,:, 2)))) %орташа жасыл қарқындылығы көк = орташа (орташа (img (:,:, 3)))) %орташа көк қарқындылығы жасыл болса> қызыл && жасыл> көк %Өсімдіктің суретте бар -жоғын тексеріңіз d = msgbox (['Өмір табылды! ']); %«Өмір табылды!» Деген хабарлама терезесін көрсетіңіз. күту (d); end elseif l.right> 100 %Оң жақ жарық бамперінің жабылғанын тексеріңіз r.moveDistance (-0.05) %Roomba артқа қарай 0,05 метр r.turnAngle (-20) %Roomba 20 градус CW айналдыру img = r.getImage %Кескінді алу rasba бәліш камерасы бөлмедегі және сақталатын 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %кескіннің ортасына назар аудару үшін қызыл = орташа (орташа (img (:,,, 1))) %орташа қызыл қарқындылығы жасыл = орташа (орташа (img (:,:, 2)))) %орташа жасыл қарқындылығы көк = орташа (орташа (орташа (img (:,:, 3)))) %орташа көк қарқындылығы жасыл болса> қызыл && жасыл> көк %Өсімдіктің суретте бар -жоғын тексеріңіз d = msgbox (['Өмір табылды! ']); %«Өмір табылды!» Деген хабарлама терезесін көрсетіңіз. күту (d); end elseif y.leftFront <1500 %Roomba-ның сол/алдыңғы бөлігінің жартастан өшірілгенін тексеріңіз r.moveDistance (-0.1, 0.05) %Roomba-ны 0,0 метр артқа қарай 0,05 м/с айналдырыңыз r.turnAngle (-5) %Roomba 5 бұру градус CW басқа болса, оңға. Алға <1500 %Roomba-ның оң/алдыңғы бөлігінің жартастан шығып кеткенін тексеріңіз r. Қашықтық (-0.1, 0.05) %Roomba-ны 0,0 метр артқа қарай 0,05 м/с айналдырыңыз r.turnAngle (5) %Roomba 5 бұру градус CCW басқа жағдайда y.left <1000 %Roomba-ның сол жағы жартастан өшірілгенін тексеріңіз r. Қашықтық (-0.05, 0.05) %Roomba-ны 0,05 метр артқа қарай 0,05 м/с айналдыру r.turnAngle (-10) %Roomba 10 градусқа бұру CW elseif y.right0 %Егер жалғастыру == 1 i = 0 %Егер өмір түймесін іздеуді жалғастыру i = 1 %LIFE режимінің аяқталуы endif else if Setting == 2 %«ROUGH TERRAIN» параметрінің таңдалғанын тексеріңіз. i = 0 кезінде i == 0 r.setLEDDigits (num2str ('RGH')) %LED дисплейіндегі «өрескел» дисплейі i = 1: 1000 r.setDriveVelocity (0.05) %Roomba дискісінің жылдамдығын 0,05 м/схема = r.getBampers %«x» y = r.get құрылымындағы бампер сенсорының мәндерін шығарады және сақтайды. CliffSensors %«y» құрылымында қиғаштық сенсорының мәндерін шығарыңыз және сақтаңыз, егер x.right == 1 %Оң жақ бампердің басылғанын тексеріңіз r.turnAngle (10) %Бөлмені 10 градусқа бұру CCF басқа, егер x.left == 1 %Сол жақта болса, тексеріңіз бампер басылады r.turnAngle (-10) %Бөлмені 10 градус CW айналдыру, егер басқа x.front == 1 %Алдыңғы бампердің басылғанын тексеріңіз r.turnAngle (20) %Бөлмені 20 градусқа бұру CCW басқа жағдайда x.rightWheelDrop == 1 % Оң жақ доңғалақтың түсіп кеткенін тексеріңіз r.turnAngle (-20) %Бөлмені 20 градус CW басқа айналдыру, егер x.leftWheelDrop == 1 %Сол жақ дөңгелектің төмен түскенін тексеріңіз r.turnAngle (20) %Бөлмені 20 градусқа CCW айналдырыңыз, егер y.leftFront < 1500 %Roomba-ның алдыңғы сол жақ бөлігінің жартастан шығып кетпегенін тексеріңіз r.moveDistance (-0.05, 0.05) %Roomba-ны 0,05 м артқа 0,05 м/с айналдыру r.turnAngle (-5) %Roomba-ны 5 градус CW-ге бұру, егер оң жақта Алдыңғы жағы < 1500 %Roomba-ның оң жақ алдыңғы бөлігінің жартастан шығып кетпегенін тексеріңіз r.moveDistance (-0.05, 0.05) %Roomba-ны 0,05 метр артқа қарай 0,05 м/с айналдыру бұрышы Бұрыш (5) %Roomba 5 градусқа CCW басқа айналдыру <солға <1000 %Сол жақ бөлігін тексеріңіз f Roomba қыста емес r.moveҚашықтық (-0.05, 0.05)%Roomba-ны 0,05 метр артқа қарай 0,05 м/с айналдырыңыз бұрылысБұрыш (-10)%10 градус CW басқа бөлмеге бұрыңыз егер Жалғастыру == 1 i = 0 %Дөрекі рельефті жалғастыру else i = 1 %Кедір -бұдырлы жерді аяқтау соңы басқа %Қолмен режим i = 0 r.setLEDDigits (num2str ('USER')) %LED дисплейіндегі 'USER' дисплейі d = msgbox (['Көрсеткі пернелері - Жылжыту; S - Rover тоқтату; ESC - соңғы пайдаланушыларды басқару; A - Ресурсты табыңыз ']); күту (d); i == 0 r.showCamera %бөлек терезеде rasberry бәліш камерасының тікелей арнасын ашу D = getkey (1) %Пайдаланушы басқан пернені шығарып алу, ASCII мәнін D айнымалы ретінде сақтаңыз, егер D == 30 %«жоғары» көрсеткі бар екенін тексеріңіз. басылды r.setDriveVelocity (0.1) %Roomba -ны 0,2 м/с жылдамдықпен алға жіберіңіз, егер D == 28 %«солға» көрсеткі басылғанын тексеріңіз r.setDriveVelocity (0) %Roomba -ның алға немесе артқа жылжуын тоқтатыңыз r.turnAngle (15), 0,05) %Бөлмені 45 градусқа айналдыру 0,05 м/с, егер D == 31 %«төмен» көрсеткісінің басылғанын тексеріңіз r.setDriveVelocity (-0.1) %Бөлмені артқа қарай 0,2 м/с жылжытыңыз, егер D == 29 % «Оңға» көрсеткісінің басылғанын тексеріңіз r.setDriveVelocity (0) %Roomba-ны алға немесе артқа жылжытуды тоқтатыңыз r.turnAngle (-15, 0,05) %Roomba 45 градус CW-де 0,05 м/с, егер D == 27 %тексеріңіз «esc» (escape) пернесі басылды i = 1 %«i» айнымалы мәнін циклден шығу үшін өзгерту d = msgbox ('«Пайдаланушы бақылауынан' 'шығу) %Пайдаланушыға қолмен режимнен шығатыны туралы хабарлаңыз, егер D == 115 %«s» пернесінің басылғанын тексеріңіз r.setDriveVelocity (0) %Roomba қызметін тоқтату алға немесе артқа жүру elseif D == 97 %«a» басылғанын тексеріңіз image = r.getImage; imwrite (image, 'image.png') W = Жіктеу (сурет) K = режимі (W), егер K == 3 d = msgbox ('Ресурс табылды') %Егер тікбұрышты ресурс күтуді күтсе (d) көрсетеді; %Пайдаланушының «d» хабар терезесін жабуын күтіңіз, әйтпесе K == 0 d = msgbox ('Ресурс емес:(') %Егер төртбұрышты ресурс табылмаса, күтуді күтіңіз (d); %Пайдаланушының хабарлама терезесін жабуын күтіңіз «d» end else d = msgbox ('Жарамды кілт енгізу емес.') %Пайдаланушы «параметрді таңдау» мәзірін жабатын болса көрсетеді күту (d); %Пайдаланушының «d» хабарлама терезесін жабуын күтіңіз (d) соңы күту (d); %Күту пайдаланушы «d» хабарлама жолағын жабады end end end else d = msgbox ('Goodbye') %Опциялар жабылғанда қоштасады (d);
3 -қадам: тестілеу
Сіздің кодыңыз жазылғаннан кейін сізге Roomba -ны тексеру қажет болады. Сіздің кодыңыз дұрыс болып көрінгенімен, сіздің Roomba анықтағыңыз келетін объектілерді дұрыс тану үшін сіздің көптеген мәндеріңізді, әсіресе түсі немесе пішіні бойынша өзгерту қажет болады.
4 -қадам: Визуалды нәтижелерді бақылаңыз
Сіз Roomba -ны визуалды нәтижеге сүйене отырып сәтті бағдарламалағаныңыз немесе болмағаныңыз анық болады.
Шығаруға мыналар жатады:
- Пішінді анықтау: Roomba дұрыс минералдарды табу үшін пішіндерді дұрыс ажырата білу
- Дөрекі рельефті маневрлер: жартастардан немесе қараңғы жерлерден аулақ
- Қол режимі: Тікелей беру және Roomba басқару мүмкіндігі
- Суреттер: Пайдалы қазбалардың суреттері
- Өмір табылды!: Сіздің өсімдік органикалық тіршілікті анықтағанын білдіретін MatLab мәтіндік терезесі.
Біздің оқу құралы осымен аяқталды, жаңа Mars Expedition Rover -тен ләззат алыңыз!
Ұсынылған:
Ең жақсы сыра понгы машинасы - PongMate CyberCannon Mark III: 6 қадам (суреттермен)
The PierMate CyberCannon Mark III: Кіріспе PongMate CyberCannon Mark III - пиво пон технологиясының көпшілікке сатылатын ең жаңа және ең озық бөлігі. Жаңа CyberCannon көмегімен кез келген адам сыра столының ең қорқынышты ойыншысы бола алады. Бұл қалай?
Slave Trigger Flash Mark II: 6 қадам (суреттермен)
Slave Trigger Flash Mark II: Бұл нұсқаулықта мен минималды компоненттері бар шынайы (оптикалық) қосалқы триггерді қалай жасау керектігін түсіндіремін. Интернетте сіз таба алатын көптеген күрделі конструкциялар бар, бұл дизайн өте қарапайым және жұмыс істейді. жарқын және күңгірт жарықта жақсы
Localino Roomba IRobot -ты бақылайды, қоршаған ортаны көрсетеді және бақылауға мүмкіндік береді.: 4 қадам
Localino Roomba IRobot-ті бақылайды, қоршаған ортаны картадан шығарады және бақылауға мүмкіндік береді. Бұл нұсқаулықта Roomba iRobot-ты үй ішінде Localino жабық локализация жүйесімен, WiFi-UART көпірімен және ДК қосымшасымен бақылау және бақылау процедурасы түсіндіріледі. HIL-бақылауды түсіндіретін бұл нұсқаулықтың егжей-тегжейі
IRobot Create командалық модулін Linux жүйесінде қолдану: 4 қадам
IRobot Create -тің командалық модулін Linux -те қолдану: iRobot Linux қолданушыларына командалық модульді қолдану әдісін бермегендіктен, мен оны өзім шешуге мәжбүр болдым. Сізге тек бірнеше сценарийлерді орындау қажет. Алдымен бастайық, солай ма?
Mark I Super Psyllium Passivia динамиктері: 6 қадам (суреттермен)
Mark I Super Psyllium Passivia спикерлері: нұсқаулықтарға арналған спикерлердің көптеген дизайнынан шабыттандырылған, YAS (тағы бір спикер) жасаудан гөрі, дыбыс өнеріне енудің қандай жақсы жолы бар! Біз мұнда Regularity Audio Labs -те қарапайым адамдармыз және оларда керемет бос контейнерлер болды