Мазмуну:

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

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

Video: IRobot Create-Mars экспедициясы Rover Mark I: 4 кадам
Video: 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); Майк Хил (mheal) %4/11/19 %Проблеманын сүрөттөмөсү: Марстын %чалгындоо/жашоо учурунда адамдарга жардам берүү үчүн ровер түзүңүз. %Чечим ыкмасы: Органикалык заттарды текшерүү үчүн %жарык бамперлерин, аска сенсорлорун жана камераны колдонуу аркылуу органикалык (жашыл) заттарды издеңиз. %Роверге бамперлерди, жарлуу %датчиктерди жана дөңгөлөктүн бийиктиги сенсорлорун колдонуу аркылуу катаал жерлерди башкарууга уруксат бериңиз. Адамдарга роверди %коопсуз аралыктан башкарууга жана минералдарды кол менен издөөгө мүмкүнчүлүк бериңиз. choices = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Диалог менюсунда үч параметр Орнотуу = меню ('', тандоолор) эгерде Орнотуу> 0 %Эгерде тандалган вариант колдонуучуну ырастоону суранса2 = {'Ооба', 'Жок'} %"Ооба" же "Жок" үчүн уяча массивин түзүңүз "choice Confirm = меню (['Сиз' 'тандоолор {Setting}'" режимин. '], тандоолор2) %Колдонуучунун орнотуу тандоосун ырастаңыз Confirm == 1 if Setting == 1 %"LIFE" жөндөөсү тандалганын текшериңиз i I == 0 r.setLEDDigits (num2str ('LIFE')) %дисплейи "LIFE" ди LED үчүн i = 1: 100 r.setDriveVelocity (0.05) %Roomba алдыга 0.05 м/с = r.getCliffSensors %"Y" клеткасынын структурасында жардын сенсорунун маанилерин алуу жана сактоо l "r" get. LightBampers %l.left> 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 (['Жашоо табылды! ']); %"Жашоо табылды!" Деген билдирүү кутучасын көрсөтүү. күтүү (г); end elseif l.leftFront> 100 %Текшерүү солго/алдыңкы жарык бампери r.moveDistance (-0.05) %Roomba артка жылдыруу 0.05 метр img = r.getImage %Roomberryдеги rasberry пирог камерасынан сүрөт алыңыз жана өзгөрмөлүү дүкөндө сактаңыз 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %түшүм сүрөтү борборго басым жасоо үчүн кызыл = орточо (орточо (img (:,:, 1))) %орточо кызыл интенсивдүүлүк жашыл = орточо (орточо (img (:,:, 2)))) %орточо жашыл интенсивдүүлүк көк = орточо (орточо (img (:,:, 3)))) %орточо көк интенсивдүүлүк эгер жашыл> кызыл && жашыл> көк %өсүмдүктүн сүрөттө экенин текшерүү d = msgbox (['Жашоо табылды! ']); %"Жашоо табылды!" Деген билдирүү кутучасын көрсөтүү. күтүү (г); end elseif l.leftCenter> 100 %Чап/борбордук жарык бамперинин жабылгандыгын текшериңиз r.moveDistance (-0.05) %Roomba артка жылдырыңыз 0.05 метр img = r.getImage %Roomberryдеги rasberry пирог камерасынан сүрөт алыңыз жана өзгөрмөлүү дүкөндө сактаңыз 'img 'rect = [100 0 150 150]; img = imcrop (img, түз) %түшүм сүрөтү борборго басым жасоо үчүн кызыл = орточо (орточо (img (:,:, 1))) %орточо кызыл интенсивдүүлүк жашыл = орточо (орточо (img (:,:, 2)))) %орточо жашыл интенсивдүүлүк көк = орточо (орточо (img (:,:, 3)))) %орточо көк интенсивдүүлүк эгер жашыл> кызыл && жашыл> көк %өсүмдүктүн сүрөттө экенин текшерүү d = msgbox (['Жашоо табылды! ']); %"Жашоо табылды!" Деген билдирүү кутучасын көрсөтүү. күтүү (г); end elseif l.rightCenter> 100 %Оңго/борборго жарык бампери жабылганын текшериңиз r.moveDistance (-0.05) %Roomba артка жылдырыңыз 0.05 метр img = r.getImage %Roomberryдеги rasberry пирог камерасынан сүрөт алыңыз жана өзгөрмөлүү дүкөндө сактаңыз 'rect = [100 0 150 150]; img = imcrop (img, rect) %түшүм сүрөтү борборго басым жасоо үчүн кызыл = орточо (орточо (img (:,:, 1))) %орточо кызыл интенсивдүүлүк жашыл = орточо (орточо (img (:,:, 2)))) %орточо жашыл интенсивдүүлүк көк = орточо (орточо (img (:,:, 3)))) %орточо көк интенсивдүүлүк эгер жашыл> кызыл && жашыл> көк %өсүмдүктүн сүрөттө экенин текшерүү d = msgbox (['Жашоо табылды! ']); %"Жашоо табылды!" Деген билдирүү кутучасын көрсөтүңүз. күтүү (г); end elseif l.rightFront> 100 %Оңго/алдыңкы жарык бампери жабылганын текшериңиз r.moveDistance (-0.05) %Roomba артка жылдырыңыз 0.05 метр img = r.getImage %Roomberryдеги rasberry пирог камерасынан сүрөт алыңыз жана өзгөрмөлүү дүкөндө сактаңыз 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %түшүм сүрөтү борборго басым жасоо үчүн кызыл = орточо (орточо (img (:,:, 1))) %орточо кызыл интенсивдүүлүк жашыл = орточо (орточо (img (:,:, 2)))) %орточо жашыл интенсивдүүлүк көк = орточо (орточо (img (:,:, 3)))) %орточо көк интенсивдүүлүк эгер жашыл> кызыл && жашыл> көк %өсүмдүктүн сүрөттө экенин текшерүү d = msgbox (['Жашоо табылды! ']); %"Жашоо табылды!" Деген билдирүү кутучасын көрсөтүңүз. күтүү (г); end elseif l.right> 100 %Оң жарык бамперинин жабылгандыгын текшериңиз r.moveDistance (-0.05) %Roomba артка жылдырыңыз 0.05 метр r.turnAngle (-20) %Roomba 20 градус CW буруңуз img = r.getImage %Сүрөттү алуу Roomberry жана дүкөндөгү rasberry пирог камерасы 'img' rect = [100 0 150 150]; img = imcrop (img, түз) %түшүм сүрөтү борборго басым жасоо үчүн кызыл = орточо (орточо (img (:,:, 1))) %орточо кызыл интенсивдүүлүк жашыл = орточо (орточо (img (:,:, 2)))) %орточо жашыл интенсивдүүлүк көк = орточо (орточо (img (:,:, 3)))) %орточо көк интенсивдүүлүк эгер жашыл> кызыл && жашыл> көк %өсүмдүктүн сүрөттө экенин текшерүү d = msgbox (['Жашоо табылды! ']); %"Жашоо табылды!" Деген билдирүү кутучасын көрсөт. күтүү (г); end if if y.leftFront <1500 %Roomba нын сол/алдыңкы бөлүгү жардан өчүрүлгөнүн текшериңиз r.moveDistance (-0.1, 0.05) %0,05 м/с ылдамдыкта бөлмөнү 0,1 метр артка жылдырыңыз r.turnAngle (-5) %Roomba 5ти буруңуз CW даражасы башка ж. оңго Алдыңкы <1500 %Roomba нын оң/алдыңкы бөлүгү жардан өчүрүлгөнүн текшериңиз r.moveDistance (-0.1, 0.05) %Roomba артка 0.1 метр артка жылып 0.05 м/с r.turnAngle (5) %Roomba 5ти буруңуз CCW башкача ж. солго <1000 %Roomba нын сол жагы аскадан өчүрүлгөнүн текшериңиз r.moveDistance (-0.05, 0.05) %Roomba артка 0.05 м/с ылдамдыкта 0.05 метр артка жылдырыңыз r.turnAngle (-10) %Roomba 10 градуска буруңуз CW elseif y.right0 %Run эгер баскыч басылса Улантуу == 1 i = 0 %Жашоону издөөнү улантыңыз i = 1 %LIFE режимин аяктоо end end elseif Setting == 2 %"ROUGH TERRAIN" жөндөөсү тандалганын текшериңиз i = 0, ал эми мен == 0 r.setLEDDigits (num2str ('RGH')) %LED дисплейинде "орой" дисплей i = 1: 1000 r.setDriveVelocity (0.05) %Roomba диск ылдамдыгын 0.05 м/схема = r.getBampers %"x" y = r.get структурасында бампер сенсорунун баалуулуктарын алуу жана сактоо CliffSensors %x.right == 1 %"y" структурасында жардын сенсорунун маанилерин алып, сактаңыз r.turnAngle (10) %Roomba 10 градуска буруңуз CCW башкача x.left == 1 %Солго текшериңиз бампер басылды r.turnAngle (-10) %Бөлмөнү 10 градуска айлантуу CF башкада x.front == 1 %Алдыңкы бампердин басылганын текшериңиз r.turnAngle (20) %Roomba 20 градуска буруңуз, эгерде x.rightWheelDrop == 1 % Оң дөңгөлөк түшүп кеткенин текшериңиз r.turnAngle (-20) %Roomba 20 градус CW башка, эгер x.leftWheelDrop == 1 %Текшерүү сол дөңгөлөк түшүп кеткен r.turnAngle (20) %Roomba 20 градуска буруңуз CCW башка учурда y.leftFront < 1500 %Roomba нын алдыңкы сол бөлүгү жардан өчүрүлгөнүн текшериңиз r.moveDistance (-0.05, 0.05) %0.05 м/с ылдамдыкта 0.05 метр артка жылыңыз r.turnAngle (-5) %Roomba 5 градус CW башка учурда y.rightFront < 1500 %Roomba'nın оң алдыңкы бөлүгү аскадан өчүрүлгөнүн текшериңиз r.moveDistance (-0.05, 0.05) %Roomba 0,05 метр артка 0.05 м/с r.turnAngle (5) %Roomba 5 градуска CCW башка жакка бурулса <солго <1000 %Сол бөлүгүн текшериңиз o f Roomba жарда жок r.moveDistance (-0.05, 0.05)%0.05 м/с ылдамдыкта артка 0.05 метр артка жылуу r.turnAngle (-10)%Roomba 10 градус CW башкача айлантуу y.right0 эгер Улантуу == 1 i = 0 %Тегиз жерлерди улантыңыз башка i = 1 %Тоолуу жердин аягы башка аягына чейин %Кол режими i = 0 r.setLEDDigits (num2str ('КОЛДОНУЧУ')) %LED дисплейде 'КОЛДОНУЧту' көрсөтүңүз d = msgbox (['Жебе баскычтары - Жылдыруу; S - Stop Rover; ESC - акыркы колдонуучуну башкаруу; A - Ресурсту табуу ']); күтүү (г); ал эми мен == 0 r.showCamera %rasberry пирогунун камерасын түз ачуу өзүнчө терезеде D = getkey (1) %Колдонуучу баскан баскычты алуу, D == 30 %болсо DSC өзгөрмөсү катары ASCII маанисин сактоо басылды r.setDriveVelocity (0.1) %Roomba'ны 0,2 м/с ылдамдыкта башка жакка жөнөтүү D == 28 %"сол" жебенин басылганын текшериңиз r.setDriveVelocity (0) %Roomba алдыга же артка жылууну токтотот r.turnAngle (15, 0.05) %Roomba 45 градуска CCW 0.05 м/с айлантуу башка D == 31 %"ылдый" жебеси басылганын текшериңиз r.setDriveVelocity (-0.1) %Roomba артка 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" elseif 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ңызды текшеришиңиз керек болот. Сиздин код туура көрүнгөнү менен, сиздин баалуулуктарыңыздын көбүн, айрыкча түсү же формасы үчүн, Roombаңыз аныктагыңыз келген объекттерди туура таануу үчүн өзгөртүү керек болот.

4 -кадам: Визуалдык жыйынтыктарды байкаңыз

Визуалдык чыгууларды байкаңыз
Визуалдык чыгууларды байкаңыз
Визуалдык чыгууларды байкаңыз
Визуалдык чыгууларды байкаңыз

Roombaңызды анын визуалдык жыйынтыгына жараша ийгиликтүү программалаганыңыз же жокпуңуз айдан ачык болот.

Чыгаруулар төмөнкүлөрдү камтыйт:

  • Форманы аныктоо: Roomba'nın туура минералдарды табуу үчүн формаларды туура айырмалоо жөндөмү
  • Орой жер маневрлери: аскадан же караңгы жерлерден алыс
  • Кол режими: Түз берүү жана Roomba башкаруу мүмкүнчүлүгү
  • Сүрөттөр: Пайдалуу кендердин сүрөттөрү
  • Жашоо табылды!: Сиздин өсүмдүк органикалык жашоону аныктаганын билдирген MatLab текст кутучасы.

Биздин окуу куралыбыз ушуну менен аяктады, жаңы Mars Expedition Roverтен ырахат алыңыз!

Сунушталууда: