Съдържание:

Проект Mars Roomba UTK: 4 стъпки
Проект Mars Roomba UTK: 4 стъпки

Видео: Проект Mars Roomba UTK: 4 стъпки

Видео: Проект Mars Roomba UTK: 4 стъпки
Видео: Мой новый 3D принтер Elegoo Mars 4 9K 2024, Юли
Anonim
Проект Mars Roomba UTK
Проект Mars Roomba UTK
Проект Mars Roomba UTK
Проект Mars Roomba UTK

ОТКАЗ ОТ ОТГОВОРНОСТ: ТОВА ЩЕ РАБОТИ САМО, АКО СТАЯТА Е НАСТРОЕНА В А

МНОГО СПЕЦИФИЧЕН НАЧИН, ТОЗИ ИНСТРУКЦИИ СА СЪЗДАДЕНИ И НАМЕРЕНИ ДА СЕ ИЗПОЛЗВАТ ОТ УНИВЕРСИТЕТА НА ТЕНЕСИРАНИТЕ СТУДЕНТИ И ФАКУЛТЕТА

Този код се използва за настройка на Roomba за изпълнение на локално написан и запазен код в MATLAB. Това няма да работи, ако не можете да получите необходимите библиотеки от уебсайта на университета в Тенеси. Ако имате библиотеки, можете да ги използвате, за да програмирате собствената си Roomba, използвайки функциите в библиотеката. Тази инструкция ви учи как да инсталирате библиотеките, да създадете папка за целия код и как да кодирате и използвате програмата, която сме предоставили по -долу.

Необходими материали:

· Roomba

· MATLAB

· Камера Raspberry Pi и Pi

Стъпка 1: Вземете библиотеките

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

Стъпка 2: Писане на програмите

Има доста функции, които могат да се използват в програмата, тези функции могат да бъдат достъпни с помощта на командата "doc roomba". Използвайки тези функции, можете да управлявате вашата Roomba по много различни начини. Кодът, даден по -долу, използва сензорите за удари, сензори за светлинна лента, сензори за камера и скали по различни начини за създаване на марсоход. Използвахме сензорите за удар, за да открием, когато Roomba удари обект, когато това се случи, роботът ще се обърне, ще се обърне и ще продължи да се движи. Преди Roomba да удари обект, светлинната лента ще открие обекта и ще забави Roomba, така че когато се удари в обекта, за да активира сензора за удари, Roomba ще бъде по -малко повреден/засегнат от удара. Камерата търси вода или лава на повърхността, ако няма намерена течност, тогава роботът ще продължи да търси, ако има намерена вода, роботът ще изпрати съобщение до операторите. Сензорите за скали са проектирани да спрат робота, ако той се доближи до скала. Ако роботът усети скала, той ще се обърне и ще се обърне, за да избегне падане.

Стъпка 3: Код

Копирайте и поставете това в MATLAB файл, който се намира в същата папка като библиотеките

functionMainRoombaFile (r)

r.setDriveVelocity (0,1, 0,1)

докато true % Infinte while цикъл за поддържане на код

dontFall = cliffCheck (r) % Присвоява променлива „dontFall“на функцията „cliffCheck“

if dontFall % if операторът да продължи в кода след като 'cliffCheck' приключи

r.setDriveVelocity (0.1, 0.1) % Поддържа Roomba да се движи след „cliffCheck“

end % завършва „dontFall“if израз

bumper = bumpcheck (r) % Присвоява променлива „bumper“на функцията „bumpcheck“

if bumper % if инструкцията да продължи в кода след „bumpcheck“е завършена

r.setDriveVelocity (0.1, 0.1) % Поддържа Roomba да се движи, след като „bumpcheck“приключи

end % завършва „bumper“ако изявлението

течности = LiquidCheck (r) % Присвоява променлива „течности“на функцията „LiquidCheck“

if tequids % if операторът да продължи в кода след „LiquidCheck“е завършен

r.setDriveVelocity (0.1, 0.1) % Поддържа Roomba да се движи след завършване на „LiquidCheck“

end % завършва „течности“if израз

lightbumper = lightcheck (r) % Присвоява променлива „lightbumper“на функцията „lightcheck“

пауза (0,1) % За кратко пауза, за да се избегне непрекъсната итерация на цикъла

end % завършва безкраен цикъл while

end % завършва функцията

функция bumper = bumpcheck (r) % Създава функция "bumpcheck"

bumpdata = r.getBumpers % Присвоява всички данни от бронята към променлива „bumpdata“

броня = bumpdata.право || bumpdata.left || bumpdata.front % Създава съхранена променлива, „броня“, за различните брони

ако bumpdata.right> 0 % Ако изявление за предизвикване на различни функции на roomba да се случи, ако бронята е ударена

r.stop % Спира Roomba

r.moveDistance (-0.3, 0.2) % Обръща Roomba 0.3m

r.turnAngle (90, 0.5) % Завърта Roomba на 90 градуса възможно най -бързо

край

ако bumpdata.front> 0

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0.5) % Завърта Roomba на случаен интервал между 0 и 270 градуса възможно най -бързо

край

ако bumpdata.left> 0

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0.5) % Завърта Roomba -90 градуса възможно най -бързо

край

край

функция lightbumper = lightcheck (r) % Създава функция "lightcheck"

lightdata = r.getLightBumpers % Присвоява всички данни от сензора за светлинен удар към променлива „lightdata“

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Създава съхранена променлива „lightbumper“за различните светлинни брони

if lightbumper % If изявление за извикване на данните от lightbumper отгоре

if lightdata.left> 10 % If изявление за предизвикване на различни функции на румбата, ако светлинната броня усети повече от 10 стойности

r.setDriveVelocity (0.05, 0.05) % Забавя roomba, за да се подготви за удар

end % завършва първоначалния if израз

ако lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

край

ако lightdata.right> 10

r.setDriveVelocity (0.05, 0.05)

край

ако lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

край

end % завършва „lightbumper“ако изявлението

end %завършва функцията lightcheck

функция dontFall = cliffCheck (r) % Създава функция 'cliffCheck'

данни = r.getCliffSensors; % Присвоява всички данни от сензора за скали на променливи „данни“

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Създава съхранена променлива „dontFall“за различните сензори за скали

if dontFall % If изявление за извикване на данните от сензора за скала отгоре

if data.left <1010 % If изявление за предизвикване на различни функции на roomba, ако сензорът на скалата усети по -малко от 1010 стойности

r.stop

r.moveDistance (-0.2, 0.2) % Обръща Roomba 0.2m

r.turnAngle (-90, 0.5) % Завърта Roomba -90 градуса възможно най -бързо

elseif data.leftFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Завърта Roomba на 90 градуса възможно най -бързо

elseif data.rightFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Завърта Roomba на 90 градуса възможно най -бързо

elseif data.right <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Завърта Roomba на 90 градуса възможно най -бързо

край

край

край

функция течности = LiquidCheck (r) % Създава функция "LiquidCheck"

докато true %стартира безкраен цикъл за калибриране

img = r.getImage; % чете камерата от робота

image (img) % показва изображението в прозорец с фигура

red_mean = средно (средно (img (200, 150, 1)))% чете средното количество червени пиксели

blue_mean = средно (средно (img (200, 150, 3)))% чете средното количество сини пиксели

течности = червено_средно || blue_mean % Създава съхранена променлива, „течности“, за различните цветови променливи

if течности % If изявление за извикване на данните за изображението отгоре

if red_mean> 170 % If изявление, за да предизвика различни функции на roomba, ако камерата види среден червен цвят по -голям от 170

r.stop % спира roomba

r.setLEDCenterColor (255) % задава кръг на червен цвят

r.setLEDDigits (); % изчистване на дисплея

f = лента за изчакване (0, '*ВХОДЯЩО СЪОБЩЕНИЕ*'); % създава лента за изчакване за зареждане на съобщение

r.setLEDDigits ('HOT'); % настройва LED дисплея да извежда „HOT“

пауза (0,5) %Кратка пауза, за да прочетете информацията, която е изплатена

r.setLEDDigits ('LAVA'); % настройва LED дисплея да извежда „LAVA“

пауза (0,5)

чакаща лента (.33, f, '*ВХОДЯЩО СЪОБЩЕНИЕ*'); %създава увеличение в лентата за изчакване

r.setLEDDigits ('HOT');

пауза (0,5)

r.setLEDDigits ('LAVA');

пауза (0,5)

чакаща лента (.67, f, '*ВХОДЯЩО СЪОБЩЕНИЕ*'); % създава увеличение в лентата за изчакване

r.setLEDDigits ('HOT');

пауза (0,5)

r.setLEDDigits ('LAVA');

чакаща лента (1, f, '*ВХОДЯЩО СЪОБЩЕНИЕ*'); %завършва лентата за изчакване

пауза (1)

close (f) %затваря лентата за изчакване

r.setLEDDigits (); % изчиства LED дисплея

затвори всички %Затваря всички предишни прозорци

оси ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Изчиства графичния прозорец на осите и диаграмата

y = 0,5; % задава y-позицията на текста в прозореца за начертаване

х = 0,06; % задава позицията x на текста в прозореца за начертаване

title ('FROM MARS ROOMBA', 'fontsize', 32) % Добавя заглавие към прозореца за начертаване

quadeqtxt = 'ОПАСНА ЛАВА'; % Задава променливата „quadeqtxt“на изход 0

текст (x, y, quadeqtxt, 'интерпретатор', 'латекс', 'размер на шрифта', 36); % показва текста на quadeq в прозореца за начертаване

r.moveDistance (-0.2, 0.2) %обръща roomba 0.2m

r.turnAngle (180, 0.5) %завърта roomba на 180 градуса възможно най -бързо

r.setLEDCenterColor (128, 128); % задава оранжевия централен светодиод на roomba

затвори всички %затваря останалите отворени прозорци

elseif blue_mean> 175 % Ако изявлението за предизвикване на различни функции на roomba да се случи, ако камерата види среден син цвят по -голям от 175

r.stop % спира roomba

r.setLEDCenterColor (255) % задава кръг на червен цвят

r.setLEDDigits (); % изчистване на дисплея

f = лента за изчакване (0, '*ВХОДЯЩО СЪОБЩЕНИЕ*'); % създава лента за изчакване за зареждане на съобщение

r.setLEDDigits ('LOOK'); % настройва LED дисплея на изход „LOOK“

пауза (0,5) %Кратка пауза за четене на изведена информация

r.setLEDDigits ('WATR'); % настройва LED дисплея да извежда „WATR“

пауза (0,5)

чакаща лента (.33, f, '*ВХОДЯЩО СЪОБЩЕНИЕ*'); %създава увеличение в лентата за изчакване

r.setLEDDigits ('LOOK');

пауза (0,5)

r.setLEDDigits ('WATR');

пауза (0,5)

чакаща лента (.67, f, '*ВХОДЯЩО СЪОБЩЕНИЕ*'); % създава увеличение в лентата за изчакване

r.setLEDDigits ('LOOK');

пауза (0,5)

r.setLEDDigits ('WATR');

чакаща лента (1, f, '*ВХОДЯЩО СЪОБЩЕНИЕ*'); %попълва лентата за изчакване

пауза (1)

close (f) %затваря лентата за изчакване

r.setLEDDigits (); % изчиства LED дисплея

затвори всички %Затваря всички предишни прозорци

оси ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Изчиства графичния прозорец на осите и диаграмата

y = 0,5; % задава y-позицията на текста в прозореца за начертаване

х = 0,06; % задава позицията x на текста в прозореца за начертаване

title ('FROM MARS ROOMBA', 'fontsize', 32) % Добавя заглавие към прозореца за начертаване

quadeqtxt = 'НАМЕРЕНА ВОДА'; % Задава променливата „quadeqtxt“на изход 0

текст (x, y, quadeqtxt, 'интерпретатор', 'латекс', 'размер на шрифта', 36); % показва текста на quadeq в прозореца за начертаване

r.moveDistance (-0.2, 0.2) %обръща roomba 0.2m

r.turnAngle (180, 0.5) %завърта roomba на 180 градуса възможно най -бързо

r.setLEDCenterColor (128, 128); % задава оранжевия централен светодиод на roomba

затвори всички %затваря останалите отворени прозорци

end %завършва 'red_mean' if израз

end %завършва „течности“if израз

end % затваря безкраен цикъл while

край % завършва функция "LiquidCheck"

Стъпка 4: Стартирайте кода

След като сте копирали и поставили кода в MATLAB, трябва да се свържете с Roomba. След като Roomba е свързан, трябва да дадете име на променливата r. Функциите използват променливата r, когато се позовават на Roomba, така че Roomba трябва да бъде дефинирана като променлива r. След стартиране на кода Roomba трябва да работи според инструкциите.

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