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

IRobot Create-Mars экспедиц Rover Mark I: 4 алхам
IRobot Create-Mars экспедиц Rover Mark I: 4 алхам

Видео: IRobot Create-Mars экспедиц Rover Mark I: 4 алхам

Видео: IRobot Create-Mars экспедиц Rover Mark I: 4 алхам
Видео: Introducing the iRobot Create 3 Educational Robot 2024, Долдугаар сарын
Anonim
IRobot Create-Mars экспедиц Rover Mark I
IRobot Create-Mars экспедиц Rover Mark I

Энэхүү зааварчилгаа нь MatLab кодчилол ашиглан iRobot Create -ийг хэрхэн тохируулахыг танд заах болно. Таны робот ашигт малтмалын хэлбэрийг ялгах замаар хайх, хадан цохио мэдрэгч ашиглан уулархаг газар нутгийг жолоодох, амьд тэжээлээр дамжуулан гараар удирдах чадвартай болно.

Алхам 1: хангамж

Хангамж
Хангамж

Энэхүү төслийн хувьд танд Roomba робот тоос сорогчийн програмчлагдах хувилбар болох iRobot Create хэрэгтэй болно. Робот нь энэ төсөлд шаардлагатай бүх мэдрэгчээр тоноглогдсон байдаг, тухайлбал овойлт мэдрэгч, хадан цохиур, "Хөнгөн цохилт" мэдрэгч. Түүнчлэн танд утасгүй холбоо, шууд програмчлал, шууд видео тэжээлд ашигладаг Raspberry Pi болон видео камер хэрэгтэй болно. Эцэст нь танд Raspberry Pi болон камеранд 3D хэвлэсэн бэхэлгээ хэрэгтэй болно.

Алхам 2: Хүссэн үр дүнд хүрэхийн тулд кодчиллыг хөгжүүл

Хүссэн үр дүнд хүрэхийн тулд кодчиллыг хөгжүүлэх
Хүссэн үр дүнд хүрэхийн тулд кодчиллыг хөгжүүлэх

Roomba -г холбосны дараа та хүссэн оролтынхоо дараа хүссэн гарцыг өгөх Matlab кодыг үүсгэх шаардлагатай болно.

Кодыг эндээс харж болно:

%Roomba төсөл%Брентен Арнольд (barnol15); Жулианна Корн (qdp218); Mike Heal (mheal) %4/11/19 %Асуудлын тайлбар: Ангараг гаригийг %судлах/амьдрах явцад хүмүүст туслах ровер бүтээгээрэй. %Шийдлийн арга: Органик бодисыг шалгахын тулд %гэрлийн бампер, хадан мэдрэгч, камер ашиглан органик (ногоон) бодис хайх. Бампер, хадан %мэдрэгч, дугуйны өндөр мэдрэгч ашиглан бартаат газар нутгийг жолоочид %жолоодохыг зөвшөөрнө үү. Хүмүүст роверыг аюулгүй зайнаас %холоос удирдах, ашигт малтмалыг гараар хайх боломжийг олгох. choices = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Харилцах цэсэн дэх гурван сонголт Тохиргоо = цэс ('', сонголтууд) бол Тохиргоо> 0 %Хэрэв сонгосон сонголт хэрэглэгчийн баталгаажуулалтын сонголтыг асууна2 = {'Тийм', 'Үгүй'} %"Тийм" эсвэл "Үгүй" гэсэн нүдний массив үүсгэнэ үү "choice Confirm = цэс (['Та сонгосон"' сонголтууд {Setting} '"горим.'], сонголтууд2) %Хэрэглэгчийн тохиргооны сонголтыг баталгаажуулна уу Confirm == 1 бол Setting == 1 %" LIFE "тохиргоог сонгосон эсэхийг шалгаарай i = 0 байхад i == 0 r.setLEDDigits (num2str ('LIFE')) %LED дээрх 'LIFE' дэлгэцийг i = 1: 100 r.setDriveVelocity (0.05) %Roomba -г 0.05 м/с = r.getCliffSensors %"Y" эсийн бүтэц дэх хадан цохионы мэдрэгчийн утгыг олж авах ба хадгалах) %Roomba -г хойш 0,05 метр урагшлуулах r.turnAngle (20) %Roomba -ийг 20 градус эргүүлэх CCW img = r.getImage %Roomberry rect дээр rasberry pie камераас зураг авах = [100 0 150 150]; img = imcrop (img, rect) %тайрах дүрс төвд анхаарлаа төвлөрүүлэх болно улаан = дундаж (дундаж (img (:,,, 1))) %дундаж улаан эрчим ногоон = дундаж (дундаж (img (:,,,, 2)))) %дундаж ногоон эрчим хөх = дундаж (дундаж (img (:,:, 3)))) %дундаж цэнхэр эрч хүч ногоон байвал> улаан && ногоон> цэнхэр %Зураг дээр ургамал байгаа эсэхийг шалгаарай d = msgbox (['Амьдрал олдсон! ']); %"Амьдрал олдсон!" Гэсэн мессежийн хайрцгийг харуулна уу. хүлээх (d); end elseif l.leftFront> 100 %Check is left/урд гэрлийн бампер хамрагдсан r 'rect = [100 0 150 150]; img = imcrop (img, rect) %тайрах дүрс төвд анхаарлаа төвлөрүүлэх улаан) %дундаж ногоон эрчим хөх = дундаж (дундаж (img (:,:, 3)))) %дундаж цэнхэр эрч хүч ногоон байвал> улаан && ногоон> цэнхэр %Зураг дээр ургамал байгаа эсэхийг шалгаарай d = msgbox (['Амьдрал олдсон! ']); %"Амьдрал олдсон!" Гэсэн мессежийн хайрцгийг харуулна уу. хүлээх (d); end elseif l.leftCenter> 100 %Зүүн/төв гэрлийн бампер бүрхэгдсэн эсэхийг шалгана уу r.moveDistance (-0.05) %Roomba-г хойш 0.05 метр урагш хойшлуулна уу img = r.getImage %Roomberry дээрх rasberry бялуунаас дүрс авч, хувьсагч хэлбэрээр хадгалах '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 %Roomberry дээрх rasberry бялуу камераас дүрс авч, хувьсагч хэлбэрээр хадгалах 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %тайрах дүрс төвд анхаарлаа төвлөрүүлэх улаан) %дундаж ногоон эрчим хөх = дундаж (дундаж (img (:,:, 3)))) %дундаж цэнхэр эрчимтэй бол ногоон> улаан && ногоон> цэнхэр %Ургамал зураг дээр байгаа эсэхийг шалгаарай d = msgbox (['Амьдрал олдсон! ']); %"Амьдрал олдсон!" Гэсэн мессежийн хайрцгийг харуулна уу. хүлээх (d); end elseif l.rightFront> 100 %Баруун/урд гэрлийн бампер бүрхэгдсэн эсэхийг шалгана уу r.moveDistance (-0.05) %Roomba-г хойш 0.05 метр урагшлуулна img = r.getImage %Roomberry дээрх rasberry бялуу камераас дүрс авч, хувьсагч хэлбэрээр хадгалах '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) %Roomba-г хойш 0,05 метр эргүүлээрэй r.turnAngle (-20) %Roomba-ийг 20 градус CW эргүүлнэ img = r.getImage %Зураг авах rasberry бялуу камер Roomba дээр хадгалагдаж, 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %тайрах дүрс төвд анхаарлаа төвлөрүүлэх болно улаан = дундаж (дундаж (img (:,,, 1))) %дундаж улаан эрчим ногоон = дундаж (дундаж (img (:,,,, 2)))) %дундаж ногоон эрчим хөх = дундаж (дундаж (img (:,:, 3)))) %дундаж цэнхэр эрч хүч ногоон байвал> улаан && ногоон> цэнхэр %Зураг дээр ургамал байгаа эсэхийг шалгаарай d = msgbox (['Амьдрал олдсон! ']); %"Амьдрал олдсон!" Гэсэн мессежийн хайрцгийг харуулна уу. хүлээх (d); end elseif y.leftFront <1500 %Roomba-ийн зүүн/урд хэсэг нь хаднаас холдсон эсэхийг шалгана r. Хөдлөх зай (-0.1, 0.05) %0,05 м/с хурдтай өрөөний өргөгдлийг 0.1 метрийн зайд эргүүлнэ. градус CW өөрөөр y.rightFront <1500 %Roomba-ийн баруун/урд хэсэг нь хадан цохионоос холдсон эсэхийг шалгана уу. Хөдлөх зай (-0.1, 0.05) %Roomba-г 0.15 м/с эргүүлээд r.turnAngle (5) %roomba 5-ийг эргүүлэх градус CCW өөр бол y.left <1000 %Roomba-ийн зүүн тал нь хадан цохио байхгүй эсэхийг шалгана уу r Хөдлөх зай (-0.05, 0.05) %Roomba-г 0.05 м/сек-ээр 0.05 метр ухрах r.turnAngle (-10) %Roomba 10 градус эргүүлэх CW elseif y.right0 %Continue == 1 i = 0 %Хэрэв үргэлжлүүлэх бол товчлуур дарагдсан бол ажиллуулна өөр = = 1 %LIFE горимыг дуусгах төгсгөл endif elseif Тохиргоо == 2 %"ROUGH TERRAIN" тохиргоог сонгосон эсэхийг шалгана уу. i = 0 байхад i == 0 r.setLEDDigits (num2str ('RGH')) %LED дэлгэц дээр 'Rough' харуулах i = 1: 1000 r.setDriveVelocity (0.05) %Roomba хөтчийн хурдыг 0.05 м/схем = r.getBampers %"x" y = r.get бүтцэд бампер мэдрэгчийн утгыг олж, хадгална. CliffSensors %x.right == 1 %бол "y" бүтэц дэх хадан цохионы мэдрэгчийн утгыг олж, хадгална уу r.turnAngle (10) %Өрөөг 10 градус эргүүлэх CCF өөр x.left == 1 %Зүүн байгаа эсэхийг шалгана уу. бамбай дарагдсан байна r.turnAngle (-10) %Өрөөг эргүүлэх 10 градус CW өөр бол x.front == 1 %Урд бампер дарагдсан эсэхийг шалгана уу r.turnAngle (20) %Өрөөг 20 градус CCW эргүүлэх өөр тохиолдолд x.rightWheelDrop == 1 % Баруун дугуй унасан эсэхийг шалгана уу r.turnAngle (-20) %Өрөөг 20 градус CW эргүүлэх өөр x.leftWheelDrop == 1 %Зүүн талын дугуй унасан эсэхийг шалгана уу r.turnAngle (20) %Өрөөг 20 градус эргүүлэх CCW өөр тохиолдолд y.leftFront < 1500 %Roomba-ийн зүүн урд хэсэг хаднаас холдсон эсэхийг шалгана r.moveDistance (-0.05, 0.05) %Roomba-г 0.05 м/сек-ээр 0.05 метр ухрах r. 1500 %Roomba-ийн баруун урд хэсэг хаднаас холдсон эсэхийг шалгаарай r.moveDistance (-0.05, 0.05) %Roomba-г 0.05 м/сек-ээр 0.05 метр ухраана эргүүлэх өнцөг (5) %Roomba-г 5 градус эргүүлэх CCW өөр тохиолдолд зүүн <1000 %Зүүн хэсэг байгаа эсэхийг шалгана уу f roomba хадан дээр байна r.хөдлөх зай (-0.05, 0.05)%0,05 м/с хурдтай өрөөний өрөөг 0.05 метр ухраах эргүүлэх өнцөг (-10)%тасалгааг 10 градус CW өөрөөр эргүүлэх Хэрэв үргэлжлүүлэх == 1 i = 0 бол %Барзгар газрыг үргэлжлүүлэх өөр i = 1 %Барзгар газрын төгсгөл төгсгөл төгсгөл өөр %Гарын авлагын горим i = 0 r.setLEDDigits (num2str ('USER')) %LED дэлгэц дээрх 'USER' -ийг харуулах d = msgbox (['Сумны товчлуурууд - Зөөх; S - Rover зогсоох; ESC - Эцсийн хэрэглэгчийн хяналт; A - Нөөцийг олох ']); хүлээх (d); i == 0 r.showCamera %rasberry бялуу камерын шууд дамжуулалтыг тусдаа цонхонд нээх D = getkey (1) %Хэрэглэгч түлхүүрийг дарж авах, хэрэв D == 30 %байвал "ASCII" утгыг D хувьсагч хэлбэрээр хадгалах дарагдсан r.setDriveVelocity (0.1) %Roomba -г 0.2 м/сек -ээр урагш илгээх өөр D == 28 %"зүүн" суманд дарагдсан эсэхийг шалгана уу r.setDriveVelocity (0) %Roomba -г урагш эсвэл хойшлуулахыг зогсооно r.turnAngle (15), 0.05) %Roomba-г 45 градус эргүүлэх 0.05 м/с өөр бол D == 31 %"доош" сум дарагдсан эсэхийг шалгаарай r.setDriveVelocity (-0.1) %Roomba-г 0.2 м/сек-ээр хойш ухраана уу өөр D == 29 % "Баруун" сум дарагдсан эсэхийг шалгана уу r.setDriveVelocity (0) %Roomba-г урагш эсвэл хойшлуулахыг зогсооно r.turnAngle (-15, 0.05) %Roomba-г 45 градус CW-т 0.05 м/с өөрөөр эргүүлнэ D == 27 %эсэхийг шалгана уу. "esc" (escape) товчлуур дарагдсан i = 1 %"i" хувьсагчийн утгыг давталтаас гарахын тулд d = msgbox ('"Хэрэглэгчийн хяналтаас" гарч байна)) %өөр тохиолдолд гарын авлагын горимоос гарч байгааг хэрэглэгчид мэдэгдээрэй. 115 %"s" товчлуур дарагдсан эсэхийг шалгах r.setDriveVelocity (0) %Roomba -г зогсоох урагш эсвэл ухрах өөр DIF == 97 %"a" дарагдсан эсэхийг шалгаарай image = r.getImage; imwrite (зураг, 'image.png') W = Ангилах (зураг) K == 3 бол = горим (W) K == 3 d = msgbox ('Нөөц олдсон') %Тэгш өнцөгт эх үүсвэр хүлээгдэж байгааг илрүүлэх тохиолдолд харуулах; %Хэрэглэгч "d" гэсэн мессежийн хайрцгийг хаахыг хүлээнэ үү Kifon == 0 d = msgbox ('Нөөц биш:(') %Тэгш өнцөгт нөөц илрээгүй бол харуулна waitfor (d); %Хэрэглэгч мессежийн хайрцгийг хаахыг хүлээнэ үү "d" end else d = msgbox ('Хүчин төгөлдөр түлхүүр оруулга биш.') %Хэрэглэгч "тохиргоог сонгох" цэсийг хаасан тохиолдолд харуулна waitfor (d); %Хэрэглэгч "d" мессежийн хайрцгийг хаахыг хүлээнэ үү, эцсийн хүлээлт (d); %Хүлээх user to to message message box "d" end end end else d = msgbox ('Goodbye') %Сонголтууд хаалтын төгсгөлд хаалттай байвал баяртай гэж хэлнэ (d);

Алхам 3: Туршилт

Туршилт
Туршилт

Таны кодыг бичсэний дараа та Roomba -г шалгах хэрэгтэй болно. Хэдийгээр таны код зөв мэт санагдаж болох ч таны Roomba -г тодорхойлохыг хүсч буй объектуудыг зөв танихын тулд таны өнгө, хэлбэрийн олон утгыг өөрчлөх шаардлагатай болно.

Алхам 4: Визуал гаралтыг ажигла

Визуал гаралтыг ажиглах
Визуал гаралтыг ажиглах
Визуал гаралтыг ажиглах
Визуал гаралтыг ажиглах

Та Roomba -г визуал гаралт дээр үндэслэн амжилттай програмчилсан эсэх нь маш тодорхой болно.

Гаралтууд нь:

  • Дүрсийг илрүүлэх: Roomba нь зөв ашигт малтмалыг олохын тулд хэлбэр дүрсээ зөв ялгах чадвартай
  • Барзгар газар нутгийн маневр: Хадан цохио эсвэл харанхуй газраас зайлсхийдэг
  • Гарын авлагын горим: Шууд тэжээл, Roomba -ийг хянах чадвар
  • Зураг: Ашигт малтмалын зураг
  • Амьдрал олдсон!

Манай хичээл дуусч байна, шинэ Mars Expedition Rover -ээ сайхан өнгөрүүлээрэй!

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