Мазмуну:

Марс Roomba долбоору UTK: 4 кадам
Марс Roomba долбоору UTK: 4 кадам

Video: Марс Roomba долбоору UTK: 4 кадам

Video: Марс Roomba долбоору UTK: 4 кадам
Video: Тандоодо эки жигит турат...Анжелика Кайратовна/Азирет осмонов 2024, Ноябрь
Anonim
Марс Roomba долбоору UTK
Марс Roomba долбоору UTK
Марс Roomba долбоору UTK
Марс Roomba долбоору UTK

ЖООПКЕРЧИЛИК: БУЛ ГАНА РОМБА БИР ТҮРДӨ ОРНОТУЛСА ИШТЕЙТ

ӨТӨ ӨЗГӨЧӨ ЖОЛ, БУЛ КӨРСӨТМӨ ТЕННИС СТУДЕНТТЕРИ ЖАНА ФАКУЛЬТЕТ УНИВЕРСИТЕТИ ЖАРАТУУ ҮЧҮН ЖАЗЫЛДЫ.

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

Керектүү материалдар:

· Roomba

· MATLAB

· Raspberry Pi жана Pi Camera

1 -кадам: Китепканаларды алуу

Инженердик веб -сайтта куралдар кутусу/китепкана бар, аны жүктөп алып, жаңы папкага салыңыз. Бул папкада бардык проект файлдары камтылышы керек, анткени сиз жасаган программада колдонулган ар кандай функция китепканага кайрылышы керек. Муну бүтүргөндөн кийин сиз программаларыңыз менен иштей баштасаңыз болот

2 -кадам: Программаларды жазуу

Программада колдонула турган бир топ функциялар бар, бул функцияларга "doc roomba" буйругу менен кирүүгө болот. Бул функцияларды колдонуп, Roombaңызды ар кандай жолдор менен башкара аласыз. Төмөндө келтирилген коддо марс роверин түзүү үчүн ар кандай жолдордо дөмпөк сенсорлору, жарык тилкесинин сенсорлору, камера жана аска сенсорлору колдонулат. Биз сокку сенсорлорун колдонуп, Roomba объектиге тийгенде, мындай болгондо робот артка бурулуп, ары карай жылып кете берет. Roomba объектиге тийгенге чейин, жарык тилкеси объектти аныктайт жана Roombаны жайлатат, ошондо ал дөмпөк сенсорун иштетүү үчүн объектиге тийгенде Roomba азыраак жабыркайт/соккудан жабыркайт. Камера жер үстүнөн суу же лаваны издейт, эгерде суюктук табылбаса, робот издөөнү улантат, эгер суу табылган болсо робот операторлорго билдирүү жөнөтөт. Жардын сенсорлору робот жарга жакындап калса, аны токтотуу үчүн иштелип чыккан. Эгерде робот асканы сезсе, ал артка бурулуп, жыгылып калбашы үчүн артка бурулат.

3 -кадам: Код

Муну китепканалар менен бир папкада жайгашкан MATLAB файлына көчүрүп чаптаңыз

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

чыныгы % Infinte while loop иштеп турушу үчүн

dontFall = cliffCheck (r) % 'cliffCheck' функциясына 'dontFall' өзгөрмөсүн дайындайт

if dontFall % if оператору 'cliffCheck' аяктагандан кийин кодго өтүү үчүн

r.setDriveVelocity (0.1, 0.1) % "CliffCheck" аяктагандан кийин Roomba кыймылын сактайт

end % if 'dontFall' if оператору менен аяктайт

бампер = bumpcheck (r) % 'bumpper' өзгөрмөсүн 'bumpcheck' функциясына дайындайт

if bumper % if 'bumpcheck' аяктагандан кийин кодго өтүү керек

r.

end % 'bamper' if билдирүүсүн аяктайт

суюктуктар = LiquidCheck (r) % 'LiquidCheck' функциясына "суюктуктарды" өзгөртө берет

эгер суюктуктар % if 'LiquidCheck' аяктагандан кийин кодго өтүү керек

r.setDriveVelocity (0.1, 0.1) % 'LiquidCheck' аяктагандан кийин Roomba кыймылын сактайт

end % 'суюктуктарды' if билдирүүсү менен аяктайт

lightbamper = lightcheck (r) % 'lightcheck' функциясына "lightbamper" өзгөрмөсүн дайындайт

тыныгуу (0.1) % Үзгүлтүксүз циклди кайталабоо үчүн кыска тыныгуу

end % цикл чексиз аяктайт

end % end функциясы

bumper = bumpcheck (r) % 'bumpcheck' функциясын түзөт

bumpdata = r.getBumpers % Бампердеги бардык маалыматтарды 'bumpdata' өзгөрмөсүнө дайындайт

бампер = bumpdata.right || bumpdata.left || bumpdata.front % Ар кандай бамперлер үчүн сакталуучу 'бампер' өзгөрмөсүн түзөт

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.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0.5) % 0 жана 270 градус арасында туш келди аралыкта Roombаны мүмкүн болушунча тезирээк айландырат

аяктоо

эгер bumpdata.left> 0

r.stop

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.right || lightdata.rightCenter || lightdata.leftCenter % Ар кандай жарык бамперлери үчүн сакталган өзгөрмөнү, "лампочка" түзөт

if lightbumper % If the lightbumper data from call up

if lightdata.left> 10 % Эгерде жарык бампери 10 мааниден чоң сезсе, бөлмөдө ар кандай функциялардын пайда болушуна алып келүүчү билдирүү

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 % "lightbamper" if операторун аяктайт

end %lightcheck функциясын аяктайт

dontFall = cliffCheck (r) % функциясы 'cliffCheck' функциясын түзөт

маалыматтар = r.getCliffSensors; % Жары сенсорундагы бардык маалыматтарды өзгөрмө "маалыматка" дайындайт

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Ар кандай аска сенсорлору үчүн "dontFall" сакталган өзгөрмөсүн түзөт

if dontFall % If оператору жардан сенсорунун маалыматтарын жогору жактан чакыруу үчүн

if data.left <1010 % If if оператору ар кандай функцияларды аткарууга себеп болот, эгерде жардын сенсору 1010ден аз маанини сезсе

r.stop

r.moveDistance (-0.2, 0.2) % тескери Roomba 0.2m

r.turnAngle (-90, 0.5) % Roomba мүмкүн болушунча тез -90 градуска айланат

elseif data.leftFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0,5) % Roomba мүмкүн болушунча тез 90 градуска айланат

elseif data.rightFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Roomba мүмкүн болушунча тез 90 градуска айланат

elseif data.right <1010

r.stop

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 red_mean> 170 % Камера 170тен чоңураак кызыл түстү көрсө, комбинациянын ар кандай функцияларын ишке ашыра турган билдирүү

r.stop % Roomba токтойт

r.setLEDCenterColor (255) % тегеректи кызыл түскө коёт

r.setLEDDigits (); % дисплейди тазалоо

f = күтүү панели (0, '*КИРИШТИ КАБАР*'); % жүктөө билдирүүсү үчүн күтүү тилкесин түзөт

r.setLEDDigits ("ЫСЫК"); % LED дисплейин "HOT" чыгарууга коёт

тыныгуу (0.5) %Кыска тыныгуу маалыматты өчүрүү үчүн

r.setLEDDigits ('LAVA'); % LED дисплейин "LAVA" чыгарууга коёт

тыныгуу (0.5)

күтүү панели (.33, f, '*КИРИШТИ КАБАР*'); %күтүү тилкесинин көбөйүшүн түзөт

r.setLEDDigits ("ЫСЫК");

тыныгуу (0.5)

r.setLEDDigits ('LAVA');

тыныгуу (0.5)

күтүү тилкеси (.67, f, '*КИРИШТИ КАБАР*'); % күтүү тилкесинде көбөйүүнү жаратат

r.setLEDDigits ("ЫСЫК");

тыныгуу (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, 'interpreter', 'lateks', 'fontsize', 36); % квадекстин текстин график терезесинде көрсөтөт

r.moveDistance (-0.2, 0.2) %0,2м бөлмө тескери

r.turnAngle (180, 0,5) %бөлмөнү 180 градуска мүмкүн болушунча тез бурат

r.setLEDCenterColor (128, 128); % Roomba борборунун LEDин кызгылт сарыга коёт

%жабуу калган ачык терезелерди жабат

elseif blue_mean> 175 % Камера 175тен чоңураак көк түстү көрсө, комментарийдин ар кандай функцияларын ишке ашыра турган билдирүү

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, 'interpreter', 'lateks', 'fontsize', 36); % квадекстин текстин график терезесинде көрсөтөт

r.moveDistance (-0.2, 0.2) %0,2м бөлмө тескери

r.turnAngle (180, 0,5) %бөлмөнү 180 градуска мүмкүн болушунча тез бурат

r.setLEDCenterColor (128, 128); % Roomba борборунун LEDин кызгылт сарыга коёт

%жабуу калган ачык терезелерди жабат

end %if 'red_mean' if оператору менен аяктайт

end %'суюктуктарды' if билдирүүсү менен аяктайт

end % цикл чексиз жабылат

end % аяктайт 'LiquidCheck' функциясы

4 -кадам: Кодду иштетүү

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

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