ዝርዝር ሁኔታ:

Roomba ን ወደ ማርስ ሮቨር ማዞር 5 ደረጃዎች
Roomba ን ወደ ማርስ ሮቨር ማዞር 5 ደረጃዎች

ቪዲዮ: Roomba ን ወደ ማርስ ሮቨር ማዞር 5 ደረጃዎች

ቪዲዮ: Roomba ን ወደ ማርስ ሮቨር ማዞር 5 ደረጃዎች
ቪዲዮ: "ማሪኝ እና ልሂድ" | ዘማሪት ለምለም ከበደ 2024, ህዳር
Anonim
የእርስዎን Roomba ወደ ማርስ ሮቨር ማዞር
የእርስዎን Roomba ወደ ማርስ ሮቨር ማዞር

ደረጃ 1 - ቁሳቁሶችዎን ይሰብስቡ

ይህንን ፕሮጀክት ለማጠናቀቅ የሚከተሉትን ቁሳቁሶች መሰብሰብ ያስፈልግዎታል።

1 Roomba ሮቦት

1 Raspberry Pi Kit

1 ቪዲዮ ካሜራ

ወደ MATLAB መዳረሻ

ደረጃ 2 - ለ MATLAB የ Roomba መሣሪያ ሳጥኖችን ያውርዱ

ለ MATLAB የ Roomba መሣሪያ ሳጥኖችን ያውርዱ
ለ MATLAB የ Roomba መሣሪያ ሳጥኖችን ያውርዱ
ለ MATLAB የ Roomba መሣሪያ ሳጥኖችን ያውርዱ
ለ MATLAB የ Roomba መሣሪያ ሳጥኖችን ያውርዱ

ይህንን ፕሮጀክት ለማጠናቀቅ አስፈላጊዎቹን የመሳሪያ ሳጥኖች ለመጫን የሚከተለውን ኮድ ያሂዱ።

ተግባር roomba ጫን

clc;

የሚጫኑ የፋይሎች % ዝርዝር

ፋይሎች = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};

ለመጫን % አካባቢ

አማራጮች = weboptions ('CertificateFilename', ''); % የእውቅና ማረጋገጫ መስፈርቶችን ችላ በማለት ይንገሩት

አገልጋይ = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';

dlgTitle = 'Roomba ጫን/አዘምን';

% የማሳየት ዓላማ እና ማረጋገጫ ያግኙ

ጥያቄ = {

'ይህ ፕሮግራም እነዚህን EF 230 Roomba ፋይሎችን ያውርዳል-'

''

strjoin (ፋይሎች ፣”)

''

'ወደዚህ አቃፊ:'

''

ሲዲ

''

'መቀጠል ይፈልጋሉ? '

};

ቢፕ;

yn = questdlg (ጥያቄ ፣…

dlgTitle ፣…

“አዎ” ፣ “አይ” ፣ “አዎ”);

~ strcmp (yn ፣ ‘አዎ’) ከሆነ ፣ ይመለሱ ፤ አበቃ

ያሉትን የፋይሎች ዝርዝር % ያግኙ

exist_files = ፋይሎች (cellfun (@exist ፣ files)> 0);

~ ባዶ ከሆነ (ነባር_መለያዎች)

% እነሱን መተካት በእውነት ትክክል መሆኑን ያረጋግጡ

ፈጣን = {'እነዚህን ፋይሎች (ዎች) በመተካት ላይ ነዎት ፦'

''

strjoin (ነባር_ ፋይሎች ፣”)

''

'ለመተካት እሺ?'

};

ቢፕ;

yn = questdlg (ጥያቄ ፣…

dlgTitle ፣…

“አዎ” ፣ “አይ” ፣ “አዎ”);

~ strcmp (yn ፣ ‘አዎ’) ከሆነ ፣ ይመለሱ ፤ አበቃ

አበቃ

% ፋይሎቹን ያውርዱ

cnt = 0;

ለ i = 1: ርዝመት (ፋይሎች)

f = ፋይሎች {i};

disp (['ማውረድ' ረ]);

ሞክር

url = [አገልጋይ ረ];

ድር አስቀምጥ (ረ ፣ ዩአርኤል ፣ አማራጮች); የደህንነት ስህተቶችን ለማስወገድ % የተጨመሩ አማራጮች

cnt = cnt + 1;

መያዝ

disp (['ማውረድ ስህተት' ረ]);

ዱሚ = [f '.html'];

ካለ (ዱሚ ፣ ‹ፋይል›) == 2

ሰርዝ (ዱሚ)

አበቃ

አበቃ

አበቃ

cnt == ርዝመት (ፋይሎች) ከሆነ

msg = 'መጫኑ ተሳክቷል';

ተጠባባቂ (msgbox (msg ፣ dlgTitle));

ሌላ

msg = 'የመጫን ስህተት - ለዝርዝሮች የትእዛዝ መስኮቱን ይመልከቱ';

ተጠባባቂ (errordlg (msg ፣ dlgTitle));

አበቃ

ጨርስ %roomba ጫን

ደረጃ 3: ከእርስዎ Roomba ጋር ይገናኙ

WiFi ን በመጠቀም ከእርስዎ Roomba ጋር ለመገናኘት ጊዜው አሁን ነው። 2 ጣቶችን በመጠቀም የእርስዎን Roomba ለማብራት ወይም ዳግም ለማስጀመር የመትከያ እና የስፖት ቁልፎችን በአንድ ጊዜ ይጫኑ። በመቀጠልም ከሮቦትዎ ጋር ለመገናኘት በ MATLAB የትእዛዝ መስኮት ውስጥ ኮዱን r = roomba (# የእርስዎ Roomba) ያሂዱ። አንዴ ይህንን ትእዛዝ ከፈጸሙ በኋላ የእርስዎ Roomba ለመሄድ ዝግጁ መሆን አለበት።

ደረጃ 4: የእርስዎን Roomba ለመቆጣጠር እንዴት እንደሚፈልጉ ይምረጡ

የእርስዎን Roomba ለመቆጣጠር እንዴት እንደሚፈልጉ ይምረጡ
የእርስዎን Roomba ለመቆጣጠር እንዴት እንደሚፈልጉ ይምረጡ
የእርስዎን Roomba ለመቆጣጠር እንዴት እንደሚፈልጉ ይምረጡ
የእርስዎን Roomba ለመቆጣጠር እንዴት እንደሚፈልጉ ይምረጡ

የእርስዎን Roomba ን የሚቆጣጠሩባቸው ሁለት መንገዶች አሉ -በራስ -ሰር ወይም ስማርትፎን እንደ መቆጣጠሪያ በመጠቀም።

Roomba ን በራስ-ሰር ለማሽከርከር ከመረጡ ፣ ሶስቱን አብሮገነብ ዳሳሾችን ማለትም የገደል ዳሳሾችን ፣ የጎድን ዳሳሾችን እና ቀላል ዳሳሾችን መጠቀም ያስፈልግዎታል።

ስማርትፎን ለመጠቀም በመጀመሪያ ከዚህ በታች ያሉትን ደረጃዎች በመከተል ስማርትፎንዎን ከኮምፒዩተርዎ ጋር ማገናኘት ያስፈልግዎታል።

ማሳሰቢያ -ኮምፒተርዎ እና ስማርትፎንዎ በትክክል ለመገናኘት በተመሳሳይ የ WiFi አውታረ መረብ ላይ መሆን አለባቸው!

1. MATLAB መተግበሪያውን በመሣሪያዎ ላይ ካለው የመተግበሪያ መደብር ያውርዱ።

2. በትእዛዝ መስኮትዎ ውስጥ “አገናኝ በርቷል” ብለው ይተይቡ እና በሁለቱም መሣሪያዎች ውስጥ ማስገባት የሚያስፈልገውን የይለፍ ቃል ያዘጋጁ።

3. ይህን ካደረጉ በኋላ ፣ MATLAB ኮምፒውተሮችዎን የአይፒ አድራሻ ይሰጥዎታል። በስማርትፎንዎ ላይ በ MATLAB መተግበሪያ ውስጥ ወደ የቅንብሮች ገጽ ውስጥ መግባት እና የተሰጠውን የአይፒ አድራሻ እና ቀደም ብለው ያስገቡትን የይለፍ ቃል በመጠቀም ኮምፒተር ማከል ያስፈልግዎታል።

4. በኮምፒተርዎ ላይ ባለው የትእዛዝ መስኮት ውስጥ ኮዱን m = mobiledev ይተይቡ እና ይህ የእርስዎን ስማርትፎን እንደ Roomba መቆጣጠሪያ አድርጎ ማስጀመር አለበት።

5. ኮምፒተርዎ እና ስማርትፎንዎ አሁን ለመሄድ ዝግጁ መሆን አለባቸው።

ደረጃ 5 - የእርስዎን Roomba ይንዱ

አሁን የእርስዎን ማርስ ሮቨር ለመፍጠር ሁሉም አስፈላጊ መሣሪያዎች አሉዎት ፣ የራስዎን ኮድ ለመፍጠር ዝግጁ ነዎት። ለሁለቱም ለራስ ገዝ መንዳት እና በስማርትፎን ቁጥጥር ለሚደረግ መንዳት ከዚህ በታች የምሳሌ ኮድ አያይዘናል።

ራስ -ሰር መንዳት

ተግባር Explore_modified (r)

%የግቤት ክርክሮች 1 roomba object ፣ r

%የውጤት ክርክሮች: የለም

%መግለጫ ፦

%ተግባር ገዝነትን ለመፍቀድ ማለቂያ በሌለው ጊዜ ይጠቀማል

የቦት አካባቢን ማሰስ።

%

%funciton በተጨማሪ ውስጥ ምን ማድረግ እንዳለበት ለክፍልባ መመሪያዎችን ይሰጣል

የሚከተሉት ሁኔታዎች - ጎማ (ዎች) ከመሬት ጋር ግንኙነት (ማጣት) ማጣት ፣ ሀ

%ነገር ከቦቱ ፊት ወይም ከሁለቱም ወገን ተገኝቷል ፣ እና ሀ

ከቦቱ ፊት ወይም ከሁለቱም ወገን %ድንገተኛ ጠብታ ተገኝቷል።

%

%የተለመዱ መመሪያዎች ከፍ ለማድረግ የታሰቡ የእንቅስቃሴ ትዕዛዞችን ያካትታሉ

%አሰሳ ወይም የተገኘ አደጋን ያስወግዱ እና ለመግባባት ያዝዙ

ስለ ቦቶች ግኝቶች (ስዕሎች) ፣ አቀማመጥ (ግራፍ) ፣

%እና ሁኔታ (የታሰረ ማስጠንቀቂያ) በማታብ እና/ወይም በኢሜል ከተጠቃሚው ጋር። በርካታ

ለመደሰት %የድምፅ ትዕዛዞች ተጨምረዋል።

%የማዋቀር የኢሜል ችሎታዎች

mail = '[email protected]';

የይለፍ ቃል = 'EF230Roomba';

setpref ('በይነመረብ' ፣ 'SMTP_Server' ፣ 'smtp.gmail.com');

setpref ('በይነመረብ' ፣ 'ኢ_ሜል' ፣ ሜይል);

setpref ('በይነመረብ' ፣ 'SMTP_Username' ፣ ሜይል);

setpref ('በይነመረብ' ፣ 'SMTP_Password' ፣ የይለፍ ቃል);

props = java.lang. System.getProperties;

props.setProperty ('mail.smtp.starttls.enable', 'true');

props.setProperty ('mail.smtp.auth', 'true');

props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory');

props.setProperty ('mail.smtp.socketFactory.port', '465');

% r = roomba (19)

r.beep ('G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2', G1 ^^, E1 ^^, C2 ', C2', C1 ^^, C1 ^^ ፣ D1 ^^ ፣ C1 ^^ ፣ D2 ^^ ፣ E4 ^^ ፣ G2 ^^ ፣ G2 ^^ ፣ G2 ^^ ፣ G2 ^^ ፣ A2 ^^ ፣ A2 ^^ ፣ G1 ^^ ፣ E1 ^^ ፣ C2 ^^ ፣ C2 ^^ ፣ C2 ^^ ፣ E1 ^^ ፣ E1 ^^ ፣ E1 ^^ ፣ D1 ^^ ፣ C4 ^^ ') ፤

v =.1;

reflect_datum = 2700; %አዘጋጅ የገደል ዳሳሾች የማጣቀሻ እሴት

lightBumper_datum = 200; %set light Bumper sensors የማጣቀሻ እሴት

pos = [0, 0]; ከተጀመረበት የውሂብ ክምችት ጋር ለቦታ ማከማቻ %ተለዋዋጭ

አንግል = 0; %አዘጋጅ ማጣቀሻ አንግል

netangle = 0; %የተጣራ የማዕዘን መፈናቀል

እኔ = 2; ወደ ቦታ ማከማቻ ተለዋዋጭ ረድፎችን ለማከል %ተደጋጋሚ

dist = 0;

r.setDriveVelocity (v, v); %ጀምር roomba ወደፊት እየገሰገሰ

እውነት እያለ

ገደል = r.getCliffSensors;

ቡም = r.getBumpers;

ብርሃን = r.getLightBumpers;

RandAngle = randi ([20, 60], 1); %በ 20 እና በ 60 ዲግሪዎች መካከል 1 የዘፈቀደ አንግል ያመነጫል። ቦት በሉፕ ውስጥ እንዳይጣበቅ ለመከላከል ያገለግላል

አንድ ወይም ከዚያ በላይ መንኮራኩር ከመሬት ጋር ንክኪ ቢያጣ ምን ማድረግ እንዳለበት

%እንቅስቃሴን ያቁሙ ፣ ከአከባቢ ስዕል ጋር የማስጠንቀቂያ ኢሜል ይላኩ ፣

%እና ተጠቃሚው እንዲቀጥል ወይም እርዳታ እንዲጠብቅ ይጠይቁ

Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1

r.stop

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %y ያስተባብሩ

i = i+1;

r.beep ('F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^ ፣ C1 ^^ ፣ F#1 ^^ ፣ C1 ^^ ፣ F#1 ^^ ፣ C1 ^^ ፣ F#1 ^^ ፣ C1 ^^ ')

img = r.getImage;

መፃፍ (img ፣ 'stick.png');

%--------------------------

imfile = 'stick.png';

አቀማመጥ = savepos (pos);

%---------------------------

የመልዕክት መልእክት (ኢሜል ፣ “እገዛ!” ፣ “በገደል ላይ ተዘፍቄያለሁ!” ፣ {imfile ፣ position})

list = {'ቀጥል' ፣ 'አቁም'};

idx = ምናሌ ('ምን ማድረግ አለብኝ?' ፣ ዝርዝር);

idx == 2 ከሆነ

ሰበር

አበቃ

%አንድ ነገር በቦት ፊት ከተገኘ ምን ማድረግ እንዳለበት

%አቁም ፣ ወደ ኋላ ተመለስ ፣ ፎቶ አንሳ ፣ የግኝት ተጠቃሚን አሳውቅ

በኢሜል %፣ በ 90 ዲግሪ ማዞር እና ማሰስዎን ይቀጥሉ

ሌላ ከሆነ Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1

r.stop;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %y ያስተባብሩ

i = i+1;

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %y ያስተባብሩ

i = i+1;

r.beep ('A1^፣ A1^፣ A4^፣ A2^፣ G2^፣ G2' ፣ G4^፣ Bb2^፣ Bb2 '፣ Bb3.5' '፣ G1^፣ A8' ')

img = r.getImage;

መፃፍ (img ፣ 'FrontBump.png')

%--------------------------

imfile = 'FrontBump.png';

አቀማመጥ = savepos (pos);

%---------------------------

የመልዕክት መልእክት (ኢሜል ፣ ‘ማንቂያ!’ ፣ ‘የሆነ ነገር አገኘሁ!’ ፣ {imfile ፣ position})

ማዕዘን = 90;

netangle = netangle+ማዕዘን;

r.turnAngle (አንግል);

r.setDriveVelocity (v, v);

%ነገር ከቦቱ ግራ ከተገኘ ምን ማድረግ እንዳለበት

%አቁም ፣ ወደ ነገሩ አዙር ፣ ምትኬ አስቀምጥ ፣ ፎቶ አንሳ ፣ ንቃት

በኢሜል %የግኝት ተጠቃሚ ፣ 90 ዲግሪዎች ያዙሩ እና ማሰስዎን ይቀጥሉ

elseif Light.leftFront> lightBumper_datum || Light.left> lightBumper_datum || Bump.left == 1

r.stop;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %ተቀናጅቶ ያግኙ

i = i+1;

ማዕዘን = 30;

netangle = netangle+ማዕዘን;

r.turnAngle (አንግል);

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %y ያስተባብሩ

i = i+1;

r.beep ('A4' ፣ A4^፣ G1^፣ E1^፣ C3.5^፣ C2 ^^ ፣ C1^፣ C1^፣ C2^፣ D2^፣ D2^፣ E8^')

img = r.getImage;

መፃፍ (img ፣ 'LeftBump.png')

%--------------------------

imfile = 'LeftBump.png';

አቀማመጥ = savepos (pos);

%---------------------------

የመልዕክት መልእክት (ኢሜል ፣ ‘ማንቂያ!’ ፣ ‘የሆነ ነገር አገኘሁ!’ ፣ {imfile ፣ position})

አንግል = -90;

netangle = netangle+ማዕዘን;

r.turnAngle (አንግል);

r.setDriveVelocity (v, v);

%ነገር በቦት ቀኝ ከተገኘ ምን ማድረግ እንዳለበት

%አቁም ፣ ወደ ነገሩ አዙር ፣ ምትኬ አስቀምጥ ፣ ፎቶ አንሳ ፣ ንቃት

በኢሜል %የግኝት ተጠቃሚ ፣ 90 ዲግሪን ያዙሩ እና ማሰስዎን ይቀጥሉ

ሌላ ከሆነ Light.rightFront> lightBumper_datum || ፈካ ያለ.እምነት> lightBumper_datum || ቡም.እውቀት == 1

r.stop;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %y ያስተባብሩ

i = i+1;

አንግል = -30;

netangle = netangle+ማዕዘን;

r.turnAngle (አንግል);

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %y ያስተባብሩ

i = i+1;

ለአፍታ አቁም (1.5);

r.beep ('C1^፣ C1^፣ C2^፣ D2^፣ D2^፣ C8' ')

img = r.getImage;

መፃፍ (img ፣ 'RightBump.png')

%--------------------------

imfile = 'RightBump.png';

አቀማመጥ = savepos (pos);

%---------------------------

የመልዕክት መልእክት (ኢሜል ፣ ‘ማንቂያ!’ ፣ ‘የሆነ ነገር አገኘሁ!’ ፣ {imfile ፣ position});

ማዕዘን = 90;

netangle = netangle+ማዕዘን;

r.turnAngle (አንግል);

r.setDriveVelocity (v, v);

ከገደል ጫፍ በስተግራ ከተገኘ ምን ማድረግ እንዳለበት

%ያቁሙ ፣ ወደ ኋላ ይንቀሳቀሱ ፣ ወደ ቀኝ ይታጠፉ ፣ ማሰስዎን ይቀጥሉ

ሌላ ከሆነ ገደል.ግራ <reflect_datum || Cliff.leftFront <reflect_datum

r.stop;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %y ያስተባብሩ

i = i+1;

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %x አስተባባሪ ያግኙ

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %ተቀናጅቶ ያግኙ

i = i+1;

አንግል = -RandAngle;

netangle = netangle+ማዕዘን;

r.turnAngle (አንግል);

r.setDriveVelocity (v, v);

በገደል በስተቀኝ ከቦታ በስተቀኝ ከተገኘ ምን ማድረግ እንዳለበት

%ያቁሙ ፣ ወደ ኋላ ይንቀሳቀሱ ፣ ወደ ግራ ይታጠፉ ፣ ማሰስዎን ይቀጥሉ

ሌላ ከሆነ ገደል.እውቀት <reflect_datum || ገደል. ቀኝ ፊት ለፊት <reflect_datum

r.stop;

dist = r.getDistance;

pos (i, 1) = dist * sind (አንግል); %x አስተባባሪ ያግኙ

pos (i, 2) = dist * cosd (አንግል); %y ያስተባብሩ

i = i+1;

r.moveDistance (-. 125);

አንግል = RandAngle;

netangle = netangle+ማዕዘን;

r.turnAngle (አንግል);

r.setDriveVelocity (v, v);

አበቃ

አበቃ

የስማርትፎን ተቆጣጣሪ

አማራጮች = {'ገዝ' ፣ 'በእጅ ቁጥጥር'}

ፈጣን = ምናሌ ('ሮቨርን እንዴት መቆጣጠር ይፈልጋሉ?' ፣ አማራጮች)

m = mobiledev

r = roomba (19)

ፈጣን ከሆነ == 1

ያስሱ (r)

ሌላ

እውነት እያለ

ለአፍታ አቁም (.5)

PhoneData = m. Orientation;

አዚ = PhoneData (1);

Pitch = PhoneData (2);

ጎን = PhoneData (3);

ከሆነ ጎን> 130 || ጎን <-130 %ስልኩ ወደ ታች ከተገለበጠ የክፍልባውን እና የመውጫ loop ን ያቁሙ

r.stop

r.beep ('ሲ ፣ ሲ ፣ ሲ ፣ ሲ')

ሰበር

elseif Side> 25 && Side <40 %ስልኩ ከ 25 እስከ 40 ዲግ ወደ 5 ግራ ወደ ግራ ከዞረ

r.turnAngle (-5);

elseif Side> 40 %ስልኩ ወደ ጎን ከ 40 ዲግሪ ዞሮ ወደ ግራ 45 ዲግሪ ከሆነ

r.turnAngle (-45)

elseif Side -40 %ስልኩ ከ -25 እስከ -40 ዲግ ወደ 5 ዲግታ ወደ ጎን ቢዞር

r.turnAngle (5);

elseif Side <-40 %ስልኩ ወደ ጎን ከዞረ ከ -40 ዲግ ወደ ግራ 45 ዲግሪ ከሆነ

r. TurnAngle (45)

አበቃ

%ስልክ በአቀባዊ አቅራቢያ ከተያዘ ምስል ወስደው ያሴሩት

Pitch <-60 && ምስል <= 9

r.beep

img = r.getImage;

ንዑስ ክፍል (3 ፣ 3 ፣ ምስል)

imshow (img)

አበቃ

ከፊትና ከኋላ አቅጣጫ ላይ በመመሥረት %ወደ ፊት እና ወደ ኋላ ይራመዱ

Pitch> 15 && Pitch <15 %በ 15 እና 35 ዲግሪ መካከል ያለው ርቀት በአጭር ርቀት ወደፊት ቢገፋ

ከመንቀሳቀስዎ በፊት %የመብራት መከላከያ መረጃ ያግኙ

litBump = r.getLightBumpers;

if litBump.leftFront> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %የሆነ ነገር ከክፍሉባ ፊት ከሆነ እና ወደ ፊት ከሄደ ይምታ እና ጫጫታ ያድርጉ እና መልእክት ያሳዩ

r.beep ('C ^^ ፣ F#^፣ C ^^ ፣ F#^')

ሌላ %መንቀሳቀስ

r.moveDistance (.03);

%ከተንቀሳቀሱ በኋላ የጥበቃ መረጃ ያግኙ

ቡም = r.getBumpers;

ቡም.እውቀት == 1 || ቡም.ግራ == 1 || Bump.front == 1

r.beep ('ሀ ፣ ሲ ፣ ኢ')

r.moveDistance (-. 01)

አበቃ

የገደል ዳሳሽ ውሂብን %ያግኙ

ገደል = r.getCliffSensors;

Cliff.left> 1500 || ገደል.ግራ ወደ ፊት> 1500 || ገደል. ቀኝ ፊት> 1500 || Cliff.right> 1500 %የሆነ ነገር የገደል አነፍናፊን የሚቀሰቅሰው ከሆነ እንደ ላቫ እና ምትኬ አድርገው ይያዙት

r.beep ('C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C')

r.moveDistance (-. 031)

አበቃ

አበቃ

ሌላ ከሆነ ፒች> 35 %ከፍ ያለ ከሆነ 35 ዲግሪ ወደ ረጅም ርቀት ወደፊት የሚሄድ ከሆነ

ከመንቀሳቀስዎ በፊት %የመብራት መከላከያ መረጃ ያግኙ

litBump = r.getLightBumpers;

if litBump.leftFront> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %የሆነ ነገር ከክፍሉባ ፊት ከሆነ እና ወደ ፊት ከሄደ ይምታ እና ጫጫታ ያድርጉ እና መልእክት ያሳዩ

r.beep ('C ^^ ፣ F#^፣ C ^^ ፣ F#^')

ሌላ %መንቀሳቀስ

r.moveDistance (.3)

%ከተንቀሳቀሱ በኋላ የጥበቃ መረጃ ያግኙ

ቡም = r.getBumpers;

ቡም.እውቀት == 1 || ቡም.ግራ == 1 || Bump.front == 1 %የሆነ ነገር ቢመቱ ጫጫታ ያድርጉ ፣ መልእክት ያሳዩ እና ምትኬ ያስቀምጡ

r.beep ('ሀ ፣ ሲ ፣ ኢ')

r.moveDistance (-. 01)

አበቃ

ከተንቀሳቀሱ በኋላ የገደል አነፍናፊ ውሂብ %ያግኙ

ገደል = r.getCliffSensors;

Cliff.left> 1500 || ገደል.ግራ ወደ ፊት> 1500 || ገደል. ቀኝ ፊት> 1500 || Cliff.right> 1500 %የሆነ ነገር የገደል አነፍናፊን የሚቀሰቅሰው ከሆነ እንደ ላቫ እና ምትኬ አድርገው ይያዙት

r.beep ('C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C')

r.moveDistance (-. 31)

አበቃ

አበቃ

ሌላ ከሆነ ፒች -35 %በ -15 እና -35 ዲግሪ መካከል ያለው ርቀት በአጭር ርቀት ወደ ኋላ ቢመለስ

r.moveDistance (-. 03);

ከተንቀሳቀሱ በኋላ የገደል አነፍናፊ ውሂብ %ያግኙ

ገደል = r.getCliffSensors;

Cliff.left> 1500 || ገደል.ግራ ወደ ፊት> 1500 || ገደል. ቀኝ ፊት> 1500 || Cliff.right> 1500 %የሆነ ነገር የገደል አነፍናፊን የሚቀሰቅሰው ከሆነ እንደ ላቫ እና ምትኬ አድርገው ይያዙት

r.beep ('C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C')

r.moveDistance (.04)

አበቃ

ሌላ ከሆነ ፒች -60 %በ -35 እና -60 ዲግ መካከል ያለው ርቀት ረዘም ያለ ርቀት ወደ ኋላ ቢመለስ

r.moveDistance (-. 3)

ከተንቀሳቀሱ በኋላ የገደል አነፍናፊ ውሂብ %ያግኙ

ገደል = r.getCliffSensors;

Cliff.left> 1500 || ገደል.ግራ ወደ ፊት> 1500 || ገደል. ቀኝ ፊት> 1500 || ገደል እሺ> 1500 %የሆነ ነገር የገደል አነፍናፊን የሚቀሰቅሰው ከሆነ እንደ ላቫ እና ምትኬ አድርገው ይያዙት

r.beep ('C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C ፣ C ^^ ፣ C')

r.moveDistance (.31)

አበቃ

አበቃ

አበቃ

አበቃ

የሚመከር: