Мазмуну:

Roomba Explorer: 4 кадам
Roomba Explorer: 4 кадам

Video: Roomba Explorer: 4 кадам

Video: Roomba Explorer: 4 кадам
Video: Shahzoda - To'kilib | Шахзода - Тукилиб 2024, Ноябрь
Anonim
Roomba Explorer
Roomba Explorer

MATLAB жана iRobotтун Create2 роботун колдонуу менен, бул долбоор белгисиз жердин ар кайсы жерлерин изилдейт. Биз коркунучтуу жерде маневр жасоого жардам берүү үчүн роботтун сенсорлорун колдондук. Тиркелген Raspberry Piден сүрөттөрдү жана видеолорду алуу менен, биз роботтун тоскоолдуктарын аныктай алдык жана алар классификацияланат.

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

Бул долбоор үчүн сизге керек болот

-компьютер

-MATLABнын жаңы версиясы (MATLAB R2018b бул долбоор үчүн колдонулган)

- roombaInstall куралдар кутусу

-iRobotтун Create2 роботу

-Камерасы бар Raspberry Pi

1 -кадам: Баштоо жана сенсорлор

Баштоо жана сенсорлор
Баштоо жана сенсорлор

Кандайдыр бир программалоону баштоодон мурун, биз роботтун ар кандай компоненттерине кирүүгө мүмкүндүк берген roombaInstall куралын жүктөп алдык.

Башында, биз каалаган роботту инициализациялоо үчүн GUI түздүк. Бул үчүн роботтун номерин киргизүү катары терүү керек. Бул роботко биздин программаны иштетүүгө мүмкүнчүлүк берет. Биз роботко туш болгон көптөгөн аймактарда маневр жасоо үчүн иштедик. Биз Cliff Sensors, Light Bump Sensors жана Physical Bump Sensors, алардын ылдамдыгын жана же багытын өзгөртүү үчүн роботту кыдыруу үчүн алардын чыгымдарын колдонуу менен ишке ашырдык. Алты Light Bump Sensorдун кайсынысы болбосун объектти аныктаганда, алар чыгарган мааниси төмөндөйт, бул роботтун ылдамдыгын толук ылдамдыкта кагылышуудан качууга алып келет. Робот акыры тоскоолдук менен сүзүшкөндө, физикалык сокку сенсорлору нөлдөн чоң маанини билдиришет; ушундан улам робот токтойт, андыктан мындан ары кагылышуулар болбойт жана башка функцияларды ишке киргизүүгө болот. Клифф сенсорлору үчүн алар тегерегиндеги аймактын жарыктыгын окушат. Эгерде мааниси 2800дөн жогору болсо, анда биз роботтун туруктуу жерде жана коопсуз болорун аныктадык. Бирок, эгер мааниси 800дөн аз болсо, Cliff Sensors жардан кулап кетпеш үчүн дароо токтойт. Ар кандай маани сууну билдирет деп аныкталган жана роботтун аракетин токтотушуна себеп болот. Жогорудагы сенсорлорду колдонуу менен роботтун ылдамдыгы өзгөрүп, кандайдыр бир коркунуч бар же жок экенин жакшыраак аныктоого мүмкүндүк берет.

Төмөндө код (MATLAB R2018bден)

%% Баштоо

dlgPrompts = {'Roomba саны'};

dlgTitle = 'Бөлмөнү тандаңыз';

dlgDefaults = {''};

opts. Resize = 'on';

dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Колдонуучуну Roomba номерин киргизүүгө үндөгөн терезе түзүү

n = str2double (dlgout {1});

r = Roomba (n); Чыныгы s = r.getLightBumpers, ал эми колдонуучу тарабынан белгиленген Roomba %% Light Bump Sensors ылдамдыгын аныктоону баштайт; % жарык шишик сенсорлорун алышат

lbumpout_1 = extractfield (s, 'left'); % сенсорлордун сандык маанилерин алат жана аларды колдонууга ыңгайлуу кылат lbumpout_2 = extractfield (s, 'leftFront');

lbumpout_3 = extractfield (s, 'leftCenter');

lbumpout_4 = extractfield (s, 'rightCenter');

lbumpout_5 = extractfield (s, 'rightFront');

lbumpout_6 = extractfield (s, 'right');

lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % баалуулуктарды матрицага айландырат

sLbump = сорт (lbout); %матрицаны эң төмөнкү мааниге чейин чыгарууга болот

lowLbump = sLbump (1); ылдамдык =.05+(lowLbump)*.005 %эч нерсе табылбаганда ылдамдыкты, жогорку ылдамдыкты аныктоо үчүн жакын тоскоолдуктарды билдирген эң төмөнкү маанини колдонот

r.setDriveVelocity (ылдамдык, ылдамдык)

аяктоо

% Физикалык бамперлер

b = r.getBampers; %Чыгуу чын, жалган

bsen_1 = extractfield (б, 'сол')

bsen_2 = extractfield (б, "оң")

bsen_3 = extractfield (b, 'front')

bsen_4 = extractfield (b, 'leftWheelDrop')

bsen_5 = extractfield (b, 'rightWheelDrop')

бүдүр = = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = сумма (бумс)

if tbump> 0 r.setDriveVelocity (0, 0)

аяктоо

% Cliff сенсорлору

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

дисп "жар"

башка

дисплей 'суу'

аяктоо

r. TurnAngle (45)

аяктоо

2 -кадам: маалыматтарды алуу

Физикалык сокку сенсорлору иштен чыккандан кийин, робот тоскоолдукту сүрөткө тартуу үчүн Raspberry Pi бортун ишке ашырат. Сүрөткө түшкөндөн кийин, эгерде сүрөттө текст бар болсо, текстти таанууну колдонуп, Робот тоскоолдуктун эмне экенин жана эмне деп жатканын аныктайт.

img = r.getImage; imshow (img);

imwrite (img, 'imgfromcamera.jpg')

сүрөт = imread ('imgfromcamera.jpg')

ocrResults = ocr (сүрөт)

таанылганТекст = ocrResults. Text;

фигура;

imshow (фото) текст (220, 0, таанылганТекст, 'BackgroundColor', [1 1 1]);

3 -кадам: Миссияны аяктоо

Робот тоскоолдуктун ҮЙ экенин аныктаганда, миссиясын бүтүрүп, үйдө калат. Миссия аяктагандан кийин, робот үйүнө кайтып келгендиги тууралуу электрондук почта билдирүүсүн жөнөтөт жана ал саякат учурунда тарткан сүрөттөрдү жөнөтөт.

% Электрондук кат жөнөтүү

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

setpref ('Интернет', 'E_mail', '[email protected]'); setpref жөнөтүү үчүн % почта эсеби ('Интернет', 'SMTP_Username', 'жөнөтүүчүнүн электрондук почтасын киргизүү'); % жөнөтүүчүлөрдүн колдонуучу аты setpref ('Интернет', 'SMTP_Password', 'жөнөтүүчүнүн сырсөзүн киргизүү'); % Жөнөтүүчүлөрдүн сырсөзү

реквизиттер = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('Электрондук кат алууну киргизиңиз', 'Roomba', 'Roomba үйгө кайтты !!', 'imgfromcamera.jpg') % почта эсеби жөнөтүлсүн

Андан кийин робот бүтөт.

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

Жыйынтык
Жыйынтык

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

*Эскертүү: RoombaInstall инструменттер кутусу MATLABтын робот жана Raspberry Pi бортунда иштеши үчүн керек экенин унутпаңыз.

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