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

Марс Roomba төсөл UTK: 4 алхам
Марс Roomba төсөл UTK: 4 алхам

Видео: Марс Roomba төсөл UTK: 4 алхам

Видео: Марс Roomba төсөл UTK: 4 алхам
Видео: Как Марс реагирует на работ пылесос 2024, Долдугаар сарын
Anonim
Марс Roomba төсөл UTK
Марс Roomba төсөл UTK
Марс Roomba төсөл UTK
Марс Roomba төсөл UTK

ХАРИУЦЛАГА: ӨӨРӨМБИЙГ АЖЛААР СУУГСАН БОЛ ЭНЭ ЗӨВХӨН АЖИЛЛАХ болно.

МАШ ӨӨРӨӨ АРГА ХЭМЖЭЭГЭЭР ЭНЭ АРГА ХЭМЖЭЭГ ТЕННИСИЙН ОЮУТАН, ФАКУЛЬТИЙН ИХ СУРГУУЛИЙН ЗОРИУЛСАН БА АШИГЛАХ ЗОРИЛГОТОЙ.

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

Шаардлагатай материал:

· Roomba

· MATLAB

· Raspberry Pi ба Pi камер

Алхам 1: Номын сан авах

Инженерийн вэбсайт дээр багажны хайрцаг/номын сан байгаа бөгөөд үүнийг татаж аваад шинэ хавтсанд байрлуулна уу. Энэ фолдер нь төслийн ажлын бүх файлыг агуулсан байх ёстой, учир нь таны хийсэн програмд ашиглагдах аливаа функц нь номын санд хандах шаардлагатай болно. Үүнийг хийсний дараа та програм дээрээ ажиллаж эхлэх боломжтой

Алхам 2: Програм бичих

Хөтөлбөрт ашиглаж болох цөөн хэдэн функц байдаг бөгөөд эдгээр функцэд "doc roomba" командыг ашиглан хандах боломжтой. Эдгээр функцийг ашигласнаар та Roomba -г янз бүрийн аргаар удирдах боломжтой. Доорх код нь овойлт мэдрэгч, гэрлийн бар мэдрэгч, камер, хадан мэдрэгчийг ашиглан марс ровер бүтээхэд янз бүрийн аргаар ашигладаг. Бид овойлтын мэдрэгчийг ашиглан Roomba объект руу цохих үед, робот буцааж, эргэж, үргэлжлүүлэн хөдлөх болно. Roomba нь объект руу цохиулахаас өмнө гэрлийн бар нь объектыг илрүүлж, Roomba -г удаашруулдаг тул цохих мэдрэгчийг идэвхжүүлэхийн тулд объект руу цохих үед Roomba цохилтонд бага өртөх/өртөх болно. Камер гадаргуу дээр ус эсвэл лаав хайж байна, хэрэв шингэн байхгүй бол робот үргэлжлүүлэн хайна, хэрэв ус олдвол робот операторуудад мэдэгдэнэ. Хадны мэдрэгч нь робот хадан цохионд ойртох үед түүнийг зогсоох зориулалттай. Хэрэв робот хадан цохио мэдэрч байвал унахаас зайлсхийхийн тулд ухарч эргэх болно.

Алхам 3: Код

Үүнийг хуулж аваад номын сангуудтай нэг хавтсанд байрладаг MATLAB файлд буулгана уу

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

while true % кодыг ажиллуулахын тулд Infinte while loop

dontFall = cliffCheck (r) % 'dontFall' хувьсагчийг 'cliffCheck' функцид оноож өгдөг

if dontFall % if мэдэгдэл нь 'cliffCheck' дууссаны дараа кодоор үргэлжлэх болно

r.setDriveVelocity (0.1, 0.1) % нь "cliffCheck" дууссаны дараа Roomba -г хөдөлгөдөг.

end % төгсгөл нь 'dontFall' if мэдэгдэл дуусна

bumper = bumpcheck (r) % 'bumper' хувьсагчийг 'bumpcheck' функцид оноож өгдөг

if bumper % if 'bumpcheck' дууссаны дараа кодоор үргэлжлүүлэх мэдэгдэл

r.setDriveVelocity (0.1, 0.1) % 'Bumpcheck' дууссаны дараа Roomba -г хөдөлгөдөг.

end % if if 'bumper' төгсгөлтэй болно

LiquidCheck (r) % 'LiquidCheck' функцэд 'шингэн' хувьсагчийг өгдөг.

if likids % if 'LiquidCheck' дууссаны дараа кодыг үргэлжлүүлэх болно

r.setDriveVelocity (0.1, 0.1) % 'LiquidCheck' дууссаны дараа Roomba -г хөдөлгөдөг.

end % if 'илэрхийлэлийг дуусгана

lightbumper = lightcheck (r) % 'lightbamper' хувьсагчийг 'lightcheck' функцид оноож өгдөг.

түр зогсоох (0.1) % Давталтын давталтыг давтахгүйн тулд хэсэг хугацаанд түр зогсооно

end % нь loop байхад хязгааргүй дуусна

end % төгсгөлийн функц

функц bumper = bumpcheck (r) % 'bumpcheck' функцийг үүсгэнэ

bumpdata = r.getBumpers % Бамбайнаас бүх өгөгдлийг 'bumpdata' хувьсагч руу оноож өгдөг

bamper = bumpdata.right || bumpdata.зүүн || bumpdata.front % Төрөл бүрийн бамперт хадгалагдсан 'bumper' гэсэн хувьсагч үүсгэнэ

if bumpdata.right> 0 % Бампер нь цохигдсон тохиолдолд Roomba -ийн өөр өөр функцүүдийг үүсгэх мэдэгдэл

r.stop % Roomba -г зогсооно

r.moveDistance (-0.3, 0.2) % Roomba 0.3m-ийг буцаана

r.turnAngle (90, 0.5) % Roomba -г аль болох хурдан 90 градус эргүүлнэ

Төгсгөл

хэрэв bumpdata.front> 0

r. зогсоох

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0.5) % Roomba -г санамсаргүй байдлаар 0 -ээс 270 градусын хооронд эргүүлнэ.

Төгсгөл

хэрэв bumpdata.left> 0

r. зогсоох

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0.5) % Roomba -90 градусыг аль болох хурдан эргүүлнэ

Төгсгөл

Төгсгөл

lightbumper = lightcheck (r) % 'lightcheck' функцийг үүсгэнэ

lightdata = r.getLightBampers % Гэрлийн цохилт мэдрэгчийн бүх өгөгдлийг 'lightdata' хувьсагч руу оноож өгдөг.

lightbamper = lightdata.left || lightdata.зөв || lightdata.rightCenter || lightdata.leftCenter % Өөр өөр гэрлийн бамперт зориулж 'lightbumper' гэсэн хадгалагдсан хувьсагч үүсгэнэ.

if lightbumper % If the statement to call the lightbamper data from above

if lightdata.left> 10 % Хэрэв гэрлийн бампер 10 -аас дээш утгыг мэдэрч байвал Roomba -ийн өөр өөр функцуудыг гүйцэтгэх шалтгаан болно.

r.setDriveVelocity (0.05, 0.05) % Бөөндөхөд бэлтгэхийн тулд өрөөний хурдыг удаашруулдаг.

end % if if гэсэн эхний үгийг төгсгөдөг

хэрэв lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

Төгсгөл

хэрэв lightdata.right> 10

r.setDriveVelocity (0.05, 0.05)

Төгсгөл

хэрэв lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

Төгсгөл

end % if if 'lightbumper' -ийг төгсгөдөг

end %нь lightcheck функцийг дуусгадаг

dontFall = cliffCheck (r) % функц 'cliffCheck' функцийг бий болгодог

өгөгдөл = r.getCliffSensors; % Цохио мэдрэгчийн бүх өгөгдлийг хувьсах өгөгдөлд оноож өгдөг.

dontFall = өгөгдөл.зүүн <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Хадны янз бүрийн мэдрэгчийн хувьд 'dontFall' хадгалагдсан хувьсагчийг үүсгэнэ.

if dontFall % If мэдэгдэл нь дээрээс авирах мэдрэгчийн өгөгдлийг дуудах болно

if data.left <1010 % Хадны мэдрэгч нь 1010 -аас бага утгыг мэдэрч байвал Roomba -ийн өөр өөр функцуудыг гүйцэтгэх мэдэгдэл

r. зогсоох

r.moveDistance (-0.2, 0.2) % Roomba 0.2m-ийг буцаана

r.turnAngle (-90, 0.5) % Roomba -90 градусыг аль болох хурдан эргүүлнэ

elseif data.leftFront <1010

r. зогсоох

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Roomba -г аль болох хурдан 90 градус эргүүлнэ

elseif data.rightFront <1010

r. зогсоох

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Roomba -г аль болох хурдан 90 градус эргүүлнэ

өөр өгөгдөл.баруун <1010

r. зогсоох

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Roomba -г аль болох хурдан 90 градус эргүүлнэ

Төгсгөл

Төгсгөл

Төгсгөл

шингэн шингэн = LiquidCheck (r) % 'LiquidCheck' функцийг бий болгодог

үнэн %нь шалгалт тохируулга хийх хязгааргүй давталтыг эхлүүлдэг

img = r.getImage; % нь роботыг унтраасан байна

image (img) % нь зургийг цонхонд харуулна

red_mean = дундаж (дундаж (img (200, 150, 1)))% нь улаан пикселийн дундаж хэмжээг уншдаг

blue_mean = дундаж (дундаж (img (200, 150, 3))))% нь цэнхэр пикселийн дундаж хэмжээг уншдаг

шингэн = red_mean || blue_mean % Төрөл бүрийн өнгөний хувьсагчдад зориулж 'шингэн' гэсэн хадгалагдсан хувьсагч үүсгэнэ

if шингэн байвал If image бол дээрээс өгөгдлийг дуудах

if red_mean> 170 % Камер нь 170 -аас дээш дундаж улаан өнгийг олж харвал Roomba -ийн өөр өөр функцүүдийг гүйцэтгэх шалтгаан болно.

r.stop % нь roomba -г зогсооно

r.setLEDCenterColor (255) % нь тойргийг улаан болгож тохируулна

r.setLEDDigits (); % дэлгэцийг цэвэрлэнэ

f = хүлээх мөр (0, '*ОРУУЛАХ Мессеж*'); % нь ачаалах зурвасыг хүлээх мөрийг үүсгэдэг

r.setLEDDigits ('HOT'); % нь LED дэлгэцийг 'HOT' гаралтанд тохируулдаг.

түр зогсоох (0.5) %Богино хугацаанд түр завсарлаж мэдээлэл алдагдсан байна

r.setLEDDigits ('LAVA'); % нь LED дэлгэцийг 'LAVA' гаралтанд тохируулдаг.

түр зогсоох (0.5)

хүлээх самбар (.33, f, '*ОРУУЛАХ Мессеж*'); %нь хүлээлтийн самбарын өсөлтийг бий болгодог

r.setLEDDigits ('HOT');

түр зогсоох (0.5)

r.setLEDDigits ('LAVA');

түр зогсоох (0.5)

хүлээх мөр (.67, f, '*ОРУУЛАХ Мессеж*'); % нь хүлээлтийн самбарын өсөлтийг бий болгодог

r.setLEDDigits ('HOT');

түр зогсоох (0.5)

r.setLEDDigits ('LAVA');

хүлээх мөр (1, f, '*ОРУУЛАХ Мессеж*'); %нь хүлээх мөрийг бөглөнө

түр зогсоох (1)

close (f) %нь хүлээлгийн мөрийг хаадаг

r.setLEDDigits (); % нь LED дэлгэцийг цэвэрлэнэ

бүгдийг хаах %Өмнөх бүх цонхыг хаадаг

axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % тэнхлэг ба диаграмын схемийн цонхыг цэвэрлэнэ

y = 0.5; % нь зургийн цонхонд байгаа текстийн y-байрлалыг тохируулна

x = 0.06; % нь зургийн цонхонд текстийн x-байрлалыг тохируулна

гарчиг ('FROM MARS ROOMBA', 'fontsize', 32) % Зургийн цонхонд гарчиг нэмнэ

quadeqtxt = 'АЮУЛТАЙ ЛАВА'; % 'Quadeqtxt' хувьсагчийг 0 гаралт болгож тохируулна

текст (x, y, quadeqtxt, 'тайлбарлагч', 'латекс', 'фонт хэмжээ', 36); % нь график цонхонд quadeq текстийг харуулдаг

r.moveDistance (-0.2, 0.2) %нь өрөөг 0.2м эргүүлнэ

r.turnAngle (180, 0.5) %нь өрөөний өрөөг аль болох хурдан 180 градус эргүүлнэ

r.setLEDCenterColor (128, 128); % нь roomba center LED -ийг улбар шар болгож тохируулна

%бүгдийг хаах нь үлдсэн нээлттэй цонхыг хаадаг

elseif blue_mean> 175 % Хэрэв камер 175 -аас дээш дундаж цэнхэр өнгийг олж харвал Roomba -ийн өөр өөр функцуудыг үүсгэх мэдэгдэл гарах болно.

r.stop % нь roomba -г зогсооно

r.setLEDCenterColor (255) % нь тойргийг улаан болгож тохируулна

r.setLEDDigits (); % дэлгэцийг цэвэрлэнэ

f = хүлээх мөр (0, '*ОРУУЛАХ Мессеж*'); % нь ачаалах зурвасыг хүлээх мөрийг үүсгэдэг

r.setLEDDigits ('LOOK'); % нь LED дэлгэцийг 'LOOK' гаралтанд тохируулна.

түр зогсоох (0.5) %Товч завсарлага авсан мэдээллийг уншихын тулд түр зогсоох

r.setLEDDigits ('WATR'); % нь LED дэлгэцийг 'WATR' гаралтанд тохируулдаг.

түр зогсоох (0.5)

хүлээх самбар (.33, f, '*ОРУУЛАХ Мессеж*'); %нь хүлээлтийн самбарын өсөлтийг бий болгодог

r.setLEDDigits ('LOOK');

түр зогсоох (0.5)

r.setLEDDigits ('WATR');

түр зогсоох (0.5)

хүлээх мөр (.67, f, '*ОРУУЛАХ Мессеж*'); % нь хүлээлтийн самбарын өсөлтийг бий болгодог

r.setLEDDigits ('LOOK');

түр зогсоох (0.5)

r.setLEDDigits ('WATR');

хүлээх самбар (1, f, '*ОРУУЛАХ Мессеж*'); %нь хүлээх мөрийг бөглөнө

түр зогсоох (1)

close (f) %нь хүлээлгийн мөрийг хаадаг

r.setLEDDigits (); % нь LED дэлгэцийг цэвэрлэнэ

бүгдийг хаах %Өмнөх бүх цонхыг хаадаг

axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % тэнхлэг ба диаграмын схемийн цонхыг цэвэрлэнэ

y = 0.5; % нь зургийн цонхонд байгаа текстийн y-байрлалыг тохируулна

x = 0.06; % нь зургийн цонхонд текстийн x-байрлалыг тохируулна

гарчиг ('FROM MARS ROOMBA', 'fontsize', 32) % Зургийн цонхонд гарчиг нэмнэ

quadeqtxt = 'УСЫГ ОЛСОН'; % 'Quadeqtxt' хувьсагчийг 0 гаралт болгож тохируулна

текст (x, y, quadeqtxt, 'тайлбарлагч', 'латекс', 'фонт хэмжээ', 36); % нь график цонхонд quadeq текстийг харуулдаг

r.moveDistance (-0.2, 0.2) %нь өрөөг 0.2м эргүүлнэ

r.turnAngle (180, 0.5) %нь өрөөний өрөөг аль болох хурдан 180 градус эргүүлнэ

r.setLEDCenterColor (128, 128); % нь roomba төвийн LED -ийг улбар шар болгож тохируулна

%бүгдийг хаах нь үлдсэн нээлттэй цонхыг хаадаг

end %if if 'red_mean' if -г төгсгөдөг

end %if 'илэрхийлэл "шингэн" -ийг төгсгөдөг

end % нь loop байхад хязгааргүй хаадаг

end % төгсгөлүүд нь 'LiquidCheck' функцийг гүйцэтгэдэг.

Алхам 4: Кодыг ажиллуулах

Кодыг MATLAB руу хуулж, буулгасны дараа та Roomba -тай холбогдох ёстой. Roomba холбогдсоны дараа r хувьсагчийг нэрлэх ёстой. Функцууд нь Roomba -ийг дурдахдаа r хувьсагчийг ашигладаг тул Roomba -г r хувьсагч гэж тодорхойлох ёстой. Кодыг ажиллуулсны дараа Roomba зааврын дагуу ажиллах ёстой.

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