Բովանդակություն:

Ձեր սենյակը վերածեք Mars Rover- ի ՝ 5 քայլ
Ձեր սենյակը վերածեք Mars Rover- ի ՝ 5 քայլ

Video: Ձեր սենյակը վերածեք Mars Rover- ի ՝ 5 քայլ

Video: Ձեր սենյակը վերածեք Mars Rover- ի ՝ 5 քայլ
Video: Սենյակային ծաղիկները ջրելիս պատրաստեք այս խառնուրդը, և ձեր ծաղիկները կլինեն ավելի առողջ 2024, Նոյեմբեր
Anonim
Ձեր սենյակը վերածեք Մարս Ռովերի
Ձեր սենյակը վերածեք Մարս Ռովերի

Քայլ 1: Հավաքեք ձեր նյութերը

Այս նախագիծն ավարտելու համար ձեզ հարկավոր է հավաքել հետևյալ նյութերը.

1 Roomba ռոբոտ

1 Raspberry Pi Kit

1 Տեսախցիկ

Մուտք դեպի MATLAB

Քայլ 2: Ներբեռնեք Roomba Toolboxes- ը MATLAB- ի համար

Ներբեռնեք Roomba Toolboxes- ը MATLAB- ի համար
Ներբեռնեք Roomba Toolboxes- ը MATLAB- ի համար
Ներբեռնեք Roomba Toolboxes- ը MATLAB- ի համար
Ներբեռնեք Roomba Toolboxes- ը MATLAB- ի համար

Գործարկեք հետևյալ ծածկագիրը ՝ այս նախագիծը ավարտելու համար անհրաժեշտ գործիքների տուփերը տեղադրելու համար:

գործառույթը roombaInstall

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 (ֆայլեր, '')

''

'դեպի այս թղթապանակ:'

''

CD

''

- Ուզու՞մ եք շարունակել: '

};

ազդանշան;

yn = questdlg (հուշում,…

dlg Վերնագիր,…

«Այո», «Ոչ», «Այո»);

եթե ~ strcmp (yn, 'Yes'), վերադառնալ; վերջ

% ստանալ առկա ֆայլերի ցանկը

գոյություն ունեցող_ֆայլեր = ֆայլեր (բջջային զվարճանք (@exist, ֆայլեր)> 0);

if ~ isempty (գոյություն ունեցող_ ֆայլեր)

% համոզվեք, որ դրանք փոխարինելը իսկապես լավ է

հուշում = {'Դուք փոխարինում եք այս ֆայլերը (ֆայլերը):'

''

strjoin (գոյություն ունեցող_ֆայլեր, '')

''

«Լա՞վ է փոխարինել»:

};

ազդանշան;

yn = questdlg (հուշում,…

dlg Վերնագիր,…

«Այո», «Ոչ», «Այո»);

եթե ~ strcmp (yn, 'Yes'), վերադառնալ; վերջ

վերջ

% բեռնել ֆայլերը

cnt = 0;

համար i = 1: երկարություն (ֆայլեր)

f = ֆայլեր {i};

disp (['' Ներբեռնում 'f]);

փորձիր

url = [սերվեր f];

websave (f, url, ընտրանքներ); % ավելացված տարբերակներ `անվտանգության սխալներից խուսափելու համար

cnt = cnt + 1;

բռնել

disp (['Սխալ բեռնելիս' f]);

կեղծ = [f '.html'];

եթե գոյություն ունի (կեղծ, 'ֆայլ') == 2

ջնջել (կեղծ)

վերջ

վերջ

վերջ

եթե cnt == երկարությունը (ֆայլեր)

msg = 'Տեղադրումը հաջողվեց';

սպասել (msgbox (msg, dlgTitle));

ուրիշ

msg = 'Տեղադրման սխալ. մանրամասների համար տե՛ս հրամանի պատուհանը';

սպասել (errordlg (msg, dlgTitle));

վերջ

վերջ %roombaInstall

Քայլ 3. Միացեք ձեր Roomba- ին

Այժմ ժամանակն է միանալ ձեր Roomba- ին ՝ օգտագործելով WiFi: 2 մատով միաժամանակ սեղմեք Dock և Spot կոճակները ՝ Roomba- ն միացնելու կամ վերակայելու համար: Հաջորդը, գործարկեք r = roomba (# ձեր Roomba) կոդը MATLAB- ի հրամանի պատուհանում `ձեր ռոբոտին միանալու համար: Այս հրամանը կատարելուց հետո, ձեր Roomba- ն պետք է պատրաստ լինի գնալ:

Քայլ 4. Ընտրեք, թե ինչպես եք ցանկանում վերահսկել ձեր Roomba- ն

Ընտրեք, թե ինչպես եք ցանկանում վերահսկել ձեր Roomba- ն
Ընտրեք, թե ինչպես եք ցանկանում վերահսկել ձեր Roomba- ն
Ընտրեք, թե ինչպես եք ցանկանում վերահսկել ձեր Roomba- ն
Ընտրեք, թե ինչպես եք ցանկանում վերահսկել ձեր Roomba- ն

Ձեր Roomba- ն կառավարելու երկու եղանակ կա `ինքնավար կամ սմարթֆոնի օգտագործմամբ որպես վերահսկիչ:

Եթե դուք ընտրում եք Roomba- ն ինքնավար վարել, ապա ձեզ հարկավոր է օգտագործել երեք ներկառուցված սենսորներ `ժայռերի տվիչներ, հարվածների և լույսի տվիչներ:

Սմարթֆոն օգտագործելու համար նախ պետք է սմարթֆոնը միացնել համակարգչին ՝ հետևելով ստորև ներկայացված քայլերին:

Ո NOTՇԱԴՐՈԹՅՈՆ. Ձեր համակարգիչը և սմարթֆոնը պետք է լինեն միևնույն WiFi ցանցում `ճիշտ միանալու համար:

1. Ներբեռնեք MATLAB ծրագիրը ձեր սարքի հավելվածների խանութից:

2. Մուտքագրեք «միակցիչը միացված» ձեր հրամանի պատուհանում և սահմանեք գաղտնաբառ, որը պետք է մուտքագրվի երկու սարքերում:

3. Դա անելուց հետո MATLAB- ը ձեզ կտա ձեր համակարգիչների IP հասցեն: Դուք պետք է մտնեք սմարթֆոնի MATLAB հավելվածի կարգավորումների էջ և համակարգիչ ավելացնեք ՝ օգտագործելով տվյալ IP հասցեն և ավելի վաղ մուտքագրված գաղտնաբառը:

4. Ձեր համակարգչի հրամանի պատուհանում մուտքագրեք m = mobiledev ծածկագիրը և սա պետք է նախաստորագրի ձեր սմարթֆոնը որպես Roomba- ի վերահսկիչ:

5. Ձեր համակարգիչն ու սմարթֆոնը հիմա պետք է պատրաստ լինեն գործի:

Քայլ 5. Քշեք ձեր Roomba- ն

Այժմ, երբ դուք ունեք ձեր Mars Rover- ը ստեղծելու համար անհրաժեշտ բոլոր գործիքները, պատրաստ եք ստեղծել ձեր սեփական ծածկագիրը: Ստորև մենք կցել ենք օրինակելի կոդ ինչպես ինքնավար վարման, այնպես էլ սմարթֆոնով կառավարվող վարման համար:

Ինքնավար վարում

գործառույթը Explore_modified (r)

%մուտքագրման փաստարկներ. 1 roomba օբյեկտ, r

%ելքային արգումենտներ ՝ ոչ

%նկարագրություն:

%գործառույթը օգտագործում է անվերջ, իսկ հանգույց ՝ ինքնավարություն թույլ տալու համար

բոտի շրջակայքի %ուսումնասիրություն:

%

%funciton- ը նաև ցուցումներ է տալիս սենյակին, թե ինչ անել այնտեղ

%հետևյալ իրավիճակները. Անիվը (երը) կորցնում են կապը հողի հետ, %օբյեկտը հայտնաբերվում է բոտի դիմաց կամ դրա երկու կողմերում, և ա

%հանկարծակի անկում է հայտնաբերվում բոտի դիմաց կամ դրա երկու կողմերից առաջ:

%

Տիպիկ հրահանգները ներառում են շարժման հրամաններ `առավելագույնի հասցնելու համար

%որոնում կամ խուսափում հայտնաբերված վտանգից և հաղորդակցվելու հրամաններ

%տեղեկատվություն բոտերի հայտնագործությունների (նկարների), դիրքի (գրաֆիկի) վերաբերյալ, %և վիճակ (խցանված նախազգուշացում) օգտագործողի հետ matlab- ի և (կամ) էլփոստի միջոցով: Մի քանի

Վայելելու համար ավելացվում են %ձայնային հրամաններ:

%setup էլփոստի հնարավորություններ

փոստ = '[email protected]';

գաղտնաբառ = 'EF230Roomba';

setpref («Ինտերնետ», «SMTP_Server», «smtp.gmail.com»);

setpref («Ինտերնետ», «E_mail», փոստ);

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 = սենյակ (19)

r.epep ('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; %սահմանված լույսի բամպերի տվիչների տեղեկատու արժեքը

pos = [0, 0]; %փոփոխական դիրքի պահպանման համար `սկզբնավորված տվյալներով

անկյուն = 0; %սահմանել հղման անկյունը

netangle = 0; %զուտ անկյունի տեղաշարժ

i = 2; %iterator ՝ տողերի պահպանման փոփոխականին տողեր ավելացնելու համար

dist = 0;

r.setDriveVelocity (v, v); %start roomba շարժվում է առաջ

մինչդեռ ճշմարիտ է

Cliff = r.getCliffSensors;

Bump = r.getBumpers;

Light = r.getLightBumpers;

RandAngle = ռանդի ([20, 60], 1); %-ը ստեղծում է 1 պատահական անկյուն 20 -ից 60 աստիճանի միջև: Օգտագործվում է բոտը մի օղակում խրվելուց խուսափելու համար

%Ինչ անել, եթե մեկ կամ մի քանի անիվ կորցնի կապը հողի հետ.

%դադարեցնել շարժումը, նախազգուշական նամակ ուղարկել շրջապատի պատկերով, %և օգտագործողին հարցրեք ՝ շարունակե՞լ, թե՞ սպասել օգնության

եթե Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1

ռ. դադարեցնել

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get 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;

imwrite (img, 'stuck.png');

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

imfile = 'stuck.png';

դիրք = savepos (pos);

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

sendmail (փոստ, 'HELP!', 'I clranded on a cliff!', {imfile, position})

ցուցակ = {'Շարունակել', 'Կանգնել'};

idx = մենյու («Ի՞նչ պետք է անեմ», ցուցակ);

եթե idx == 2

ընդմիջում

վերջ

%Ինչ անել, եթե օբյեկտը հայտնաբերվի բոտի դիմաց.

%կանգ առնել, հետ գնալ, լուսանկարել, զգուշացնել հայտնագործման մասին օգտագործողին

%էլփոստի միջոցով, շրջեք 90 աստիճան և շարունակեք ուսումնասիրել

elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1

r. դադարեցնել;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ

i = i+1;

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ

i = i+1;

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

img = r.getImage;

imwrite (img, 'FrontBump.png')

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

imfile = 'FrontBump.png';

դիրք = savepos (pos);

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

sendmail (փոստ, «Alert!», «Ես գտա ինչ -որ բան», {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. դադարեցնել;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ

i = i+1;

անկյուն = 30;

netangle = netangle+անկյուն;

r.turnAngle (անկյուն);

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ

i = i+1;

r.epep ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')

img = r.getImage;

imwrite (img, 'LeftBump.png')

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

imfile = 'LeftBump.png';

դիրք = savepos (pos);

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

sendmail (փոստ, «Alert!», «Ես գտա ինչ -որ բան», {imfile, position})

անկյուն = -90;

netangle = netangle+անկյուն;

r.turnAngle (անկյուն);

r.setDriveVelocity (v, v);

%Ինչ անել, եթե օբյեկտը հայտնաբերվի բոտի աջ կողմում.

%կանգառ, շրջվել դեպի օբյեկտ, պահուստավորել, լուսանկարել, զգոն լինել

Էլփոստի միջոցով հայտնագործման %օգտվող, շրջեք 90 աստիճան և շարունակեք ուսումնասիրել

elseif Light.rightFront> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1

r. դադարեցնել;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ

i = i+1;

անկյուն = -30;

netangle = netangle+անկյուն;

r.turnAngle (անկյուն);

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ

i = i+1;

դադար (1.5);

r.epep ('C1^, C1^, C2^, D2^, D2^, C8^')

img = r.getImage;

imwrite (img, 'RightBump.png')

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

imfile = 'RightBump.png';

դիրք = savepos (pos);

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

sendmail (փոստ, «Alert!», «Ես գտա ինչ -որ բան», {imfile, position});

անկյուն = 90;

netangle = netangle+անկյուն;

r.turnAngle (անկյուն);

r.setDriveVelocity (v, v);

%Ինչ անել, եթե ժայռը հայտնաբերվի բոտի ձախ կողմում.

%կանգառ, հետ շարժվել, թեքվել աջ, շարունակել ուսումնասիրել

elseif Cliff.left <reflect_datum || Cliff.leftFront <արտացոլում_տվյալ

r. դադարեցնել;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ

i = i+1;

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ

pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ

i = i+1;

անկյուն = -RandAngle;

netangle = netangle+անկյուն;

r.turnAngle (անկյուն);

r.setDriveVelocity (v, v);

%Ինչ անել, եթե ժայռը հայտնաբերվի բոտի աջ կողմում.

%կանգառ, հետ գնալ, թեքվել ձախ, շարունակել ուսումնասիրել

elseif Cliff.right <reflect_datum || Cliff.rightFront <արտացոլում_դատում

r. դադարեցնել;

dist = r.getDistance;

pos (i, 1) = dist * sind (անկյուն); %ստանալ x կոորդինատ

pos (i, 2) = dist * cosd (անկյուն); %get y կոորդինատ

i = i+1;

r.moveDistance (-. 125);

անկյուն = RandAngle;

netangle = netangle+անկյուն;

r.turnAngle (անկյուն);

r.setDriveVelocity (v, v);

վերջ

վերջ

Սմարթֆոնի վերահսկիչ

Ընտրանքներ = {'Ինքնավար', 'Ձեռքով կառավարում'}

Արագ = ընտրացանկ («Ինչպե՞ս կցանկանայիք կառավարել ռովերը», ընտրանքներ)

m = mobiledev

r = սենյակ (19)

եթե Արագ == 1

Ուսումնասիրել (r)

ուրիշ

մինչդեռ ճշմարիտ է

դադար (.5)

PhoneData = մ. Կողմնորոշում;

Azi = PhoneData (1);

Սկիպիդար = PhoneData (2);

Կողք = PhoneData (3);

եթե Կողմ> 130 || Կողմ <-130 %, եթե հեռախոսը երես թեքված է, կանգնեցրեք սենյակը և դուրս եկեք հանգույցից

ռ. դադարեցնել

r. beep ('C, C, C, C')

ընդմիջում

elseif Side> 25 && Side <40 %, եթե հեռախոսը կողաշրջված է 25 -ից 40 աստիճանի միջև, ձախ թեքեք 5 աստիճան

r.turnAngle (-5);

elseif Կողմ> 40 %, եթե հեռախոսը կողքից շրջված է 40 աստիճանով, ձախ թեքվում է 45 աստիճանով

r.turnAngle (-45)

elseif Side -40 %, եթե հեռախոսը կողաշրջված է -25 և -40 աստիճանների միջև, աջ շրջադարձ 5 աստիճանով

r.turnAngle (5);

elseif Կողմ <-40 %, եթե հեռախոսը կողաշրջված է -40 աստիճանից պակաս, ձախ թեքիր 45 աստիճանով

r.turnAngle (45)

վերջ

Եթե հեռախոսը պահվում է ուղղաձիգի մոտ, վերցրեք պատկեր և գծեք այն

եթե սկիպիդար <-60 && պատկեր <= 9

ռ. բիփ

img = r.getImage;

ենթածրագր (3, 3, պատկեր)

ցուցադրել (img)

վերջ

%առաջ և հետ շարժվել ՝ հիմնվելով առջևի և հետևի կողմնորոշման վրա

եթե Pitch> 15 && Pitch <35 %, եթե բարձրությունը 15 -ից 35 աստիճանի միջև առաջ է շարժվում կարճ տարածությամբ

%-ը շարժվելուց առաջ ստացեք թեթև բամպերի տվյալներ

litBump = r.getLightBumpers;

եթե litBump.left Առաջինը> 500 || litBump.left Կենտրոն> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %, եթե ինչ -որ բան գտնվում է սենյակի դիմաց և կհարվածի, եթե այն առաջ շարժվի, աղմուկ բարձրացրեք և հաղորդագրություն ցուցադրեք

r.epep ('C ^^, F#^, C ^^, F#^')

այլ %տեղափոխել

r.moveDistance (.03);

%Տեղափոխելուց հետո ստացեք բամպերի տվյալներ

Bump = r.getBumpers;

եթե Bump.right == 1 || Bump.left == 1 || Bump.front == 1

r.beep ('A, C, E')

r.moveDistance (-. 01)

վերջ

%-ը ստանում է ժայռերի տվիչների տվյալները

Cliff = r.getCliffSensors;

եթե Cliff.left> 1500 || Cliff.left Առջև> 1500 || Cliff.rightF Front> 1500 || Cliff.right> 1500 %, եթե ինչ -որ բան առաջացնում է ժայռի սենսորը, այն վերաբերվեք որպես լավայի և պահուստավորեք

r.epep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')

r.moveDistance (-. 031)

վերջ

վերջ

elseif Pitch> 35 %, եթե բարձրության բարձրությունը 35 աստիճան առաջ է շարժվում ավելի մեծ հեռավորության վրա

%-ը շարժվելուց առաջ ստացեք թեթև բամպերի տվյալներ

litBump = r.getLightBumpers;

եթե litBump.left Առջև> 15 || litBump.left Կենտրոն> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %, եթե ինչ -որ բան գտնվում է սենյակի դիմաց և կհարվածի, եթե այն առաջ շարժվի, աղմուկ բարձրացրեք և հաղորդագրություն ցուցադրեք

r.epep ('C ^^, F#^, C ^^, F#^')

այլ %տեղափոխել

r.moveDistance (.3)

%Տեղափոխելուց հետո ստացեք բամպերի տվյալներ

Bump = r.getBumpers;

եթե Bump.right == 1 || Bump.left == 1 || Bump.front == 1 %, եթե ինչ -որ բանի հարվածում եք, աղմուկ բարձրացրեք, ցուցադրեք հաղորդագրությունը և կրկնօրինակեք

r.beep ('A, C, E')

r.moveDistance (-. 01)

վերջ

%-ը ստանում է ժայռերի տվիչների տվյալները տեղափոխվելուց հետո

Cliff = r.getCliffSensors;

եթե Cliff.left> 1500 || Cliff.left Առջև> 1500 || Cliff.rightF Front> 1500 || Cliff.right> 1500 %, եթե ինչ -որ բան առաջացնում է ժայռի սենսորը, վերաբերվեք դրան որպես լավա և պահուստավորեք

r.epep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')

r.moveDistance (-. 31)

վերջ

վերջ

elseif Pitch -35 %, եթե բարձրությունը -15 -ից -35 աստիճանի միջև ընկնում է կարճ հեռավորության վրա

r.moveDistance (-. 03);

%-ը ստանում է ժայռերի տվիչների տվյալները տեղափոխվելուց հետո

Cliff = r.getCliffSensors;

եթե Cliff.left> 1500 || Cliff.left Առջև> 1500 || Cliff.rightF Front> 1500 || Cliff.right> 1500 %, եթե ինչ -որ բան առաջացնում է ժայռի սենսորը, վերաբերվեք դրան որպես լավա և պահուստավորեք

r.epep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')

r.moveDistance (.04)

վերջ

elseif Pitch -60 %, եթե բարձրությունը -35 -ից -60 աստիճանի միջև հետ է շարժվում ավելի մեծ հեռավորության վրա

r.moveDistance (-. 3)

%-ը ստանում է ժայռերի տվիչների տվյալները տեղափոխվելուց հետո

Cliff = r.getCliffSensors;

եթե Cliff.left> 1500 || Cliff.left Առջև> 1500 || Cliff.rightF Front> 1500 || Cliff.right> 1500 %, եթե ինչ -որ բան առաջացնում է ժայռի սենսորը, այն վերաբերվեք որպես լավայի և պահուստավորեք

r.epep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')

r.moveDistance (.31)

վերջ

վերջ

վերջ

վերջ

Խորհուրդ ենք տալիս: