Съдържание:

IRobot Create-Mars Expedition Rover Mark I: 4 стъпки
IRobot Create-Mars Expedition Rover Mark I: 4 стъпки

Видео: IRobot Create-Mars Expedition Rover Mark I: 4 стъпки

Видео: IRobot Create-Mars Expedition Rover Mark I: 4 стъпки
Видео: STRANGE PARADIGMS - 04 - News and Chat - UFOs - Paranormal 2024, Юли
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Тази инструкция ще ви научи как да настроите iRobot Create чрез кодиране MatLab. Вашият робот ще има способността да търси минерали чрез разграничаване на форми, да маневрира пресечен терен чрез използване на сензори за скали и да има възможност за ръчно управление чрез емисия на живо.

Стъпка 1: Консумативи

Консумативи
Консумативи

За този проект ще ви е необходим iRobot Create, който е програмируема версия на робот -прахосмукачка Roomba. Роботът е оборудван с всички сензори, необходими за този проект, по -специално сензори за удари, сензори за скали и сензори "Light Bump". Ще ви трябват също Raspberry Pi и видеокамера, използвана за безжична комуникация, програмиране на живо и видео емисия на живо. И накрая, ще ви е необходим 3D отпечатан монтаж за Raspberry Pi и камерата.

Стъпка 2: Разработете кодиране, за да задоволите желания резултат

Разработете кодиране, за да задоволите желания резултат
Разработете кодиране, за да задоволите желания резултат

След като свържете вашата Roomba, ще трябва да създадете Matlab код, който ще ви даде желаните резултати след желаните от вас входове.

Кодът може да се види тук:

%Проект Roomba%Брентен Арнолд (barnol15); Джулиан Корн (qdp218); Mike Heal (mheal) %4/11/19 %Описание на проблема: Създайте ровър, който да помага на хората по време на %проучване/обитаване на Марс. %Метод на решение: Търсете органично (зелено) вещество чрез използване на %светлинни брони, сензори за скали и камера, за да проверите за органични вещества. Позволете на ровъра да се движи по неравен терен чрез използването на брони, сензори за скали и сензори за височина на колелата. Дайте възможност на хората да контролират ровъра от %безопасно разстояние и ръчно да търсят минерали. choices = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Три опции в диалоговото меню Настройка = меню ('', възможности за избор), ако Настройка> 0 %Ако е избрана опция, поискайте избор за потвърждение от потребителя2 = {'Да', 'Не'} %Създайте масив от клетки за "да" или "Не "choice Confirm = menu (['You selected"' choices {Setting} '"mode.'], choices2) %Потвърдете избора на потребителски настройки, ако Confirm == 1 if Setting == 1 %Проверете дали е избрана настройката" LIFE "i = 0, докато i == 0 r.setLEDDigits (num2str ('LIFE')) %Показване на 'LIFE' на светодиода за i = 1: 100 r.setDriveVelocity (0.05) %Преместване на roomba напред при 0,05 m/sy = r.getCliffSensors %Извличане и съхраняване на стойностите на сензора за скали в клетъчната структура "y" l = r.getLightBumpers %Извличане и съхраняване на стойности на леки удари в структурата "f", ако l.наляво> 100 %Проверете дали лявата светлинна броня е покрита r.moveDistance (-0.05) %Преместване на roomba назад 0,05 метра r.turnAngle (20) %Завъртане на roomba на 20 градуса CCW img = r.getImage %Вземете изображение от камерата на малинов пай на roomba rect = [100 0 150 150]; img = imcrop (img, rect) %изрязване на изображението, за да се фокусира върху центъра червено = средно (средно (img (:,:, 1))) %средна интензивност на червено зелено = средно (средно (img (:,:, 2))) %средна интензивност на зелено синьо = средна (средна (img (:,:, 3))) %средна интензивност на синьото, ако зелено> червено && зелено> синьо %Проверете дали растението е на снимката d = msgbox (['Животът е намерен! ']); %Показване на кутия със съобщение „Животът е намерен!“чакане (d); end elseif l.leftFront> 100 %Проверете дали е ляво/предната светлинна броня е покрита r.moveDistance (-0.05) %Преместете roomba назад 0,05 метра img = r.getImage %Вземете изображение от камерата на малинов пай на roomba и съхранявайте в променлива 'img 'rect = [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 %Вземете изображение от камерата на малинов пай на roomba и съхранявайте в променлива 'img 'rect = [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 %Вземете изображение от камерата на малинов пай на roomba и съхранявайте в променлива 'img 'rect = [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 %Вземете изображение от камерата на малинов пай на roomba и съхранявайте в променлива 'img 'rect = [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) %Move roomba назад 0,05 метра r.turnAngle (-20) %Rotate roomba 20 градуса CW img = r.getImage %Вземете изображение от rasberry pie камера на roomba и съхраняване в променлива 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %изрязване на изображението, за да се фокусира върху центъра червено = средно (средно (img (:,:, 1))) %средна интензивност на червено зелено = средно (средно (img (:,:, 2))) %средна интензивност на зелено синьо = средна (средна (img (:,:, 3))) %средна интензивност на синьото, ако зелено> червено && зелено> синьо %Проверете дали растението е на снимката d = msgbox (['Животът е намерен! ']); %Показване на кутия със съобщение „Животът е намерен!“чакане (d); край иначе ако y.leftFront <1500 %Проверете дали лявата/предната част на roomba е извън скалата r.moveDistance (-0.1, 0.05) %Преместете roomba назад 0.1 метра при 0.05 m/s r.turnAngle (-5) %Завъртете roomba 5 градуси CW в противен случай отпред <1500 %Проверете дали дясната/предната част на румба е извън скалата r.moveDistance (-0,1, 0,05) %Преместете roomba назад 0,1 метра при 0,05 m/s r.turnAngle (5) %Rotate roomba 5 градуси CCW иначе, ако y.наляво <1000 %Проверете дали лявата страна на roomba е извън скалата r.moveDistance (-0.05, 0.05) %Преместете roomba назад 0,05 метра при 0,05 m/s r.turnAngle (-10) %Завъртете roomba 10 градуса CW elseif y.right0 %Run, ако бутонът е натиснат, ако Continue == 1 i = 0 %Продължете да търсите живот else i = 1 %End LIFE mode end end end elseif Настройка == 2 %Проверете дали е избрана настройката "ROUGH TERRAIN" i = 0, докато i == 0 r.setLEDDigits (num2str ('RGH')) %Дисплей 'Rough' на LED дисплея за i = 1: 1000 r.setDriveVelocity (0.05) %Задайте скоростта на задвижване на roomba на 0,05 m/sx = r.getBumpers %Извличане и съхраняване на стойностите на сензора на бронята в структурата "x" y = r.get CliffSensors %Извличане и съхраняване на стойностите на сензора за скали в структурата "y", ако x.right == 1 %Проверете дали дясната броня е натисната r.turnAngle (10) %Завъртете roomba 10 градуса CCW иначе x.left == 1 %Проверете дали е наляво бронята е натисната r.turnAngle (-10) %Завъртете roomba 10 градуса CW иначе x.front == 1 %Проверете дали предната броня е натисната r.turnAngle (20) %Завъртете roomba 20 градуса CCW иначе 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) %Преместете roomba назад 0.05 метра при 0.05 m/s r.turnAngle (-5) %Завъртете roomba на 5 градуса CW в противен случай отпред фронт < 1500 %Проверете дали дясната предна част на roomba е извън скалата r.moveDistance (-0.05, 0.05) %Преместете roomba назад 0.05 метра при 0.05 m/s r.turnAngle (5) %Rotate roomba 5 градуса CCW иначе наляво <1000 %Проверете дали лявата част o f roomba е извън скалата r.moveDistance (-0.05, 0.05)%Преместете roomba назад 0,05 метра при 0,05 m/s r.turnAngle (-10)%Завъртете roomba 10 градуса CW иначе y. right0 ако продължите == 1 i = 0 %Продължете неравен терен иначе i = 1 %Край край на неравен терен край иначе %Ръчен режим i = 0 r.setLEDDigits (num2str ('USER')) % Ход; S - Stop Rover; ESC - Контрол на крайния потребител; A - Намерете ресурс ']); чакане (d); while i == 0 r.showCamera %Отваряне на емисията на Rasberry Pie камера на живо в отделен прозорец D = getkey (1) %Клавиш за извличане, натиснат от потребителя, съхранява ASCII стойността като променлива D, ако D == 30 %Проверете дали стрелката "нагоре" има беше натиснат r.setDriveVelocity (0.1) %Изпратете roomba напред при 0.2 m/s иначе D D == 28 %Проверете дали стрелката "ляво" е натисната r.setDriveVelocity (0) %Спрете roomba да се движи напред или назад r.turnAngle (15, 0,05) %Завъртете roomba на 45 градуса CCW при 0,05 m/s иначе D D == 31 %Проверете дали стрелката "надолу" е натисната r.setDriveVelocity (-0,1) %Преместете roomba назад при 0,2 m/s иначе D == 29 % Проверете дали стрелката "надясно" е натисната r.setDriveVelocity (0) %Спрете roomba да се движи напред или назад r.turnAngle (-15, 0,05) %Завъртете roomba на 45 градуса CW при 0,05 m/s иначе D == 27 %Проверете дали натиснат е бутонът "esc" (бягство) i = 1 %Промяна на стойността на променливата "i" за излизане от цикъла d = msgbox ('Излизане от "Потребителски контрол"') %Нека потребителят знае, че ръчният режим се излиза в противен случай, ако D == 115 %Проверете дали е натиснат клавиша "s" r.setDriveVelocity (0) %Спрете roomba от напред или назад в противен случай, ако D == 97 %Проверете дали "a" е натиснат image = r.getImage; imwrite (image, 'image.png') W = Classify (image) K = mode (W) if K == 3 d = msgbox ('Resource found') %Показва, ако правоъгълен ресурс е открит waitfor (d); %Изчакайте потребителят да затвори полето за съобщение "d" elseif K == 0 d = msgbox ('Not Resource:(') %Показва, ако правоъгълният ресурс не е открит waitf (d); %Изчакайте потребителят да затвори полето за съобщение "d" end else d = msgbox ('Not valid key input.') %Показва, ако потребителят затваря менюто "изберете настройка" waitfor (d); %Изчакайте потребителят да затвори полето за съобщения "d" end waitfor (d); %Wait for потребител за затваряне на полето за съобщение "d" end end end else d = msgbox ('Goodbye') %Казва сбогом, ако опциите са затворени end waitfor (d);

Стъпка 3: Тестване

Тестване
Тестване

След като кодът ви бъде написан, ще трябва да тествате вашата Roomba. Въпреки че кодът ви може да изглежда правилен, много от вашите стойности, особено за цвят или форма, ще трябва да бъдат променени, за да разпознаете правилно обектите, които искате вашата Roomba да идентифицира.

Стъпка 4: Наблюдавайте визуални изходи

Наблюдавайте визуални изходи
Наблюдавайте визуални изходи
Наблюдавайте визуални изходи
Наблюдавайте визуални изходи

Ще бъде много очевидно дали успешно сте програмирали вашата Roomba въз основа на нейните визуални изходи.

Изходите включват:

  • Откриване на форма: способността на Roomba да различава правилно формите, за да намери правилните минерали
  • Маневри по груб терен: Избягва скали или тъмни зони
  • Ръчен режим: Емисия на живо и възможност за управление на Roomba
  • Снимки: Снимки на минерали
  • Life Found !: Текстово поле MatLab, което показва, че вашето растение е идентифицирало органичен живот.

Това е краят на нашия урок, насладете се на новия си експедиционен марсоход Mars!

Препоръчано: