Мазмуну:

MATLAB көзөмөлдөгөн Roomba: 5 кадам
MATLAB көзөмөлдөгөн Roomba: 5 кадам

Video: MATLAB көзөмөлдөгөн Roomba: 5 кадам

Video: MATLAB көзөмөлдөгөн Roomba: 5 кадам
Video: ТАЛУК - ТАЛУК ДЕП КАНТИП АЙТАТ? #талук (TALUK - HOW TO SAY TALUK? #taluk) 2024, Ноябрь
Anonim
MATLAB көзөмөлдөгөн Roomba
MATLAB көзөмөлдөгөн Roomba
MATLAB көзөмөлдөгөн Roomba
MATLAB көзөмөлдөгөн Roomba

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

1 -кадам: Бөлүктөр жана материалдар

Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар

MATLAB 2018a

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

iRobot түзмөк түзүү

-Бул түзмөк программалоо жана коддоо үчүн атайын жасалган атайын түзүлүш. (Бул чыныгы вакуум эмес)

Raspberry Pi (камера менен)

- Бул iRobotтун мээси катары иштеген кымбат эмес компьютердик такта. Бул кичинекей болушу мүмкүн, бирок ал көп нерсеге жөндөмдүү. Камера кошумча кошумча болуп саналат. Ал ошондой эле өзүнүн функцияларын жана буйруктарын алуу үчүн малина пи колдонот. Жогоруда сүрөттөлгөн камера Теннесси Университетинин Инженердик Негиздер бөлүмдөрү тарабынан түзүлгөн 3D басылган стендге орнотулган.

2 -кадам: Roomba Database File

Roomba маалымат базасынын файлы
Roomba маалымат базасынын файлы

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

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

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

3 -кадам: Roomba менен туташуу

Биринчиден, сиз роботуңуз малина pi тактасына микро USB сайгыч аркылуу туташканын текшеришиңиз керек. Андан кийин компьютериңиз менен роботту ошол эле WiFiга туура туташтырышыңыз керек. Бул бүткөндөн кийин, роботту күйгүзүп, робот базасынын файлында берилген буйрукту колдонуп ага туташа аласыз. (Роботту колдонуудан мурун жана кийин ар дайым оор абалга келтирүү). Мисалы, биз роботубузга туташуу үчүн "r.roomba (19)" буйругун колдонобуз, r өзгөрмөсүн биздин түзмөккө ыйгарабыз. Бул биздин өзгөрмөнү каалаган убакта шилтеме бере турган структура катары орноткон маалымат базасынын файлына кайрылат.

4 -кадам: Код

Кодекс
Кодекс
Кодекс
Кодекс

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

Биз "r.setDriveVelocity (.06)" жөнөкөй буйругу менен баштадык, ал роботтун алдыга ылдамдыгын.06 м/с деп белгилейт. Бул роботту алдын ала кыймылга келтирүү үчүн

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

чыныгы % while цикл "жалган" нерсе пайда болгонго чейин барат (бул учурда ал чексиз уланат) data = r.getCliffSensors; data2 = r.getBumpers; % жардын сенсорунун маанилери жөнүндө маалыматтарды үзгүлтүксүз алат жана аларды % img = r.getImage өзгөрмөсүнө дайындайт; % Орнотулган камерадан % сүрөт алат % image (img); % Алынган сүрөттү көрсөтөт % red_mean = орточо (орточо (img (:,,, 1))); % Жашыл түс үчүн орточо маанини алат data.rightFront <2000 r.turnAngle (-2); % Roomba болжол менен.2 даража CW айланат, оң алдыңкы жардын сенсорлорунун мааниси 2000 r.setDriveVelocity (.05) төмөн түшүп кеткенден кийин; elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % Roombaга болжол менен.2 м/с ылдамдыкта улантууну айтат, эгерде оң алдыңкы жана сол алдыңкы сенсорлордун эки мааниси 2000 % дан төмөн түшсө r.turnAngle (0); % Roombaга жогоруда айтылган шарттар туура болсо бурулбоону айтат

elseif data2.right == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05); elseif data2.left == 1 r.moveDistance (-. 2); r.turnAngle (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05);

Бул циклден кийин, камера аркылуу алынган маалыматтарды иштетүүчү дагы бир циклди киргизебиз. Биз эгерде белгилүү бир программаны (alexnet) колдонуп, сүрөттү тааныган, ал эми if операторун колдонобуз жана ал сүрөттү аныктагандан кийин ал мобилдик түзмөктүн алыстан башкаруусун дароо иштетет

anet = alexnet; % Alexnet терең үйрөнүүсүн чыныгы % Infinite, ал эми цикл img = r.getImage; img = imresize (img, [227, 227]); label = классификациялоо (анет, img); эгер этикет == "кагаз сүлгү" || label == "муздаткыч" label = "суу"; акыркы сүрөт (img); аталышы (char (label)); тартылган;

Убакыттык цикл түзмөктү телефонубуз менен башкарууга мүмкүндүк берет, бул маалыматты телефондун гироскопунан алат жана биз аны матрицага туташтырабыз, ал маалыматты үзгүлтүксүз түрдө кайра MATLABка компьютерге өткөрүп берет. Биз матрицанын маалыматын окуган жана телефондун гироскопунун белгилүү бир маанилерине таянып түзмөктү кыймылга келтирүүчү if операторун колдонобуз. Бул мобилдик түзмөктүн Багыттоо сенсорлорун колдонгонубузду билүү маанилүү. Жогоруда айтылган үчтөн бир матрица азимут, кадам жана каптал болгон телефондун багыттоо сенсорлорунун ар бир элементи боюнча классификацияланган. Эгерде билдирүүлөр тарап 50дөн ашса же -50дөн төмөн түшсө, анда робот белгилүү бир аралыкты алдыга (оң 50) же артка (терс 50) жылдырат. Жана ошол эле кадамдын наркына да тиешелүү. Эгерде чайырдын баасы 25тен төмөн болсо, анда ал робот 1 градуска (оң 25) же терс 1 градуска (терс 25) бурулат

чыныгы пауза (.1) % Пауза.5 секунд ар бир мааниге чейин контролер = iphone. Orientation; % Айфондун багытынын маанилери үчүн матрицаны Azimuthal = Controller (1) дайындайт; % Матрицанын биринчи маанисин Pitch = Controller (2) өзгөрмөсүнө дайындайт; % Матрицанын экинчи маанисин өзгөрмөгө дайындайт (iPhone капталга кармалганда алдыга жана артка кыйшайтуу) Side = Controller (3); % Матрицанын үчүнчү маанисин өзгөрмөгө дайындайт (iPhone капталында кармалып турганда солго жана оңго кыйшайтыңыз) % Телефондун багытына негизделген чыгууну пайда кылат, эгерде Side> 130 || Side 25 r.moveDistance (-. 1) % Roomba'ны болжол менен 1 метр артка жылдырат, эгер iPhone артка эңкейсе, кеминде 25 degress 25 Side r.turnAngle (-1) %, эгер iPhone эгерде Roomba болжол менен 1 градуска CCW айландырса солго эң аз дегенде 25 градуска эңкейет Pitch <-25 r.turnAngle (1) %, эгер iPhone эң аз дегенде 25 градуска эңкейсе, Roombаны болжол менен 1 градуска айландырат

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

5 -кадам: Жыйынтык

Биз жазган бул код атайын биздин робот үчүн, ошондой эле долбоордун жалпы көз карашы үчүн иштелип чыккан. Биздин максатыбыз роботтун көпчүлүк өзгөчөлүктөрүн колдонгон скважинанын скриптин түзүү үчүн бардык MATLAB коддоо көндүмдөрүн колдонуу болчу. Телефон контроллерин колдонуу сиз ойлогондой кыйын эмес жана биздин код iRobotту коддоо түшүнүгүн жакшыраак түшүнүүгө жардам берет деп үмүттөнөбүз.

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