Sadržaj:

ROS robotski upravljač sa sustavom Matlab: 9 koraka
ROS robotski upravljač sa sustavom Matlab: 9 koraka

Video: ROS robotski upravljač sa sustavom Matlab: 9 koraka

Video: ROS robotski upravljač sa sustavom Matlab: 9 koraka
Video: Робот Cop Rose пылесос умный мойщик окон с Bluetooth управлением 2024, Srpanj
Anonim
Image
Image
ROS robotski upravljač sa sjedištem u Matlabu
ROS robotski upravljač sa sjedištem u Matlabu

Još kao dijete uvijek sam sanjao o tome da postanem Iron Man i još uvijek to činim. Iron Man jedan je od onih likova koji su realno mogući i jednostavno kažem da težim postati Iron Man jednog dana čak i ako mi se ljudi smiju ili kažu da je to nemoguće jer je "nemoguće samo dok to netko ne učini" -Arnold Schwarzenegger.

ROS je novi okvir koji se koristi za razvoj složenih robotskih sustava. Njegove primjene uključuju: automatizirani sustav sastavljanja, daljinsko upravljanje, protetsko oružje i teške strojeve u industrijskom sektoru.

Istraživači i inženjeri koriste ROS za razvoj prototipova, dok ga različiti dobavljači koriste za stvaranje svojih proizvoda. Ima složenu arhitekturu koja otežava upravljanje hromim čovjekom. Korištenje MATLAB -a za stvaranje veze sučelja s ROS -om novi je pristup koji može pomoći istraživačima, inženjerima i dobavljačima u razvoju robusnijih rješenja.

Dakle, ovo uputstvo govori o tome kako napraviti robotski kontroler zasnovan na Matlabu, ovo će biti jedan od rijetkih vodiča o tome i među rijetkim instrukcijama za ROS. Cilj ovog projekta je dizajnirati kontroler koji može kontrolirati bilo koji ROS-robot spojen na vašu mrežu. Pa krenimo!

zasluge za montažu videa: Ammar Akher, na [email protected]

Pribor

Za projekt su potrebne sljedeće komponente:

(1) ROS računalo/robot

(2) Ruter

(3) PC s MATLAB -om (verzija: 2014. ili novija)

Korak 1: Postavljanje svega

Postavljanje svega
Postavljanje svega

Za ovu instrukciju koristim Ubuntu 16.04 za svoje Linux računalo i ros-kinetic, pa da ne bude zabune preporučujem upotrebu ros kinetic i ubuntu 16.04 jer ima najbolju podršku za ros-kinetic. Za više informacija o tome kako instalirati ros kinetic posjetite https://wiki.ros.org/kinetic/Installation/Ubuntu. Za MATLAB ili kupujete licencu ili preuzimate verziju staze odavde.

Korak 2: Razumijevanje rada kontrolera

Razumijevanje rada kontrolera
Razumijevanje rada kontrolera

Računalo pokreće robotski kontroler na MATLAB -u. Kontroler prima IP adresu i priključak ros pc/robota.

Ros-tema se koristi za komunikaciju između kontrolera i ros računala/robota, što također uzima regulator kao ulaz. Modem je potreban za stvaranje LAN -a (lokalne mreže) i ono je što dodjeljuje IP adrese svim uređajima povezanim na njegovu mrežu. Stoga ros pc/robot i računalo koje pokreće kontroler moraju biti povezani na istu mrežu (tj. Mrežu modema). Pa sad kad znate "kako to funkcionira", prijeđimo na "kako je izgrađen" …

Korak 3: Stvaranje ROS-MATLAB sučelja

Stvaranje ROS-MATLAB sučelja
Stvaranje ROS-MATLAB sučelja
Stvaranje ROS-MATLAB sučelja
Stvaranje ROS-MATLAB sučelja
Stvaranje ROS-MATLAB sučelja
Stvaranje ROS-MATLAB sučelja

ROS-MATLABInterface korisno je sučelje za istraživače i studente za izradu prototipa svojih algoritama robota u MATLAB-u i testiranje na robotima kompatibilnim s ROS-om. Ovo sučelje može se izraditi pomoću alata za robotski sustav u matlabu, a mi možemo prototipirati naš algoritam i testirati ga na robot s omogućenim ROS-om ili u simulatorima robota kao što su Gazebo i V-REP.

Da biste instalirali alatni okvir robotskog sustava na svoj MATLAB, jednostavno idite na opciju Dodatak na alatnoj traci i potražite robotski alatni okvir u istraživaču dodataka. Pomoću robotskog okvira s alatima možemo objaviti ili se pretplatiti na temu, poput ROS čvora, a od nje možemo učiniti i ROS majstorom. Sučelje MATLAB-ROS ima većinu ROS funkcionalnosti koje biste mogli zahtijevati za svoje projekte.

Korak 4: Dobivanje IP adrese

Dobivanje IP adrese
Dobivanje IP adrese
Dobivanje IP adrese
Dobivanje IP adrese

Da bi kontroler radio, potrebno je znati IP adresu vašeg ROS robota/računala i računala koje upravlja kontrolerom na MATLAB -u.

Da biste dobili IP računala:

U sustavu Windows:

Otvorite naredbeni redak i upišite naredbu ipconfig te zabilježite IPv4 adresu

Za Linux:

Upišite naredbu ifconfig i zabilježite inet adresu. Sada kada imate IP adresu, vrijeme je za izradu grafičkog sučelja …

Korak 5: Izradite GUI za kontroler

Izradite GUI za Controller
Izradite GUI za Controller
Izradite GUI za Controller
Izradite GUI za Controller
Izradite GUI za Controller
Izradite GUI za Controller

Da biste stvorili GUI, otvorite MATLAB i upišite vodič u naredbeni prozor. Ovo će otvoriti aplikaciju vodič koju ćemo stvoriti naš GUI. Također možete koristiti dizajner aplikacija na MATLAB -u za oblikovanje svog GUI -ja.

Stvorit ćemo ukupno 9 gumba (kao što je prikazano na slici):

6 tipki: prema naprijed, prema natrag, ulijevo, udesno, povežite se s robotom, odspojite

3 tipke za uređivanje: ip računara, port i naziv teme.

Gumbi koji se mogu uređivati su gumbi koji će uzeti ip ROS računala, njegov port i naziv teme kao ulaz. Naziv teme je ono što MATLAB kontroler i ROS robot/računalo komuniciraju. Da biste uredili niz na gumbu za uređivanje, desnom tipkom miša kliknite gumb >> idite na Svojstva inspektora >> Niz i uredite tekst gumba.

Nakon što je vaš GUI dovršen, možete programirati gumbe. Tu počinje prava zabava …

Korak 6: Programiranje gumba za uređivanje grafičkog sučelja

Programiranje gumba za uređivanje grafičkog sučelja
Programiranje gumba za uređivanje grafičkog sučelja
Programiranje gumba za uređivanje grafičkog sučelja
Programiranje gumba za uređivanje grafičkog sučelja
Programiranje gumba za uređivanje grafičkog sučelja
Programiranje gumba za uređivanje grafičkog sučelja
Programiranje gumba za uređivanje grafičkog sučelja
Programiranje gumba za uređivanje grafičkog sučelja

GUI je spremljen kao.fig datoteka, ali funkcije koda/povratnog poziva spremljene su u.m formatu. Datoteka.m sadrži kôd za sve vaše gumbe. Da biste svojim gumbima dodali funkcije povratnog poziva, desnom tipkom miša kliknite gumb> > Pregled povratnih poziva >> povratni poziv. Ovo će otvoriti.m datoteku za vaš GUI gdje je definiran taj gumb.

Prvi povratni poziv koji ćemo kodirati je gumb ROS IP koji se može uređivati. Pod funkcijom edit1_Callback napišite sljedeći kod:

funkcija edit1_Callback (hObject, podaci o događaju, ručke)

globalni ros_master_ip

ros_master_ip = get (hObject, 'String')

Ovdje je funkcija definirana kao edit1_Callback, što se odnosi na prvi gumb za uređivanje. Kad unesemo IP adresu iz ROS mreže u ovaj gumb za uređivanje, ona će pohraniti IP adresu kao niz u globalnoj varijabli pod nazivom ros_master_ip.

Zatim ispod _OpeningFcn (hObject, eventdata, handles, varargin) definirajte sljedeće (vidi sliku):

globalni ros_master_ip

globalni ros_master_port

globalno ime_teme_teme

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Upravo ste globalno tvrdo kodirali ros-pc ip (ros_master_ip), port (ros_master_port) i naziv teme Teleop. To znači da ako ostavite gumbe za uređivanje praznima, ove će se unaprijed definirane vrijednosti koristiti pri povezivanju.

Sljedeći povratni poziv koji ćemo kodirati je gumb za uređivanje porta.

Pod funkcijom edit2_Callback napišite sljedeći kod:

funkcija edit2_poziv (hObject, podaci o događaju, ručke)

globalni ros_master_port

ros_master_port = get (hObject, 'String')

Ovdje je funkcija definirana kao edit2_Callback, što se odnosi na drugi gumb za uređivanje. Kada unesemo ovdje port ros pc/robota s ROS mreže u ovaj gumb za uređivanje, port će pohraniti port kao niz u globalnoj varijabli pod nazivom ros_master_port.

Slično, sljedeći povratni poziv koji ćemo kodirati je tipka za uređivanje naziva teme.

Pod funkcijom edit3_Callback napišite sljedeći kod:

funkcija edit3_Callback (hObject, podaci o događajima, ručke)

globalno teleop_topic_name

teleop_topic_name = get (hObject, 'String')

Slično kao i ros_master_port, i ovo je pohranjeno kao niz u globalnoj varijabli.

Zatim ćemo pogledati funkcije povratnog poziva za gumbe …

Korak 7: Programiranje GUI tipki

Programiranje GUI tipki
Programiranje GUI tipki
Programiranje GUI tipki
Programiranje GUI tipki

Gumbi koje smo prethodno stvorili koristit ćemo za pomicanje, povezivanje i odvajanje robota od kontrolera. Povratni pozivi pritiskom na gumb definirani su na sljedeći način:

npr. funkcijski gumb 6_Poziv (hObject, podaci o događajima, ručke)

Napomena: ovisno o redoslijedu kojim ste stvorili svoje gumbe, oni će biti numerirani u skladu s tim. Stoga funkcija pushbutton6 u mojoj.m datoteci može biti za Naprijed, dok bi u vašoj.m datoteci mogla biti za Nazad, pa imajte to na umu. Da biste saznali koja je točno funkcija vašeg gumba, jednostavno kliknite desnom tipkom miša >> Prikaži povratne pozive >> Povratni pozivi i otvorit će se funkcija za vaš gumb, ali pretpostavljam da je za ovo uputstvo isto što i ja.

Za gumb Poveži se s robotom:

Pod funkcijskim gumbom6_Poziv (hObject, podaci o događajima, ručke):

function pushbutton6_Callback (hObject, eventdata, handles) globalni ros_master_ip

globalni ros_master_port

globalno teleop_topic_name

globalni robot

globalni velmsg

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

setenv ('ROS_MASTER_URI', ros_master_uri)

rosinit

robot = rospublisher (teleop_topic_name, 'geometry_msgs/Twist');

velmsg = rosmessage (robot);

Ovaj povratni poziv postavit će varijablu ROS_MASTER_URI spajanjem ros_master_ip i porta. Zatim će naredba rosinit pokrenuti vezu. Nakon povezivanja, stvorit će izdavača geometry_msgs/Twist, koji će se koristiti za slanje naredbe brzine. Naziv teme je naziv koji dajemo u okviru za uređivanje. Nakon što je veza uspješna, moći ćemo pritisnuti tipke naprijed, natrag, nalijevo, desno.

Prije nego što dodamo povratne pozive gumbima za naprijed, natrag, moramo inicijalizirati brzine linearne i kutne brzine.

Stoga ispod _OpeningFcn (hObject, eventdata, handles, varargin) definirajte sljedeće (vidi sliku):

global left_spinVelocity globalni right_spinVelocity

globalna naprijedVelocity

globalna brzina unatrag

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

brzina unatrag = -3;

Napomena: sve brzine su u rad/s

Sada kada su definirane globalne varijable, programirajmo gumbe za kretanje.

Za tipku Naprijed:

function pushbutton4_Callback (hObject, eventdata, handles) globalni velmsg

globalni robot

globalno teleop_topic_name

globalna naprijedVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = naprijedVelocity;

poslati (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', istina);

Slično za gumb unatrag:

function pushbutton5_Callback (hObject, eventdata, handles)

globalni velmsg

globalni robot

globalna nazadna brzina

globalno teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = brzina unatrag;

poslati (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Slično za lijevu tipku: funkcija pushbutton3_Callback (hObject, eventdata, handles)

globalni velmsgglobal robot global left_spinVelocity

globalno teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linearno. X = 0;

poslati (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', istina);

Slično za desni gumb:

globalni velmsgglobal robot

globalni right_spinVelocity

globalno teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linearno. X = 0;

poslati (robot, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Nakon što su sve funkcije povratnog poziva dodane i datoteke spremljene, možemo testirati naš kontroler.

Korak 8: Postavljanje mrežne konfiguracije na ROS računalu (Linux)

Postavljanje mrežne konfiguracije na ROS računalu (Linux)
Postavljanje mrežne konfiguracije na ROS računalu (Linux)
Postavljanje mrežne konfiguracije na ROS računalu (Linux)
Postavljanje mrežne konfiguracije na ROS računalu (Linux)

Kontroler ćemo testirati na ros računalu (Linux), što će zahtijevati postavljanje mrežne konfiguracije. Ako kontroler radite i na linux računalu, morat ćete i tamo postaviti mrežnu konfiguraciju.

Konfiguracija mreže:

Otvorite prozor terminala i upišite gedit.bashrc

Nakon otvaranja datoteke dodajte sljedeće:

#Konfiguracija stroja robota

izvoz ROS_MASTER_URI = https:// localhost: 11311

#IP adresa glavnog čvora ROS -a

izvoz ROS_HOSTNAME =

izvoz ROS_IP =

odjek "ROS_HOSTNAME:" $ ROS_HOSTNAME

odjek "ROS_IP:" $ ROS_IP

odjek "ROS_MASTER_URI:" $ ROS_MASTER_URI

Ovaj korak morate slijediti svaki put zbog dinamičkog dodjeljivanja IP -a.

Korak 9: Pokrenite kontroler

Pokrenite Controller
Pokrenite Controller

Naš kontroler ćemo testirati na Turtle botu u Gazebu.

Da biste instalirali Gazebo, pogledajte

Da biste instalirali Turtle bot, pogledajte

Otvorite mapu u koju ste spremili.fig i.m datoteke na MATLAB -u i pritisnite Pokreni (kao što je prikazano na slici). Ovo će otvoriti kontroler na računalu. Prije pritiska na povezivanje, provjerite radi li vaš simulator robota kornjače.

Za testiranje TurtleBot simulacije:

Otvorite terminal na računalu Ros i upišite: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Ovo će otvoriti simulaciju Turtlebota na tom računalu. Naziv teme TurtleBot -a je/cmd_vel_mux/input/teleop, koji smo već naveli u aplikaciji. Utipkajte IP adresu ros pc, port i naziv teme u gumbima za uređivanje i pritisnite gumb. Poveži se s robotom. Vaš bot kornjača trebao bi se početi kretati kada pritisnete naprijed, natrag itd.

Da biste vidjeli linearne i kutne brzine:

Otvorite novi terminal i upišite naredbu: $ rostopic echo/cmd_vel_mux/input/teleop

I evo vam, vašeg vlastitog ROS robotskog kontrolera zasnovanog na Matlabu. Ako vam se svidjela moja instrukcija, dajte joj glas na Prvom natječaju za autore i podijelite je s što više ljudi. Hvala vam.

Preporučeni: