ዝርዝር ሁኔታ:

የማርስ Roomba ፕሮጀክት UTK: 4 ደረጃዎች
የማርስ Roomba ፕሮጀክት UTK: 4 ደረጃዎች

ቪዲዮ: የማርስ Roomba ፕሮጀክት UTK: 4 ደረጃዎች

ቪዲዮ: የማርስ Roomba ፕሮጀክት UTK: 4 ደረጃዎች
ቪዲዮ: Быстрая укладка плитки на стены в санузле. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #27 2024, ሀምሌ
Anonim
የማርስ Roomba ፕሮጀክት UTK
የማርስ Roomba ፕሮጀክት UTK
የማርስ Roomba ፕሮጀክት UTK
የማርስ Roomba ፕሮጀክት UTK

የኃላፊነት ማስተባበያ - ሮምባው በ ሀ ውስጥ ከተዋቀረ ይህ ብቻ ይሠራል

በጣም ልዩ መንገድ ፣ ይህ መመሪያ የተፈጠረው እና በቴኔሴ ተማሪዎች እና ፋሲሊቲ ዩኒቨርስቲ እንዲጠቀምበት ታስቦ ነበር።

ይህ ኮድ በ MATLAB ውስጥ በአካባቢው የተፃፈ እና የተቀመጠ ኮድ ለማሄድ Roomba ን ለማዋቀር ያገለግላል። አስፈላጊውን ቤተመፃህፍት ከቴነሲ ዩኒቨርሲቲ ድር ጣቢያ ማግኘት ካልቻሉ ይህ አይሰራም። ቤተመጽሐፍት ካለዎት በቤተመጽሐፍት ውስጥ ያሉትን ተግባራት በመጠቀም የራስዎን Roomba ን በፕሮግራም ለመጠቀም ሊጠቀሙባቸው ይችላሉ። ይህ አስተማሪ ቤተ -ፍርግሞችን እንዴት እንደሚጭኑ ፣ ለሁሉም ኮዱ አቃፊ እንደሚፈጥሩ ፣ እና ከዚህ በታች ያቀረብነውን ፕሮግራም እንዴት ኮድ ማድረግ እና መጠቀም እንደሚችሉ ያስተምርዎታል።

አስፈላጊ ቁሳቁሶች;

· Roomba

· MATLAB

· Raspberry Pi እና Pi ካሜራ

ደረጃ 1 ፦ ቤተመጻሕፍትን ማግኘት

በኢንጂነሪንግ ድር ጣቢያ ላይ የመሣሪያ ሳጥን/ቤተ -መጽሐፍት ቀርቧል ፣ ያውርዱት እና ወደ አዲስ አቃፊ ውስጥ ያስገቡት። ይህ አቃፊ ሁሉንም የፕሮጀክት ሥራ ፋይሎችን መያዝ አለበት ፣ ምክንያቱም እርስዎ በሚያደርጉት ፕሮግራም ውስጥ ጥቅም ላይ የዋለው ማንኛውም ተግባር ወደ ቤተ -መጽሐፍት ማመልከት አለበት። ይህንን ካደረጉ በኋላ በፕሮግራሞችዎ ላይ መስራት መጀመር ይችላሉ

ደረጃ 2 - ፕሮግራሞቹን መጻፍ

በፕሮግራሙ ውስጥ ጥቅም ላይ ሊውሉ የሚችሉ ጥቂት ተግባራት አሉ ፣ እነዚህ ተግባራት “ሰነድ ክፍልባ” የሚለውን ትእዛዝ በመጠቀም ሊደረስባቸው ይችላሉ። እነዚህን ተግባራት በመጠቀም የእርስዎን Roomba በብዙ የተለያዩ መንገዶች መቆጣጠር ይችላሉ። ከዚህ በታች የተሰጠው ኮድ የማር ሮቨርን ለመፍጠር የጎበዝ ዳሳሾችን ፣ የመብራት አሞሌ ዳሳሾችን ፣ ካሜራ እና የገደል ዳሳሾችን በተለያዩ መንገዶች ይጠቀማል። ሮምባ አንድን ነገር ሲመታ ለመለየት የቦምብ ዳሳሾችን ተጠቀምን ፣ ይህ በሚሆንበት ጊዜ ሮቦቱ ወደ ኋላ ይመለሳል ፣ ዞር ብሎ መንቀሳቀሱን ይቀጥላል። ሮምባ አንድን ነገር ከመምታቱ በፊት ፣ የብርሃን አሞሌ ነገሩን ይገነዘባል እና ሮምባውን ያዘገየዋል ፣ ይህም ወደ ዕቃው ውስጥ ሲወድቅ የጎማ ዳሳሹን ለማነቃቃት ሮምባ በተጽዕኖው ያነሰ/የሚጎዳ ይሆናል። ካሜራው ውሃ ወይም ላቫ በላዩ ላይ ይፈልጋል ፣ ፈሳሽ ካልተገኘ ሮቦቱ ፍለጋውን ይቀጥላል ፣ የተወሰነ ውሃ ከተገኘ ሮቦቱ ለኦፕሬተሮቹ መልእክት ይልካል። የገደል ዳሳሾች ሮቦቱ ወደ ገደል ከተቃረበ ለማቆም የተነደፉ ናቸው። ሮቦቱ ገደል ከተሰማው ወደቀ እና ወደ ኋላ እንዳይመለስ ወደ ኋላ ይመለሳል።

ደረጃ 3 ኮድ

እንደ ቤተ -መጽሐፍቶቹ በተመሳሳይ አቃፊ ውስጥ በሚገኘው ወደ MATLAB ፋይል ይቅዱ እና ይለጥፉ

ተግባር ዋና ሮምባ ፋይል (r)

r.setDriveVelocity (0.1, 0.1)

እውነት ሆኖ % Infinte ኮዱን ለማስቀጠል loop እያለ

dontFall = cliffCheck (r) % ተለዋዋጭ 'dontFall' ን ወደ ተግባር 'cliffCheck' ይመድባል

'cliffCheck' ከተጠናቀቀ በኋላ በኮዱ ውስጥ ለመቀጠል መግለጫው የማይወድቅ ከሆነ

r.setDriveVelocity (0.1, 0.1) % 'cliffCheck' ከተጠናቀቀ በኋላ Roomba ን እንዲንቀሳቀስ ያደርገዋል

መግለጫ % ከሆነ 'dontFall' ያበቃል

ባምፐር = መጨናነቅ (r) % ተለዋዋጭ ‹ባምፐር› ን ወደ ‹bumpcheck› ተግባር ይመድባል

'bumpcheck' ከተጠናቀቀ በኋላ በኮድ ለመቀጠል መግለጫ % ከሆነ

r.setDriveVelocity (0.1, 0.1) % 'bumpcheck' ከተጠናቀቀ በኋላ Roomba ን እንዲንቀሳቀስ ያደርገዋል

መጨረሻ % መግለጫ ከሆነ ‹ባምፐር› ያበቃል

ፈሳሾች = LiquidCheck (r) % ተለዋዋጭ 'ፈሳሾችን' ለ 'LiquidCheck' ተግባር ይመድባል

ፈሳሽ ከሆነ % 'LiquidCheck' ከተጠናቀቀ በኋላ በኮድ ለመቀጠል መግለጫ ከሆነ

r.setDriveVelocity (0.1, 0.1) % 'LiquidCheck' ከተጠናቀቀ በኋላ Roomba ን እንዲንቀሳቀስ ያደርገዋል

መጨረሻ % መግለጫ ከሆነ ‹ፈሳሾችን› ያበቃል

lightbumper = lightcheck (r) % ተለዋዋጭ 'lightbumper' ን ወደ 'lightcheck' ተግባር ይመድባል

ለአፍታ አቁም (0.1) % ቀጣይ የሉፕ ድግግሞሽ እንዳይኖር በአጭሩ ለአፍታ አቁም

መጨረሻ % ማለቂያ በሌለበት ያበቃል

መጨረሻ % ያበቃል ተግባር

የተግባር ባምፔር = ባምፕ ቼክ (r) % 'bumpcheck' ተግባርን ይፈጥራል

bumpdata = r.getBumpers % ሁሉንም መረጃ ከባምፐር ወደ ተለዋዋጭ 'bumpdata' ይመድባል

ባምፐር = bumpdata.right || bumpdata.left || bumpdata.front % ለተለያዩ ባምፐሮች የተከማቸ ተለዋዋጭ ፣ ‹ባምፐር› ይፈጥራል

ከሆነ 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 (ራንዲ (270) ፣ 0.5) % በተቻለ ፍጥነት በ 0 እና በ 270 ዲግሪዎች መካከል ሮምባን በዘፈቀደ ክፍተት ያሽከረክራል

አበቃ

bumpdata.left> 0 ከሆነ

r.stop

r.moveDistance (-0.3 ፣ 0.2)

r.turnAngle (-90 ፣ 0.5) % በተቻለ ፍጥነት Roomba -90 ዲግሪዎች ያሽከረክራል

አበቃ

አበቃ

ተግባር lightbumper = lightcheck (r) % 'lightcheck' ተግባር ይፈጥራል

lightdata = r.getLightBumpers % ሁሉንም መረጃ ከብርሃን መንኮራኩር ዳሳሽ ወደ ተለዋዋጭ 'lightdata' ይመድባል

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % ለተለያዩ የብርሃን ባምፖች የተከማቸ ተለዋዋጭ ፣ 'lightbumper' ይፈጥራል።

if lightbumper % ከሆነ የመብራት ጠመንጃውን መረጃ ከላይ ለመጥራት

ከሆነ lightdata.left> 10 % የብርሃን መግለጫው ከ 10 እሴቶች በላይ ከተሰማው የክፍሉባ የተለያዩ ተግባራት እንዲፈጠሩ ምክንያት ከሆነ

r.setDriveVelocity (0.05 ፣ 0.05) % ለጉልበቱ ለመዘጋጀት የክፍልባን ፍጥነት ይቀንሳል

መጨረሻ % መግለጫ ከሆነ የመጀመሪያውን ያበቃል

lightdata.rightCenter> 10 ከሆነ

r.setDriveVelocity (0.05 ፣ 0.05)

አበቃ

ከሆነ lightdata.right> 10

r.setDriveVelocity (0.05 ፣ 0.05)

አበቃ

ifdata.leftCenter> 10 ከሆነ

r.setDriveVelocity (0.05 ፣ 0.05)

አበቃ

መግለጫ % ከሆነ 'lightbumper' ያበቃል

መጨረሻ %የመብራት ቼክ ተግባርን ያበቃል

ተግባር dontFall = cliffCheck (r) % 'cliffCheck' ተግባርን ይፈጥራል

ውሂብ = r.getCliffSensors; % ሁሉንም ከገደል ዳሳሽ ወደ ተለዋዋጭ ‹ውሂብ› ይመድባል

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % ለተለያዩ የገደል ዳሳሾች የተከማቸ ተለዋዋጭ ፣ ‹dontFall› ይፈጥራል

ከሆነ አይወድቁ % የገደል አነፍናፊ ውሂብን ከላይ ለመጥራት መግለጫ ከሆነ

ከሆነ 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 ዲግሪን በተቻለ ፍጥነት ያሽከረክራል

ሌላ ከሆነ ውሂብ። መብት <1010

r.stop

r.moveDistance (-0.3 ፣ 0.2)

r.turnAngle (90 ፣ 0.5) % Roomba 90 ዲግሪን በተቻለ ፍጥነት ያሽከረክራል

አበቃ

አበቃ

አበቃ

የተግባር ፈሳሾች = LiquidCheck (r) % 'LiquidCheck' ተግባርን ይፈጥራል

እውነት %ለመለካት ማለቂያ የሌለው ዑደት ይጀምራል

img = r.getImage; % ካሜራውን ከሮቦቱ ያነባል

ምስል (img) % በምስል መስኮት ውስጥ ምስሉን ያሳያል

red_mean = አማካይ (አማካኝ (img (200 ፣ 150 ፣ 1)))% የቀይ ፒክሰሎችን አማካይ መጠን ያነባል

blue_mean = አማካኝ (አማካኝ (img (200 ፣ 150 ፣ 3)))% የሰማያዊ ፒክስል መጠንን ያነባል

ፈሳሾች = ቀይ_ማለት || blue_mean % ለተለያዩ የቀለም ተለዋጮች የተከማቸ ተለዋዋጭ ፣ ‹ፈሳሾች› ይፈጥራል

ፈሳሽ ከሆነ % የምስል ውሂቡን ከላይ ለመጥራት መግለጫ ከሆነ

red_mean> 170 % ከሆነ መግለጫው ከ 170 የሚበልጠውን ቀይ ቀይ ቀለም ካየ የክፍሉባ የተለያዩ ተግባራት እንዲከሰቱ የሚያደርግ ከሆነ

r.stop % roomba ያቆማል

r.setLEDCenterColor (255) % ክብ ወደ ቀይ ቀለም ያዘጋጃል

r.setLEDDigits (); ማሳያውን % አጽዳ

ረ = የተጠባባቂ አሞሌ (0 ፣ '*መልእክት)*); % ለመጫን መልእክት የመጠባበቂያ አሞሌን ይፈጥራል

r.setLEDDigits ('HOT'); % «HOT» ን ለማውጣት የ LED ማሳያ ያዘጋጃል

ለአፍታ አቁም (0.5) %አጭር አቁም የተከፋፈለ መረጃን ለማንበብ

r.setLEDDigits ('LAVA'); % «LAVA» ን ለማውጣት የ LED ማሳያ ያዘጋጃል

ለአፍታ አቁም (0.5)

የተጠባባቂ አሞሌ (.33 ፣ ረ ፣ '*መልእክት አለ*'); %በተጠባባቂ አሞሌ ውስጥ ጭማሪ ይፈጥራል

r.setLEDDigits ('HOT');

ለአፍታ አቁም (0.5)

r.setLEDDigits ('LAVA');

ለአፍታ አቁም (0.5)

የተጠባባቂ አሞሌ (.67 ፣ ረ ፣ '*መልእክት አለ*'); % በተጠባባቂ አሞሌ ውስጥ ጭማሪ ይፈጥራል

r.setLEDDigits ('HOT');

ለአፍታ አቁም (0.5)

r.setLEDDigits ('LAVA');

የተጠባባቂ አሞሌ (1 ፣ ረ ፣ '*መልእክት)*); %የመጠባበቂያ አሞሌውን ያጠናቅቃል

ለአፍታ አቁም (1)

ዝጋ (ረ) %የመጠባበቂያ አሞሌውን ይዘጋል

r.setLEDDigits (); % የ LED ማሳያውን ያጸዳል

ሁሉንም ይዝጉ %ሁሉንም ቀዳሚ መስኮቶች ይዘጋል

መጥረቢያዎች ('ቀለም' ፣ 'ምንም' ፣ 'XColor' ፣ 'የለም' ፣ 'YColor' ፣ 'የለም') % የመጥረቢያዎችን እና ገበታውን የመስኮት መስኮት ያጸዳል

y = 0.5; % በማሴሪያው መስኮት ውስጥ የጽሑፉን y- አቀማመጥ ያዘጋጃል

x = 0.06; % በእቅዱ መስኮት ውስጥ የጽሑፉን x- አቀማመጥ ያዘጋጃል

ርዕስ ('ከማርስ ሮምባ' ፣ 'ቅርጸ ቁምፊ' ፣ 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 (); ማሳያውን % አጽዳ

ረ = የተጠባባቂ አሞሌ (0 ፣ '*መልእክት)*); % ለመጫን መልእክት የመጠባበቂያ አሞሌን ይፈጥራል

r.setLEDDigits ('ተመልከት'); % «LOOK» ን ለማውጣት የ LED ማሳያ ያዘጋጃል

ለአፍታ አቁም (0.5) %አጭር አቁም የተከፋፈለ መረጃን ለማንበብ

r.setLEDDigits ('WATR'); % 'WATR' ን ለማውጣት የ LED ማሳያ ያዘጋጃል

ለአፍታ አቁም (0.5)

የተጠባባቂ አሞሌ (.33 ፣ ረ ፣ '*መልእክት አለ*'); %በተጠባባቂ አሞሌ ውስጥ ጭማሪ ይፈጥራል

r.setLEDDigits ('ተመልከት');

ለአፍታ አቁም (0.5)

r.setLEDDigits ('WATR');

ለአፍታ አቁም (0.5)

የተጠባባቂ አሞሌ (.67 ፣ ረ ፣ '*መልእክት አለ*'); % በተጠባባቂ አሞሌ ውስጥ ጭማሪ ይፈጥራል

r.setLEDDigits ('ተመልከት');

ለአፍታ አቁም (0.5)

r.setLEDDigits ('WATR');

የተጠባባቂ አሞሌ (1 ፣ ረ ፣ '*መልእክት)*); %የመጠባበቂያ አሞሌውን ያጠናቅቃል

ለአፍታ አቁም (1)

ዝጋ (ረ) %የመጠባበቂያ አሞሌውን ይዘጋል

r.setLEDDigits (); % የ LED ማሳያውን ያጸዳል

ሁሉንም ይዝጉ %ሁሉንም ቀዳሚ መስኮቶች ይዘጋል

መጥረቢያዎች ('ቀለም' ፣ 'የለም' ፣ 'XColor' ፣ 'የለም' ፣ 'YColor' ፣ 'none') % የመጥረቢያዎችን እና ገበታውን የመስኮት መስኮት ያጸዳል

y = 0.5; % በማሴሪያው መስኮት ውስጥ የጽሑፉን y- አቀማመጥ ያዘጋጃል

x = 0.06; % በእቅዱ መስኮት ውስጥ የጽሑፉን x- አቀማመጥ ያዘጋጃል

ርዕስ ('ከማርስ ሮምባ' ፣ 'ቅርጸ ቁምፊ' ፣ 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); % የክፍሉን ማእከል ኤልኢዲ ወደ ብርቱካን ያዘጋጃል

ሁሉንም ይዝጉ የተቀሩ ክፍት መስኮቶችን ይዘጋል

መግለጫ %ከሆነ 'red_mean' ያበቃል

መጨረሻ %መግለጫ ከሆነ ‹ፈሳሾችን› ያበቃል

መጨረሻ % ማለቂያ በሌለው ይዘጋል

መጨረሻ % ተግባሩን ያበቃል 'LiquidCheck'

ደረጃ 4 - ኮዱን ማስኬድ

ኮዱን ወደ MATLAB ገልብጠው ከለጠፉ በኋላ ከ Roomba ጋር መገናኘት አለብዎት። Roomba ከተገናኘ በኋላ ተለዋዋጭ r ን መሰየም አለብዎት። ተግባሮቹ Roomba ን ሲጠቅሱ ተለዋዋጭውን r ይጠቀማሉ ፣ ስለዚህ Roomba እንደ ተለዋዋጭ r መገለጽ አለበት። ኮዱን ከሮጠ በኋላ Roomba እንደ መመሪያው መሮጥ አለበት።

የሚመከር: