Агуулгын хүснэгт:
- Алхам 1: хангамж
- Алхам 2: Хүссэн үр дүнд хүрэхийн тулд кодчиллыг хөгжүүл
- Алхам 3: Туршилт
- Алхам 4: Визуал гаралтыг ажигла
Видео: IRobot Create-Mars экспедиц Rover Mark I: 4 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Энэхүү зааварчилгаа нь 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 -ээ сайхан өнгөрүүлээрэй!
Зөвлөмж болгож буй:
Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 алхам (зурагтай)
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: Танилцуулга PongMate CyberCannon Mark III бол олон нийтэд зарагдах хамгийн сүүлийн үеийн, хамгийн дэвшилтэт шар айрагны технологийн нэг төрөл юм. Шинэ CyberCannon -ийг ашигласнаар ямар ч хүн шар айрагны ширээний хамгийн айдаг тоглогч болж чадна. Энэ яаж байна
Slave Trigger Flash Mark II: 6 алхам (зурагтай)
Slave Trigger Flash Mark II: Энэхүү зааварчилгаанд би хамгийн бага бүрэлдэхүүн хэсэгтэй жинхэнэ (оптик) боол гохыг хэрхэн яаж хийхийг тайлбарлах болно.Интернэтээс олж болох олон нарийн төвөгтэй загварууд байдаг бөгөөд энэ загвар нь маш энгийн бөгөөд ажилладаг. гэрэл гэгээтэй, бүдэг гэрэлтэй орчинд
IRobot Create командын модулийг Линукс дээр ашиглах: 4 алхам
IRobot Create -ийн командын модулийг Линукс дээр ашиглах нь: iRobot нь линукс хэрэглэгчдэд командын модулийг ашиглах арга замыг өгөөгүй тул би өөрөө үүнийг олох хэрэгтэй болсон. Та хэдхэн скрипт ажиллуулахад л хангалттай
IRobot Create -ийг Paint болгон өөрчлөх: 6 алхам (зурагтай)
IRobot Create -ийг будах зорилгоор өөрчлөх: Энэ бол роботын талаар огт туршлагагүй хүн хийж болох роботын төсөл юм. Би үүнийг эхлүүлэхээсээ өмнө робот ашиглах туршлагагүй байсан учраас ингэж хэлж байгаа юм. Эсвэл програм бичих. Үнэндээ би хэрхэн зурахаа мэддэг байсан, энэ бол
Mark I Super Psyllium Passivia чанга яригч: 6 алхам (зурагтай)
Марк Супер Psyllium Passivia Илтгэгчид: Олон тооны чанга яригч загваруудаас санаа аван дууны урлагт орох нь YAS (өөр нэг спикер) хийхээс илүү сайн арга юм! Бид бол Regularity Audio Labs -ийн жирийн хүмүүс бөгөөд эдгээр гайхалтай хоосон савнууд байсан