Оглавление:

Roomba Explorer: 4 шага
Roomba Explorer: 4 шага

Видео: Roomba Explorer: 4 шага

Видео: Roomba Explorer: 4 шага
Видео: Что делать, если робот-пылесос крутится на месте и отказывается работать?! Чистим робот-пылесос. 2024, Ноябрь
Anonim
Roomba Explorer
Roomba Explorer

Используя MATLAB и Create2 Robot от iRobot, этот проект будет исследовать различные области неизвестного местоположения. Мы использовали датчики робота, чтобы помочь маневрировать на опасной местности. Получив фотографии и видеопоток с подключенного Raspberry Pi, мы смогли определить препятствия, с которыми столкнется робот, и они будут классифицированы.

Детали и материалы

Для этого проекта вам понадобится

-компьютер

-новейшая версия MATLAB (для этого проекта использовался MATLAB R2018b)

- набор инструментов roombaInstall

-iRobot's Create2 Робот

-Raspberry Pi с камерой

Шаг 1: Инициализация и датчики

Инициализация и датчики
Инициализация и датчики

Перед началом любого программирования мы загрузили набор инструментов roombaInstall, который позволял получить доступ к различным компонентам робота.

Изначально мы создали графический интерфейс для инициализации любого робота. Для этого вам нужно ввести номер Робота в качестве входных данных. Это предоставит доступ для запуска нашей программы роботу. Мы работали над тем, чтобы заставить робота маневрировать через множество ландшафтов, с которыми он может столкнуться. Мы внедрили датчики обрыва, датчики световых ударов и датчики физических столкновений, используя их выходы для отключения робота с целью изменения его скорости и / или направления. Когда какой-либо из шести датчиков светового удара обнаруживает объект, значение, которое они выводят, будет уменьшаться, в результате чего скорость робота уменьшится, чтобы избежать столкновения на полной скорости. Когда робот наконец сталкивается с препятствием, датчики физического удара сообщат значение больше нуля; из-за этого робот остановится, поэтому больше не будет столкновений, и можно будет задействовать больше функций. Для датчиков обрыва они будут считывать яркость окружающей среды. Если значение больше 2800, мы определили, что робот находится на устойчивой земле и в безопасности. Но, если значение меньше 800, датчики обрыва будут обнаруживать обрыв, немедленно останавливаясь, чтобы не упасть. Было определено, что любое промежуточное значение представляет воду и заставит робота прекратить свое действие. Используя вышеуказанные датчики, скорость робота изменяется, что позволяет нам лучше определять, существует ли какая-либо опасность.

Ниже приведен код (из MATLAB R2018b)

%% Инициализация

dlgPrompts = {'Номер Roomba'};

dlgTitle = 'Выберите Roomba';

dlgDefaults = {''};

opts. Resize = 'вкл';

dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlgDefaults, opts)% Создать окно, в котором пользователю предлагается ввести свой номер Roomba

n = str2double (dlgout {1});

r = roomba (n); % Инициализирует указанную пользователем Roomba %% Определение скорости с помощью датчиков светового удара при истинном s = r.getLightBumpers; % получить датчики светового удара

lbumpout_1 = extractfield (s, 'влево'); % принимает числовые значения датчиков и делает их более удобными для использования lbumpout_2 = extractfield (s, 'leftFront');

lbumpout_3 = extractfield (s, 'leftCenter');

lbumpout_4 = extractfield (s, 'rightCenter');

lbumpout_5 = extractfield (s, "rightFront");

lbumpout_6 = extractfield (s, 'право');

lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6]% преобразует значения в матрицу

sLbump = сортировка (фунты); % сортирует матрицу к наименьшему значению, может быть извлечен

lowLbump = sLbump (1); скорость = 0,05 + (lowLbump) *. 005% с использованием самого низкого значения, которое представляет близкие препятствия, для определения скорости, более высокая скорость, когда ничего не обнаружено

r.setDriveVelocity (скорость, скорость)

конец

% Физических бамперов

b = r.getBumpers; % Вывод истина, ложь

bsen_1 = extractfield (b, 'слева')

bsen_2 = extractfield (b, 'право')

bsen_3 = extractfield (b, 'перед')

bsen_4 = extractfield (b, 'leftWheelDrop')

bsen_5 = extractfield (b, 'rightWheelDrop')

bumps = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = sum (бездельники)

если tbump> 0 r.setDriveVelocity (0, 0)

конец

% Датчики обрыва

c = r.getCliffSensors %% 2800 безопасно, иначе вода

csen_1 = extractfield (c, 'слева')

csen_2 = extractfield (c, 'право')

csen_3 = extractfield (c, 'leftFront')

csen_4 = extractfield (c, 'rightFront')

скалы = [csen_1, csen_2, csen_3, csen_4]

ordcliff = сортировка (скалы)

если ordcliff (1) <2750

r.setDriveVelocity (0, 0)

если обрыв <800

disp 'обрыв'

еще

disp 'вода'

конец

r. TurnAngle (45)

конец

Шаг 2: Получение данных

После срабатывания датчиков физического удара робот внедрит свой на борту Raspberry Pi, чтобы сфотографировать препятствие. После фотографирования, используя распознавание текста, если на изображении есть текст, робот определит, что это за препятствие и что оно говорит.

img = r.getImage; imshow (img);

imwrite (img, 'imgfromcamera.jpg')

photo = imread ('imgfromcamera.jpg')

ocrResults = ocr (фото)

признанныйТекст = ocrResults. Text;

фигура;

imshow (фото) текст (220, 0, распознанный текст, 'BackgroundColor', [1 1 1]);

Шаг 3: Завершение миссии

Когда робот определяет, что препятствие - ДОМ, он завершит свою миссию и останется дома. После завершения миссии робот отправит по электронной почте уведомление о том, что он вернулся домой, и отправит изображения, которые он сделал во время своего путешествия.

% Отправка электронной почты

setpref ('Интернет', 'SMTP_Server', 'smtp.gmail.com');

setpref ('Интернет', 'Электронная почта', '[email protected]'); % почтовый аккаунт для отправки из setpref ('Интернет', 'SMTP_Username', 'введите адрес электронной почты отправителя'); % senders username setpref ('Интернет', 'SMTP_Password', 'введите пароль отправителя'); % Отправителя пароль

props = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'истина'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('Введите адрес электронной почты для получения', 'Roomba', 'Roomba вернулся домой !!', 'imgfromcamera.jpg')% почтовый аккаунт для отправки

На этом робот готов.

Шаг 4: Заключение

Заключение
Заключение

Включенная программа MATLAB отделена от всего сценария, который использовался с роботом. В окончательном варианте обязательно поместите весь код, за исключением этапа инициализации, в цикл while, чтобы убедиться, что бамперы постоянно работают. Эту программу можно редактировать в соответствии с потребностями пользователя. Показана конфигурация нашего робота.

* Напоминание: не забывайте, что набор инструментов roombaInstall необходим для взаимодействия MATLAB с роботом и бортовым Raspberry Pi.

Рекомендуемые: