Мазмуну:
Video: Марс Roomba долбоору UTK: 4 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
ЖООПКЕРЧИЛИК: БУЛ ГАНА РОМБА БИР ТҮРДӨ ОРНОТУЛСА ИШТЕЙТ
ӨТӨ ӨЗГӨЧӨ ЖОЛ, БУЛ КӨРСӨТМӨ ТЕННИС СТУДЕНТТЕРИ ЖАНА ФАКУЛЬТЕТ УНИВЕРСИТЕТИ ЖАРАТУУ ҮЧҮН ЖАЗЫЛДЫ.
Бул код 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 көрсөтмөгө ылайык иштеши керек.
Сунушталууда:
Робот долбоору UTK 2017: 3 кадам
Робот Долбоору UTK 2017: Миссия: Биздин инженерлер тобу инновациялуу адамга жардам берүүчү Mars Rover.-Out командаларын иштеп чыгуу үчүн ачык булак технологиясын иштеп чыгуу үчүн коммерциялык эмес фонд болгон Froogle тарабынан жалданган. бул бир катар аткаруу үчүн биз коддогон бөлмө
Марс чалгындоо роботу: 4 кадам
Марс чалгындоо роботу: Бул көрсөтмө Марс чалгындоо роботун программалоо жана буйрук берүү үчүн этап-этабы менен көрсөтмө болуп саналат. Баштоо үчүн, төмөнкү материалдардын тизмесин алуу керек: Заряддалган iRobot, Тикин университетинин Онинг Университети
Марс Roomba: 6 кадам
Марс Roomba: Бул Instructable сизге Raspberry Pi көзөмөлдөгөн Roomba вакуумдук ботун иштетүү боюнча көрсөтмөлөрдү берет. Биз колдоно турган операциялык система MATLAB аркылуу
Roomba MATLAB долбоору: 5 кадам
Roomba MATLAB долбоору: NASAнын Марс роверине карата учурдагы планы - бул маалымат чогултуучу жана Марстын айланасында жүрүү, жерге кайра алып келүү үчүн топурактын үлгүлөрүн чогултуу, илимпоздор мурунку жашоо формаларынын бар же жок экенин көрө алышат. планета. Кошумча
Roomba долбоору: 5 кадам (Сүрөттөр менен)
Roomba долбоору: Бул көрсөтмө Түштүк Флорида университетинин Макекурсунун (www.makecourse.com) долбоорунун талабын аткаруу үчүн түзүлгөн