Turinys:

„Mars Roomba“: 6 žingsniai
„Mars Roomba“: 6 žingsniai

Video: „Mars Roomba“: 6 žingsniai

Video: „Mars Roomba“: 6 žingsniai
Video: PIXEL GUN 3D TUTORIAL 2024, Lapkritis
Anonim
Marsas Roomba
Marsas Roomba

Ši instrukcija padės jums valdyti „Raspberry Pi“valdomą „Roomba“vakuuminį robotą. Operacinė sistema, kurią naudosime, yra per MATLAB.

1 žingsnis: reikmenys

Ką reikės surinkti norint įgyvendinti šį projektą:

  • „iRobot“sukurtas dulkių siurblio „Create2 Roomba“robotas
  • Raspberry Pi
  • „Raspberry Pi“fotoaparatas
  • Naujausia MATLAB versija
  • „Roomba“diegimo įrankių rinkinys, skirtas MATLAB
  • MATLAB programa mobiliesiems įrenginiams

2 žingsnis: problemos pareiškimas

Problemos pareiškimas
Problemos pareiškimas

Mums buvo pavesta naudoti MATLAB, kad sukurtume roverį, kuris galėtų būti naudojamas Marse, kad padėtų mokslininkams rinkti planetos duomenis. Funkcijos, kurias aptarėme savo projekte, buvo nuotolinis valdymas, objekto poveikio atpažinimas, vandens atpažinimas, gyvybės atpažinimas ir vaizdo apdorojimas. Norėdami pasiekti šiuos žygdarbius, mes kodavome naudodami „Roomba“įrankių rinkinio komandas, kad galėtume manipuliuoti daugeliu „iRobot“sukurtos „Create2 Roomba“funkcijų.

3 žingsnis: „Bluetooth“nuotolinis valdymas

„Bluetooth“nuotolinio valdymo pultas
„Bluetooth“nuotolinio valdymo pultas

Šioje skaidrėje bus pateiktas kodas, skirtas valdyti „Roomba“judėjimą, naudojant išmaniojo telefono įrenginio „Bluetooth“galimybes. Norėdami pradėti, atsisiųskite „MATLAB“programą į savo išmanųjį telefoną ir prisijunkite prie „Mathworks“paskyros. Prisijungę eikite į „daugiau“, „nustatymai“ir prisijunkite prie kompiuterio naudodami jo IP adresą. Prisijungę grįžkite į „daugiau“ir pasirinkite „jutikliai“. Bakstelėkite trečiąjį jutiklį viršutinėje ekrano įrankių juostoje ir bakstelėkite pradėti. Dabar jūsų išmanusis telefonas yra nuotolinio valdymo pultas!

Kodas yra toks:

o 0 == 0

pauzė (.5)

Telefono duomenys = M. Orientation;

Azi = Telefono duomenys (1);

Pitch = PhoneData (2);

Šonas = Telefono duomenys (3);

nelygumai = r.getBamperiai;

jei šonas> 80 || Šonas <-80

r.stop

r. pyptelėjimas („C, E, G, C^, G, E, C“)

pertrauka

elseif Pusė> 20 && Šonas <40

r.pasukimo kampas (-5);

Kita pusė> 40

r.pasukimo kampas (-25);

elseif Side-40

r.pasukimo kampas (5);

elseif Pusė <-40

r.pasukimo kampas (25);

galas

jei Pitch> 10 && Pitch <35

r.moveDistance (.03)

elseif Pitch> -35 && Pitch <-10

r.moveDistance (-. 03)

galas

galas

4 žingsnis: Poveikio atpažinimas

Poveikio atpažinimas
Poveikio atpažinimas

Kita funkcija, kurią įgyvendinome, buvo aptikti „Roomba“poveikį objektui ir tada ištaisyti dabartinį jo kelią. Norėdami tai padaryti, turėjome naudoti sąlygines sąlygas su buferio jutiklių rodmenimis, kad nustatytume, ar atsitrenkė į objektą. Jei robotas atsitrenks į objektą, jis atsitrauks.2 metrus atgal ir pasuks kampu, kuriuo nustatomas buferis. Paspaudus elementą, pasirodo meniu, kuriame rodomas žodis „oof“.

Kodas parodytas žemiau:

o 0 == 0

nelygumai = r.getBamperiai;

r.setDriveVelocity (.1)

jei nelygumai.kairė == 1

„msgbox“(„Oi!“);

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (-35)

r.setDriveVelocity (.2)

elseif bumps.front == 1

„msgbox“(„Oi!“);

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (90)

r.setDriveVelocity (.2)

elseif nelygumai.teisė == 1

„msgbox“(„Oho!“);

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (35)

r.setDriveVelocity (.2)

elseif bumps.leftWheelDrop == 1

„msgbox“(„Oho!“);

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (-35)

r.setDriveVelocity (.2)

elseif nelygumai.rightWheelDrop == 1

„msgbox“(„Oi!“);

r.moveDistance (-0,2)

r.setTurnVelocity (.2)

r.turnAngle (35)

r.setDriveVelocity (.2)

galas

galas

5 žingsnis: gyvenimo atpažinimas

Gyvenimo atpažinimas
Gyvenimo atpažinimas

Mes užkodavome gyvybės atpažinimo sistemą, kad nuskaitytume priešais esančių objektų spalvas. Trys gyvenimo rūšys, kurias mes užkodavome, yra augalai, vanduo ir ateiviai. Norėdami tai padaryti, mes kodavome jutiklius, kad apskaičiuotume vidutines raudonos, mėlynos, žalios arba baltos vertės. Šios vertės buvo lyginamos su slenksčiais, kurie buvo nustatyti rankiniu būdu, kad būtų nustatyta spalva, į kurią žiūri fotoaparatas. Kodas taip pat nubrėžtų kelią į objektą ir sukurtų žemėlapį.

Kodas yra toks:

t = 10;

i = 0;

o t == 10

img = r.getImage; parodyti (img)

pauzė (0,167)

i = i + 1;

red_mean = vidurkis (vidurkis (img (:,:, 1)));

blue_mean = vidurkis (vidurkis (img (:,:, 3)));

žalia_reikšmė = vidurkis (vidurkis (img (:,:, 2)));

white_mean = (blue_mean + green_mean + red_mean) / 3; %nori šios vertės maždaug 100

devyni_plius_tenas = 21;

žalia_slenkstis = 125;

mėlyna_slenkstis = 130;

balta_slenkstis = 124;

raudona_slenkstis = 115;

o nine_plus_ten == 21 %žalia - gyvenimas

if green_mean> green_threshold && blue_mean <blue_threshold && red_mean <red_threshold

r.moveDistance (-. 1)

a = msgbox ('rastas galimas gyvybės šaltinis, nubrėžta vieta');

pauzė (2)

ištrinti (a)

[y2, Fs2] = garso skaitymas ('z_speak2.wav');

garsas (y2, Fs2)

pauzė (2)

%augalas = r.getImage; %imshow (augalas);

%taupyti ('plant_img.mat', plant ');

%sklypo vieta žalia spalva

i = 5;

pertrauka

Kitas

devyni_pliusai_ten = 19;

galas

galas

devyni_pliusai_tenas = 21;

o nine_plus_ten == 21 %mėlyna - woder

if blue_mean> blue_threshold && green_mean <green_threshold && white_mean <white_threshold && red_mean <red_threshold

r.moveDistance (-. 1)

a = msgbox ('rastas vandens šaltinis, nubrėžta vieta');

pauzė (2)

ištrinti (a)

[y3, Fs3] = garso skaitymas ('z_speak3.wav');

garsas (y3, Fs3);

%woder = r.getImage; %parodymas (woder)

%taupymas ('water_img.mat', woder)

%sklypo vieta mėlyna spalva

i = 5;

pertrauka

Kitas

devyni_pliusai_ten = 19;

galas

galas

devyni_plius_tenas = 21;

tuo tarpu nine_plus_ten == 21 %balta - ateiviai monkaS

if white_mean> white_threshold && blue_mean <blue_threshold && green_mean <green_threshold

[y5, Fs5] = garso skaitymas ('z_speak5.wav');

garsas (y5, Fs5);

pauzė (3)

r.setDriveVelocity (0,.5)

[ys, Fss] = garso skaitymas ('z_scream.mp3');

garsas (ys, Fss);

pauzė (3)

r.stop

ateivių % = r.getImage; %imshow (ateivis);

% taupyti ('alien_img.mat', ateivis);

i = 5;

pertrauka

Kitas

devyni_pliusai_ten = 19;

galas

galas

jei i == 5

a = 1; %posūkio kampas

t = 9; %nutraukti didelę kilpą

i = 0;

galas

galas

6 žingsnis: paleiskite

Kai visas kodas bus parašytas, sujunkite jį į vieną failą ir voila! Dabar jūsų „Roomba“robotas veiks visiškai ir veiks taip, kaip skelbiama! Tačiau „Bluetooth“valdiklis turėtų būti atskirame faile arba atskirtas nuo likusio kodo naudojant %%.

Mėgaukitės savo roboto naudojimu !!

Rekomenduojamas: