Съдържание:
- Стъпка 1: Консумативи
- Стъпка 2: Разработете кодиране, за да задоволите желания резултат
- Стъпка 3: Тестване
- Стъпка 4: Наблюдавайте визуални изходи
Видео: IRobot Create-Mars Expedition Rover Mark I: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Тази инструкция ще ви научи как да настроите 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!
Препоръчано:
Каска Iron Man Mark II: 4 стъпки
Каска Iron Man Mark II: Casco réplica mark II de 2 partes, casco y pulsera unidos por cadena que conduce el cableado, alimentado por 4 baterías AA ubicadas en la parte posterior junto al microcontrolador y el switch de encendido.Casco: Servomotores para el cierre y експерт
Най -добрата машина за бирен понг - PongMate CyberCannon Mark III: 6 стъпки (със снимки)
Най -добрата машина за бирен понг - PongMate CyberCannon Mark III: Въведение PongMate CyberCannon Mark III е най -новата и най -модерна технология за бирен понг, която някога е била продавана на обществеността. С новия CyberCannon всеки може да стане най -страховитият играч на масата за бирен понг. Как е това п
Slave Trigger Flash Mark II: 6 стъпки (със снимки)
Slave Trigger Flash Mark II: В тази инструкция ще обясня как да направя истинска (оптична) подчинена задействаща светкавица с минимум компоненти. Има много сложни дизайни, които можете да намерите в интернет, този дизайн е много прост и работи в ярка и слабо осветена среда
Използване на командния модул на IRobot Create с Linux: 4 стъпки
Използване на командния модул на IRobot Create с Linux: Тъй като iRobot не е предоставил на потребителите на Linux начин да използват командния модул, трябваше сам да го разбера. Не се страхувайте, наистина не е трудно. Всичко, което трябва да направите, е да стартирате няколко скрипта. Нека започнем, нали?
Промяна на IRobot Create to Paint: 6 стъпки (със снимки)
Промяна на IRobot Create to Paint: Това е проект за роботика, който вероятно би могъл да бъде завършен от някой, който изобщо няма опит с роботи. Казвам това, защото преди да започна, нямах опит с роботи. Или писане на програми. Всъщност знаех как да рисувам и това беше