Мазмуну:

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

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

Video: Робот-техник: 8 кадам
Video: Топ 12 крутых роботов 2024, Ноябрь
Anonim
Робот-техник
Робот-техник

Бир аздан кийин Марска конгон астронавттардын бири экениңизди элестетип көрүңүз. Сизде миллиондогон нерселер бар, алуу үчүн үлгүлөр, иштетүү үчүн эксперименттер, маалыматтарды чогултуу керек, бирок күнүнө бир же эки жолу сиз жашаган жана иштеп жаткан турак жай жана/же изилдөө модулдарын айланып өтүү керек. Кимдир бирөө нерсенин жакшы абалда болушун, миңдеген бөлүктөрдүн жана тетиктердин иштешин жана ордунда болушун камсыздашы керек. Бирок сизди ошол милдеттердин кээ биринен бошотуу үчүн автоматташтырылган жардамчы болсочу? Баары ордунда, иштеп жаткан жана коопсуз экенине ынануу үчүн модулдардын ичинде ары -бери жыла ала турган кичинекей робот болсочу?

Робот-техник жардамга келди.

Негизи, бул код Robo-Technicianти көзөмөлдөйт, анткени ал жерде ачык түстөгү жолду ээрчип жүрөт. Ал жолдо же бурулушта түйүндү тапмайынча бул жолду улантат, бул сүрөттү иштетүү үчүн сүрөткө тартууга түрткү берет, бул Robo-Техникке мындан ары кайда баруу жөнүндө чечим кабыл алууга мүмкүндүк берет. Жарык дүмүрлөрү жана дөмпөк сенсорлору робот-техникти бузулуулардан коргоо үчүн иштейт, ал эми шишик сенсорлору диагностикалык сүрөт качан түшөрүн көзөмөлдөйт. Баары биригип, Robo-Technician текшерүү боюнча негизги тапшырманы аткарып жатканда космонавттардын убактысын бошотуп, Мар модулдарын чоңойтуу үчүн иштелип чыккан, ал бир нерсе туура эмес тапканда гана адамдардын катышуусун талап кылат.

Дагы эскертүү катары бул аткарылып жаткан иш. Код бар эле, ал иштейт, бирок анын ичинде хикаптар бар, айрыкча, бир нече, бири -бирине дал келген программалар бар. Ошондой эле, бул долбоордун Марстын чыныгы миссиясында иштеши үчүн, бул максат үчүн робот жасалышы керек, ошондуктан дагы бир жолу бул "концепциянын далили" деп ойлойм.

Муну ишке киргизүү үчүн сизге бир нече нерсе керек. Сизге кымбат программа, ошол программанын колдоо пакеттери жана коддоодо бир аз маалымат керек болот. Мен студент болгондуктан жана биринчи кабаттын кээ бир коддору берилген (малина пи үчүн), мен орнотуу жөнүндө атайын айтпайм. Төмөндө ошол базалык коддун бардык шилтемелерин таба аласыз. Келгиле, материалдардын тизмесине кирели.

Аппараттык

  • Raspberry Pi (биз 3 версиясын колдонгонбуз)
  • iRobot ®
  • Raspberry Piнин Robo-Техникке тиркелип турушу үчүн кандайдыр бир кармоочу түзүлүш
  • Raspberry Pi камерасы (кандай автофокус жана сүрөттүн чечилиши жакшы болсо, кандай түрү болбосун)
  • камераны Robo-Technicianге алдыга каратып туруу үчүн кандайдыр бир стенд же капкак
  • полго бекем бекитилген ак (же өтө ачык түстөгү) тилке катары колдонула турган материал. Ал алдыңкы эки жардын сенсорунун ортосундагы боштуктан бир аз кененирээк болушу керек.
  • 4 чоң белгиси бар 4 белги
  • Түстүү кагаз барактары (жок дегенде үч, эң жакшысы кызыл, жашыл жана көк)

Программалык камсыздоо

  • 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" буйругун колдоно алаарыңызды айтам. Тактап айтканда:

doc roomba

Жана дагы бир абдан маанилүү жагдай.

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

Муну менен, кодго өтөлү.

2 -кадам: Бардык сенсорлорду табуу

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

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

Дөңгөлөктүн түшүү сенсорлору бар, бирок алар бул долбоордо колдонулбайт, ошондуктан сенсорлорду сыноого өтөбүз.

3 -кадам: Параметрлерди коюу үчүн тестирлөө

Параметрлерди коюу үчүн тестирлөө
Параметрлерди коюу үчүн тестирлөө

Робо-техникти жумушун аткарууга жөнөтүүдөн мурун, биз анын өзгөчөлүктөрүн жана сенсор диапазондорун аныктап алышыбыз керек. Ар бир iRobot® бир аз башкача болгондуктан жана роботтун иштөө мөөнөтү өзгөргөндүктөн, сенсорлор анын иштей турган жерлерин кантип окуй турганын аныкташыбыз керек. Мунун эң оңой жолу - ачык түстүү жолду орнотуу (Мен ак принтер кагазынын тилкелерин колдондум, бирок ачык түстөгү нерсе жасайт) Robo-Technician иштей турган жерде.

Matlabти иштетип, жаңы скрипт ачыңыз. Скриптти ошол эле папкада сактаңыз, мен ЭРЛИЕРДИ сүрөттөп бергем жана каалаган нерсеңизге ат коюңуз (бирок аны кыска сактоого аракет кылыңыз, анткени бул файлдын аты функциянын аталышы болот). Роботту күйгүзүңүз жана буйрук терезесине буйруктарды терип, үйрөткүчтөн Roomba өзгөрмөсүн орнотууну колдонуңуз.

Raspberry Pi iRobot®ке туташтырылганын текшериңиз жана сиздин компьютериңиз дагы ошол интернетке туташкан. Чачыңызды жулууга азыраак убакыт коротосуз, эмне үчүн Matlab туташпайт

r = Roomba (сиз койгон номер)

Бул шартта "r" өзгөрмөсү кереги жок, аны каалаган нерсеңиз деп атасаңыз болот, бирок ал бир тамгадан турган өзгөрмөнү колдонууну жеңилдетет.

Жол орнотулгандан кийин жана бөлмө ийгиликтүү туташкандан кийин, келечектеги Робот-Техникти жолдун үстүндө бир же эки сенсор жайгашкан жерге коюңуз. Албетте, бул калган эки же үчөө сиз тандаган беттин үстүндө экенин билдирет.

Эми сыноо сенсорлорун төмөнкү буйрук менен баштаңыз:

r.testSensors

Эсиңизде болсун, "r." Сиз мурда аныктаган өзгөрмө, андыктан "r" болбосо, "r" ды өзгөртүңүз. эмнени чечсең ошого. Бул тест маалымат сенсордук экранды алып келет.

Бул долбоордо lightBampers, bampers жана cliff бөлүмдөрүнө басым жасаңыз. Robo-Техникти жылдырыңыз, сенсорлор ар кандай беттерде кандайча өзгөрүп жатканын, же ligthBamper маанилеринин өзгөрүшү үчүн объект канчалык жакын болушу керектигин текшерип туруңуз. Бул сандарды эстен чыгарбаңыз (же жазып алыңыз) параметрлериңизди бир секундада орнотушу керек.

4 -кадам: Кодду баштоо

Биринчиден, сиз функцияны түзөсүз. Мен аны "жол" деп атадым, бирок дагы эле, бул аталыштын кереги жок, бирок мен мындан ары аны "жол" деп айтып жатам.

Коддун жогорку бөлүгү колдонуучунун киргизүү параметрлерин орнотуп жатат. Бул in listdlgда колдонула турган кээ бир тизмелерди түзүп, андан кийин тизме диалог кутучасын алып келет. Бул колдонуучуга кайсы жолдун түсүн тандап алууга мүмкүндүк берет, ал кийинчерээк ойнойт.

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

problist = {'Кырсык, Сүрөттү сактоо', 'Компонент орунсуз, Сүрөттү сактоо', 'Күтүлүүдө, Улантуу'} pathcolor = listdlg ('PromptString', 'Жолдун Түсүн Тандоо',… 'SelectionMode', 'single', 'ListString', list) prob = 0; driv = ;

"Проб" жана "драйв" өзгөрмөлөрү бул жерде жарыяланышы керек, анткени алар функциянын негизги циклинин ичинде колдонулат, бирок дагы эле, эгер сиз бул өзгөрмөлөрдүн биринин атын өзгөрткүңүз келсе же тизменин тандоолорун өзгөрткүңүз келсе, анда жакшы сиз коддун калган бөлүгүндө ырааттуусуз.

5 -кадам: Циклдин чокусу: Физикалык сокку сенсорлору

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

Эгерде сиз бардык сенсорлорду Robo-Technician'де мурунку кадамдарда сынап көргөн болсоңуз, анда сенсордун логикалык мааниси бар экенин билесиз (0 же 1), сенсордун кадимки басылбаган абалын билдирет. Код үчүн муну эске алыңыз.

чыныгы %негизги, ал эми цикл %бампер маалыматын алат S = r.getBampers if S.left ~ = 0 r.stop elseif S.right ~ = 0 r.stop elseif S.front ~ = 0 r.stop end

Бул "эгер бир нерсеге тийсе, токтот" негизги бөлүгү. Эгерде сенсорлор кагылышууну аныкташса, анда ал коддун кийинки бөлүгүнө өтөт, ал сүрөттү алуу үчүн Robo-Technicianтин позициясын өзгөртөт.

if S.left ~ = 0 %, эгер цикл бампер маалыматын алса жана камераны фото үчүн тегиздейт r.turnAngle (5) пауза (0.5) img = r.getImage %сүрөткө тартып, сүрөттү көрсөтөт (img) %диалог кутусу prob = listdlg (' PromptString ',' Күтүлбөгөн тоскоолдук табылды, сураныч, аныктагыла '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) пауза (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) аягы

Негизинен, сүрөт алынгандан кийин үч варианты бар башка диалог кутучасы пайда болот. Биринчи эки вариант сүрөттү көрсөтүлгөн папкага сактайт, мен аны кийинчерээк камтайм, үчүнчү вариант диалог кутучасын жабат жана цикл аркылуу уланат. Эгерде сиз варианттарды эстей албасаңыз, мурунку кадамды карап көрүңүз.

Эми мен сокку сенсорунун бөлүгү менен сүрөттү сактоочу бөлүктүн ортосуна код бөлүмүн киргиздим. Бул lightBumper баалуулуктарын талап кылат жана диск ылдамдыгын 0.025 метр/секундага орнотот (бул өтө жай), бул чынында эле зарыл эмес, бирок Robo-Technicianтин нерселерге урунуп, акыры физикалык сокку сенсорлорун эскиртет.

L = r.getLightBampers эгер L.ток> 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 driv = 0.025 r.setDriveVelocity (0.025) башка driv = 0.1 end

Бул сиз байкаган баалуулуктар (жана үмүт менен жазып) мурун ойногон бөлүгү болмок

"L. (сенсордун жагы жана багыты)> 100" мен байкаган баалуулуктарга негизделген, андыктан сиздин байкооңуз башка болсо, бул сандарды өзгөртүңүз. Идея, эгер Robo-Technician бир нече сантиметрдин алдында бир нерсени сезсе, анда ал жайыраак болот, андан да керексиз.

Кийинки бөлүк - сүрөттөр кийинчерээк сакталган жерде.

%эгер проб диалогунда биринчи же экинчи вариант тандалган болсо, анда проб == 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 = fullfile (папка, негизги ат); imwrite (img, fullFileName) жабуу Figure 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 = fullfile (папка, негизги ат); imwrite (img, fullFileName) жабуу Figure 1 тыным (2) аягы

Сүрөттөр сакталган бардык файл аттары жана жерлер милдеттүү эмес. Мен киришүү баскычында мен түзгөн Roomba папкасынын ичине салынган папканы тандагам, бирок ал сиз тандаган жерде болушу мүмкүн. Ошондой эле, сүрөттөр убакыт белгиси менен сакталат, бирок бул өзгөчө зарыл эмес (бирок Марстын миссиясы үчүн гипотетикалык жактан пайдалуу болмок).

Физикалык сокку сенсорлору жабылганда, биз асканын сенсорлоруна жана кийинки жолго өтө алабыз.

6 -кадам: Жолго түшүү

Жардын сенсорлорунун коду алдыңкы жана эки тараптуу сенсорлордун маанилерин салыштыруу үчүн түзүлгөн. Сиз бул баалуулуктарды (балким) байкалган баалуулуктарыңыздын негизинде өзгөртүшүңүз керек болот. Ошондой эле, балким, бул баалуулуктарды бир нече сыноодон кийин оңдоп, айланадагы жарыкка, күндүн убактысына (сыноо аянты канчалык жакшы жарыктандырылганына жараша) же сенсор терезелери кир болгондо өзгөртүшүңүз керек болот.

Жардын сенсорунун кодуна жетүүдөн мурун, мен Matlabтан керексиз маалыматтарды тазалоо үчүн киргизген кыска код сегмент бар. Бул бөлүк кереги жок, бирок мен аны программаны иштетүү үчүн керектүү сактагычты кыскартуу үчүн колдондум.

clear img clear t clear basename clear fullFileName clear folder

Кийинки код сегмент - бул долбоордун эти. Бул Robo-Техниктин жерге коюлган ачык түстөгү жол менен жүрүүсүнө мүмкүндүк берет. Кыскача айтканда, ал өзү башкарууга аракет кылат, андыктан алдыңкы эки асканын сенсорлору сиздин байкалган баалуулуктарыңыздын негизинде босогодон жогору турат жана программага сүрөттү иштетүү кадамдарын бир аздан кийин баштоого мүмкүндүк берет.

C = r.getCliffSensors %эгер цикл түстүү диапазонду (ак) ээрчите C.leftFront> 2000 &&rrightFront> 2000 %түз жол көрсөтмөсү r.setDriveVelocity (driv) elseif C.leftFront 2000 %робот өтө алыс кетсе оңго бурулат солго r.turnAngle (-2.5) elseif C.leftFront> 2000 && C.rightFront <2000%солго бурулат, эгер робот өтө оңго кетсе r.turnAngle (2.5) elseif C.leftFront <2000 &&rrightFront 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 img = r.getImage аягы %текшерет, эгерде C.left> 2800 &&Cright <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) if R. Words {1} == IMAGE || R. Words {2} == IMAGE || 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 = fullfile (папка, негизги ат); imwrite (img, fullFileName) тыным (2) elseif R. Words {1} == ОҢ || R. Words {2} == RIGHT || R. Words {3} == RIGHT r.turnAngle (-75) elseif R. Words {1} == LEFT || R. Words {2} == LEFT || R. Words {3} == LEFT r.turnAngle (75) elseif R. Words {1} == BACK || R. Words {2} == АРТКА || R. Words {3} == BACK r.turnAngle (110) end else r.turnAngle (110) end end

Бул сегмент биринчи диалог кутучасында тандалган түс камера көрүп жаткан түскө дал келерин чечет. Эгер ошондой болсо, анда текстти таануу иштейт. Кайсы сөз (IMAGE, АРТКА, ОҢГО же СОЛго) пайда болуп, же бурулат (оңго жана солго), айланат (артка) же сүрөттү тартып алат жана аны мурункудай сактайт.

Мен ар кандай түстөр үчүн коддун бир гана бөлүгүн бергем

Коддун көк жана жашыл түстү таануусуна уруксат берүү үчүн, жөн эле кодду көчүрүп, сегменттин башындагы логикалык текшерүүнү өзгөртүңүз жана "pathcolor == (саны)" диалог кутусунун түс тандоолоруна ылайыкташтырып коюңуз (код көрсөтүлсө, көк 2, жашыл 3 болмок).

8 -кадам: Даяр продукт

Даяр продукт
Даяр продукт

Эми Robo-Technician Марстын миссиясы модулдарын чоңойтуп, эч нерсе болбогондо астронавттарга отчет бериши керек.

Эсиңизде болсун, жардын сенсорунун жана lightBumper баалуулуктарынын бардыгын сиздин байкалган баалуулуктарыңызга өзгөртүү керек. Ошондой эле, тажрыйбамдан улам, мен бул долбоорду кара түстүү полдо сынап көрүүнү жакшыраак таптым, эгер ал пол чагылбаса, андан да жакшы. Бул жол менен полдун ортосундагы контрастты жогорулатат, бул робот-техниктин аны туура ээрчишине мүмкүндүк берет.

Сизге Марстын миссиясына кичинекей жардамчы орнотуу жакты деп үмүттөнөм жана имаратты куруп көңүл ачасыз.

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