Агуулгын хүснэгт:

Цэцэрлэгийн туслах Roomba Bot: 8 алхам
Цэцэрлэгийн туслах Roomba Bot: 8 алхам

Видео: Цэцэрлэгийн туслах Roomba Bot: 8 алхам

Видео: Цэцэрлэгийн туслах Roomba Bot: 8 алхам
Видео: 🎶 ДИМАШ "ОПЕРА 2". История выступления и анализ успеха | Dimash "Opera 2" 2024, Арваннэгдүгээр
Anonim
Цэцэрлэгийн туслах Roomba Bot
Цэцэрлэгийн туслах Roomba Bot

Киара Майерс, Ахмад Альгадир, Мэдисон Типпет нар

Зорилго:

Энэхүү зааварчилгаа нь MATLAB-ийг ашиглан Roomba Bot-ийг хэрхэн програмчлах, цэцэрлэгээр аялахад хангалттай хэмжээгээр боловсорч гүйцсэн дугуй хэлбэртэй жимс/ногоог илрүүлж, хэмжээг нь харгалзан үзэх болно. Энэхүү робот нь танд хэдэн жимс түүж авахад бэлэн болсон, ямар замаар явсан талаар танд мэдэгдэх имэйл илгээдэг.

Онцлог:

  • Гэрлийн мэдрэгч ашиглан ханыг илрүүлж бага зэрэг эргүүлнэ
  • Цэцэрлэгийн төгсгөлд хад мөргөх үед програмыг эвдэхийн тулд овойлт мэдрэгч ашигладаг
  • Цэцэрлэгт байгаа тойргийг илрүүлэх, дараа нь түүний радиусыг тодорхойлохын тулд дүрс боловсруулалтыг ашигладаг
  • Жимс байгаа эсэхийг харуулсан өнгөт соронзон хальсыг илрүүлэхийн тулд хадны мэдрэгч ашигладаг

Алхам 1: Материал ба хангамж:

  • Нэг зөөврийн компьютер
  • MATLAB 2017
  • Roomba вакуум цэвэрлэгч
  • Raspberry Pi
  • Модон блок
  • Цагаан цаас
  • Хар цаас
  • Өнгөт цаасан тууз/нимгэн тууз
  • Том рок

Алхам 2:

Алхам 3: "Цэцэрлэгээ" угсрах

Таныг угсрах
Таныг угсрах
  1. Хар цаасаа аваад янз бүрийн хэмжээтэй тойрог хайчилж ав
  2. Эдгээр хар тойргийг том цагаан цаасан дээр наа

    Жимс илрүүлэхэд энэ ялгаа шаардлагатай болно

  3. Модон чулуугаа ашиглан роботыг жолоодож болох төөрөгдөл шиг цэцэрлэгийн замыг байгуулаарай

    Бид дээр үзүүлсэн шиг U хэлбэрийн замыг сонгосон

  4. Цэцэрлэгийнхээ төгсгөлд робот үүнийг хийж байгааг мэдэхийн тулд чулуу эсвэл хаалга эсвэл өөр зүйл нэмж оруулаарай
  5. Цагаан цаасаа цэцэрлэгийн хананд дугуйлан наа

    Бидний хана камерын хувьд хэт богино байсан тул бид хувингаар наажээ

  6. Жимсний урд талд өнгөт тууз/өнгөт цаасны нимгэн туузыг газар тавь

Алхам 4: Код бичих

Цэцэрлэгээр аялах

Бөмбөг мэдрэгчийг ашиглах: Хөтөлбөрийг ажиллуулахын тулд бид кодыг эвдэх хүртэл янз бүрийн if хэллэгүүдээр дамждаг кодчилолыг хэсэг хугацааны дотор байрлуулдаг. Хэрэв ямар нэгэн бампер цохигдвол энэ нь тэдний утгыг үнэнтэй тэнцүүлэх болно (энэ нь логикоор 1 гэсэн утгатай). If илэрхийлэл нь тэдгээрийн утгуудын аль нэг нь 1 -тэй тэнцүү байх үед кодыг эвдэхэд ашиглагддаг.

Клифф мэдрэгчийг ашиглах: Хэсгийн мэдэгдлийн дотор бид if операторыг ашиглан Roomba -г ургамлын байршилд хэзээ ирснийг хэлдэг. Roomba нь шалан дээрх өнгийн соронзон хальсны мэдрэгчийн авч буй улаан босгыг шалгаж шалгадаг. Хэрэв зүүн эсвэл баруун талын хадан мэдрэгч нь газрынхаас илүү өндөр босго бүхий өнгийг олж илрүүлбэл роботыг 2 секундын турш зогсооно (түр зогсоох командыг ашиглан). Эдгээр 2 секундын дотор Roomba жимсний зургийг авч, харуулах болно. Команд суулгасан imfindcircles-ийг ашиглан тойргийнхоо радиусын хүрээг тохируулаарай, тэгвэл таны Roomba таны жимсийг олох болно.

Зургийн боловсруулалтыг ашиглах: if мэдэгдэлд бид хэрэв if radius3 радиус нь боловсорч гүйцсэн жимсний хамгийн бага шаардлага болох r1 -ээс их эсвэл тэнцүү бол (хэрэв та үүнийг шийдвэл) гэсэн өөр if хэллэгийг оруулаад дараа нь тоолж харуулна уу. Roomba хичнээн олон жимс бэлэн болсон бөгөөд цэцэрлэгээр үргэлжлүүлэх болно. Үгүй бол ээлж цэцэрлэгээр үргэлжлүүлэх болно. Тэмдэглэл: Roomba бүр өөр өөр байдаг тул та эргэх өнцгөө тохируулах хэрэгтэй болж магадгүй юм

Хөнгөн бампер ашиглах: Өөр нэг if мэдэгдэлд гэрлийн бамперууд нь бидний тогтоосон босго хэмжээнээс хэтрэхгүй байхын тулд дүн шинжилгээ хийдэг. Хэрэв зүүн, баруун, зүүн төв, баруун төв, зүүн урд эсвэл баруун урд талын гэрлийн бамбай босго давсан бол хананд цохиулахгүйн тулд Roomba тохирох өнцгөөр бага зэрэг эргэх болно. Тиймээс, лабиринтээр аялах.

Кодын үлдсэн хэсэг нь Roomba -ийн хийсэн замыг төлөвлөж, үр дүнг нь имэйлээр илгээхэд хэрэглэгддэг

Алхам 5: Кодыг хуулна уу

% Зорилго: Хэмжээнд нь үндэслэн Roomba нь цэцэрлэгээр явж, авахад бэлэн болсон хүнсний ногоо/жимс жимсгэнийг ялгах болно. % Оролт: Гэрэл мэдрэгч, Клифф мэдрэгч, Овгор мэдрэгч, камераас авсан зураг % Гаралт: Гэрлийн мэдрэгч нь босго хэмжээнээс их байх үед өрөөний камер эргэж зураг авах болно. Roomba % объект руу мөргөлдөхөд код тасарч, сансрын нисгэгчид хэдэн жимс авахад бэлэн байгаа тухай имэйл илгээж, өрөөний хөдөлгөөний зураглалыг илгээнэ. % Хэрэглээ: If and while мэдэгдэл, команд бичих, MATLAB -аас имэйл код оруулах

k = 0

tic

timerVal = tic

үнэн байхад

v =.2; % хурд r.setDriveVelocity (v, v);% roomba урагшлах L = r.getLightBampers; LC = L.leftCenter; Rr = L. зөв; Lf = L. зүүн; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; % босго. RTH = 30; %Өндөр улаан босго RTL = 10; %Бага улаан босго B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; хэрэв S.leftFront> PL1 || S.rightFront> PL1 % нь газар дээрх өнгө нь босго хэмжээнээс давсан эсэхийг илрүүлдэг r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % 2 секундын турш түр зогсоох img = r.getImage; %take image imshow (img)%display image [center3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = наалдамхай тойрог (төв3, радиус3); Хэрэв радиус3> = r1 T = 1 k = k+1 dist1 = 0.2 байвал зурагт заасан мужид байгаа радиусын тойргийг хайж олох хэрэгтэй., дараа нь Roomba энэ жимсийг тоолно өөр radii3 <= r3 T = 0 өөр T = 0 dist2 = 0.2.*өнгөрсөнХугацаа %Хэрэв үгүй бол жимсний төгсгөлийг тооцохгүй.

хэрэв T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Хэрэв жимс илэрсэн бол Roomba дээрх дугаарыг харуул, %чимээ гаргаад эргүүл. elseif T == 2 r.turnAngle (78) %Хэрэв 2 жимс илэрсэн бол %цэцэрлэгээр үргэлжлүүлэхийн тулд эргүүлнэ өөр r.turnAngle (78) %Хэрэв ямар ч жимс илрээгүй бол %цэцэрлэгийн төгсгөл хүртэл үргэлжлүүлнэ. хэрэв LC> Q r.stop r.turnAngle (-7) өөр RC> Q r.stop r.turnAngle (7) өөр LF> Q r.stop r.turnAngle (-7) өөр бол RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end %Хэрэв гэрлийн бамперуудын аль нэг утга нь босгыг давсан бол %Roomba %хана мөргөхгүйн тулд зохих чиглэлд бага зэрэг эргэх болно

хэрэв B.райт == 1 || B.зүүн == 1 || B.front == 1 dist3 = 0.2.*Өнгөрсөн bbers цохигддог, дараа нь roomba дуу тоглодог, эргэн тойрон эргэлддэг, %, кодыг эвддэг

төгсгөлийг таслах

тараах төгсгөл (0.533, 0, '^') тараалт дээр барих (0.533, дист1, '<') тараалт дээр барих (-dist2, dist1, 'v') тархах (-dist2, 0, 'd') хадгална (gcf, 'Movement.png')

kmsg = num2str (k) mail = '[email protected]' password = 'Srsora123#' host = 'smtp.gmail.com' port = '465'

setpref ('Интернет', 'E_mail', имэйл); setpref ('Интернет', 'SMTP_Server', хост) тулгуур = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', шуудан); props.setProperty ('mail.smtp.host', хост); props.setProperty ('mail.smtp.port', порт); props.setProperty ('mail.smtp.starttls.enable', 'үнэн'); props.setProperty ('mail.smtp.debug', 'үнэн'); props.setProperty ('mail.smtp.auth', 'үнэн'); props.setProperty ('mail.smtp.socketFactory.port', порт); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'худал'); sendmail (мэйл, 'Сайн уу сансрын нисгэгч! Цэцэрлэгт ийм олон жимс байдаг', kmsg, {'motion.png'})

Зөвлөмж болгож буй: