Мазмұны:

Марс Roomba жобасы UTK: 4 қадам
Марс Roomba жобасы UTK: 4 қадам

Бейне: Марс Roomba жобасы UTK: 4 қадам

Бейне: Марс Roomba жобасы UTK: 4 қадам
Бейне: Математикалық және серіппелі маятниктердің тербелістері. Практикалық бөлім. 9 сынып. 2024, Шілде
Anonim
Марс Roomba жобасы UTK
Марс Roomba жобасы UTK
Марс Roomba жобасы UTK
Марс Roomba жобасы UTK

Жауапкершіліктен бас тарту: бұл тек жұмыс істейді, егер бөлмеде бөлме орнатылса.

БҰЛ НҰСҚАУЛЫ ӨТЕ ӨЗГЕШЕЛІК ТЕННИС СТУДЕНТТЕРІ ЖӘНЕ ФАКУЛЬТЕТ УНИВЕРСИТЕТІ ЖАСАУҒА АРНАЛДЫ.

Бұл код MATLAB -та жергілікті түрде жазылған және сақталған кодты іске қосу үшін 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 циклы

dontFall = cliffCheck (r) % 'dontFall' айнымалысын 'cliffCheck' функциясына тағайындайды

if dontFall % if операторы 'cliffCheck' аяқталғаннан кейін кодты жалғастырады

r.setDriveVelocity (0.1, 0.1) % «CliffCheck» аяқталғаннан кейін Roomba қозғалысын сақтайды.

end % «dontFall» if операторын аяқтайды

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

егер bumper % if операторы «кідірту» аяқталғаннан кейін кодты жалғастырады

r.setDriveVelocity (0.1, 0.1) % «кідірту» аяқталғаннан кейін Roomba қозғалысын сақтайды

end % «bamper» if операторын аяқтайды

сұйықтар = LiquidCheck (r) % 'LiquidCheck' функциясына 'сұйықтықтар' айнымалысын тағайындайды

if likids % if операторы 'LiquidCheck' аяқталғаннан кейін кодқа өту керек

r.setDriveVelocity (0.1, 0.1) % «LiquidCheck» аяқталғаннан кейін Roomba қозғалысын сақтайды.

end % if сұйықтығын аяқтайды

lightbamper = lightcheck (r) % 'lightbamper' айнымалысын 'lightcheck' функциясына тағайындайды

үзіліс (0,1) % Үзіліссіз циклді қайталауды болдырмау үшін қысқаша үзіліс

end % цикл кезінде шексіз аяқталады

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

bumper = bumpcheck функциясы (r) % 'Bumpcheck' функциясын жасайды

bumpdata = r.getBumpers % Барлық деректерді бамперден «bumpdata» айнымалысына тағайындайды

бампер = bumpdata.right || bumpdata.left || bumpdata.front % Әр түрлі бамперлер үшін сақталатын «бампер» айнымалысын жасайды

if bumpdata.right> 0 % Егер бампер соғылған болса, бөлменің әр түрлі функцияларын тудыратын мәлімдеме

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 градусқа дейінгі кездейсоқ аралықта Roomba мүмкіндігінше жылдам айналдырады

Соңы

bumpdata.left> 0 болса

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0.5) % Roomba мүмкіндігінше -90 градусқа айналдырады

Соңы

Соңы

lightbamper = lightcheck (r) % «lightcheck» функциясын жасайды

lightdata = r.getLightBampers % Жарық соққысы сенсорынан барлық деректерді «lightdata» айнымалысына тағайындайды

lightbamper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Әр түрлі жарық бамперлері үшін сақталатын «жарық шамы» айнымалысын жасайды

if lightbamper % Егер lightbamper деректерін жоғарыдан шақыратын оператор

if lightdata.left> 10 % Егер жарық бампері 10 мәннен үлкен сезінсе, бөлменің әр түрлі функциялары орындалатыны туралы мәлімдеме

r.setDriveVelocity (0,05, 0,05) % Бөртпеге дайындалу үшін бөлмені баяулатады

end % 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 % Егер қиғаштық сенсоры 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 («ЫСЫҚ»); % жарықдиодты дисплейді '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 (); % жарықдиодты дисплейді тазартады

жабу %Барлық алдыңғы терезелерді жабады

осьтер ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % осьтер мен диаграмманың сюжеттік терезесін тазалайды

у = 0,5; % диаграмма терезесінде мәтіннің у-орнын орнатады

x = 0,06; % графикалық терезеде мәтіннің x-орнын орнатады

тақырып ('FROM MARS ROOMBA', 'fontsize', 32) % Сызба терезесіне тақырып қосады

quadeqtxt = 'ҚАУІПТІ ЛАВА'; % «Quadeqtxt» айнымалысын 0 шығысына орнатады

мәтін (x, y, quadeqtxt, 'аудармашы', 'латекс', 'қаріп өлшемі', 36); % квадек мәтінін диаграмма терезесінде көрсетеді

r.moveDistance (-0.2, 0.2) %0,2м бөлмені өзгертеді

r.turnAngle (180, 0,5) %бөлмені мүмкіндігінше 180 градусқа бұрады

r.setLEDCenterColor (128, 128); % бөлмедегі жарықдиодты қызғылт сарыға орнатады

%жабу қалған ашық терезелерді жабады

elseif blue_mean> 175 % Егер камера 175 -тен жоғары орташа көк түс көрсе, бөлменің әр түрлі функцияларын тудыратын мәлімдеме

r.stop % Roomba тоқтатады

r.setLEDCenterColor (255) % шеңберді қызыл түске орнатады

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

f = күту жолағы (0, '*КІРІС ХАБАР*'); % жүктелетін хабар үшін күту жолағын жасайды

r.setLEDDigits ('КӨРУ'); % жарықдиодты дисплейді 'LOOK' шығысына қояды

кідірту (0,5) %Қысқаша үзіліс ақпаратты оқуға арналған

r.setLEDDigits ('WATR'); % жарықдиодты дисплейді 'WATR' шығуына қояды

кідірту (0,5)

күту тақтасы (.33, f, '*КІРІС ХАБАР*'); %күту жолағының ұлғаюын тудырады

r.setLEDDigits ('КӨРУ');

кідірту (0,5)

r.setLEDDigits ('WATR');

кідірту (0,5)

күту тақтасы (.67, f, '*КІРІС ХАБАР*'); % күту жолағының ұлғаюын тудырады

r.setLEDDigits ('КӨРУ');

кідірту (0,5)

r.setLEDDigits ('WATR');

күту тақтасы (1, f, '*КІРІС ХАБАР*'); %күту жолағын аяқтайды

кідірту (1)

close (f) %күту жолағын жабады

r.setLEDDigits (); % жарықдиодты дисплейді тазартады

жабу %Барлық алдыңғы терезелерді жабады

осьтер ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % осьтер мен диаграмманың сюжеттік терезесін тазалайды

у = 0,5; % диаграмма терезесінде мәтіннің у-орнын орнатады

x = 0,06; % графикалық терезеде мәтіннің x-орнын орнатады

тақырып ('FROM MARS ROOMBA', 'fontsize', 32) % Сызба терезесіне тақырып қосады

quadeqtxt = 'СУ ТАБЫЛДЫ'; % «Quadeqtxt» айнымалысын 0 шығысына орнатады

мәтін (x, y, quadeqtxt, 'аудармашы', 'латекс', 'қаріп өлшемі', 36); % квадек мәтінін диаграмма терезесінде көрсетеді

r.moveDistance (-0.2, 0.2) %0,2м бөлмені өзгертеді

r.turnAngle (180, 0,5) %бөлмені мүмкіндігінше 180 градусқа бұрады

r.setLEDCenterColor (128, 128); % бөлмедегі жарықдиодты қызғылт сарыға орнатады

%жабу қалған ашық терезелерді жабады

end %«red_mean» if операторын аяқтайды

end %if сұйықтығын аяқтайды

end % цикл кезінде шексіз жабылады

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

4 -қадам: кодты іске қосу

Кодты MATLAB -қа көшіріп, қойғаннан кейін сіз Roomba -ға қосылуыңыз керек. Roomba қосылғаннан кейін r айнымалысын атау керек. Функциялар Roomba сілтемесінде r айнымалысын қолданады, сондықтан Roomba r айнымалысы ретінде анықталуы керек. Кодты іске қосқаннан кейін Roomba нұсқау бойынша жұмыс істеуі керек.

Ұсынылған: