Мазмұны:

IRobot Create-Mars экспедициясы Rover Mark I: 4 қадам
IRobot Create-Mars экспедициясы Rover Mark I: 4 қадам

Бейне: IRobot Create-Mars экспедициясы Rover Mark I: 4 қадам

Бейне: IRobot Create-Mars экспедициясы Rover Mark I: 4 қадам
Бейне: Introducing the iRobot Create 3 Educational Robot 2024, Қараша
Anonim
IRobot Create-Mars экспедициясы Rover Mark I
IRobot Create-Mars экспедициясы Rover Mark I

Бұл нұсқаулық сізге 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 -тен ләззат алыңыз!

Ұсынылған: