Sadržaj:

ROS robotski kontroler zasnovan na Matlabu: 9 koraka
ROS robotski kontroler zasnovan na Matlabu: 9 koraka

Video: ROS robotski kontroler zasnovan na Matlabu: 9 koraka

Video: ROS robotski kontroler zasnovan na Matlabu: 9 koraka
Video: Автоматическое "в яблочко", ДВИГАЮЩАЯСЯ МИШЕНЬ ДЛЯ ДАРТСА 2024, Novembar
Anonim
Image
Image
ROS robotski kontroler zasnovan na Matlabu
ROS robotski kontroler zasnovan na Matlabu

Još od djetinjstva uvijek sam sanjao o tome da postanem Iron Man i još uvijek to činim. Iron Man je jedan od onih likova koji su realno mogući i jednostavno rečeno, težim da jednom postanem Iron Man čak i ako mi se ljudi smiju ili kažu da je to nemoguće jer je "nemoguće samo dok to neko ne učini" -Arnold Schwarzenegger.

ROS je novi okvir koji se koristi za razvoj složenih robotskih sistema. Njegove aplikacije uključuju: automatizovani sistem sastavljanja, daljinsko upravljanje, protetsko naoružanje i teške mašine industrijskog sektora.

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 nekoliko ROS instrukcija. Cilj ovog projekta je dizajnirati kontroler koji može kontrolirati bilo kojeg ROS-robota spojenog na vašu mrežu. Pa krenimo!

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

Supplies

Za projekt su potrebne sljedeće komponente:

(1) ROS računar/robot

(2) Ruter

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

Korak 1: Postavljanje svega

Dobivanje svega Setup
Dobivanje svega Setup

Za ovo uputstvo koristim Ubuntu 16.04 za svoj linux računar i ros-kinetic, pa da ne bude zabune preporučujem korištenje 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 kupite licencu ili preuzmite verziju staze odavde.

Korak 2: Razumijevanje rada kontrolera

Razumijevanje rada kontrolera
Razumijevanje rada kontrolera

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

Ros-tema se koristi za komunikaciju između kontrolera i ros pc/robota, što kontroler takođe uzima kao ulaz. Modem je potreban za stvaranje LAN -a (lokalna mreža) i ono je što dodjeljuje IP adrese svim uređajima povezanim na njegovu mrežu. Zbog toga ros pc/robot i računar koji radi na kontroleru moraju biti povezani na istu mrežu (tj. Mrežu modema). Pa sad kad znate "kako to funkcionira", prijeđimo na "kako je izgrađeno" …

Korak 3: Kreiranje ROS-MATLAB sučelja

Kreiranje ROS-MATLAB sučelja
Kreiranje ROS-MATLAB sučelja
Kreiranje ROS-MATLAB sučelja
Kreiranje ROS-MATLAB sučelja
Kreiranje ROS-MATLAB sučelja
Kreiranje ROS-MATLAB sučelja

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

Da biste na svoj MATLAB instalirali okvir s alatima robotskog sustava, jednostavno idite na opciju Dodatak na alatnoj traci i potražite robotski okvir s alatima u istraživaču dodataka. Pomoću robotskog alata možemo objaviti ili se pretplatiti na temu, poput ROS čvora, a od nje možemo učiniti i ROS master. 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, neophodno je da znate ip adresu vašeg ROS robota/računara i računara koji upravlja kontrolerom na MATLAB -u.

Da biste dobili IP računara:

Na Windows -u:

Otvorite naredbeni redak i upišite naredbu ipconfig i 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: Kreirajte GUI za Controller

Napravite GUI za Controller
Napravite GUI za Controller
Napravite GUI za Controller
Napravite GUI za Controller
Napravite GUI za Controller
Napravite GUI za Controller

Da biste kreirali GUI, otvorite MATLAB i upišite vodič u naredbeni prozor. Ovo će otvoriti aplikaciju vodič iako ćemo kreirati naš GUI. Također možete koristiti dizajner aplikacija na MATLAB -u za dizajniranje vašeg grafičkog sučelja.

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

6 tastera: napred, nazad, levo, desno, poveži se sa robotom, odvoji

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

Dugmad koja se mogu uređivati su dugmad koja će uzeti ip ROS računara, njegov port i naziv teme kao ulaz. Naziv teme je ono što MATLAB kontroler i ROS robot/računar 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 tipki 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 tipki za uređivanje grafičkog sučelja
Programiranje tipki 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 sačuvan kao.fig datoteka, ali funkcije koda/povratnog poziva su sačuvane u.m formatu. Datoteka.m sadrži kôd za sve vaše tipke. Da biste dodali funkcije povratnog poziva vašim gumbima, desnom tipkom miša kliknite gumb> > Pogledajte povratne pozive >> povratni poziv. Ovo će otvoriti.m datoteku za vaš GUI gdje je definirano to dugme.

Prvi povratni poziv koji ćemo kodirati je za ROS IP dugme za uređivanje. 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 prvo dugme za uređivanje. Kada unesemo IP adresu iz ROS mreže u ovo dugme 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_oglasa

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

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

Sljedeći povratni poziv koji ćemo kodirati je za dugme 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 drugo dugme za uređivanje. Kada unesemo port ros pc/robot ovdje s ROS mreže na ovom gumbu 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đaju, ručke)

globalno ime_teme_oglasa

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 tipke …

Korak 7: Programiranje GUI tipki

Programiranje GUI tastera
Programiranje GUI tastera
Programiranje GUI tastera
Programiranje GUI tastera

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

npr. function pushbutton6_Callback (hObject, eventdata, handles)

Napomena: ovisno o redoslijedu kojim ste kreirali svoje tipke, 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 desnim gumbom >> Prikaži povratne pozive >> Povratni pozivi i otvorit će se funkcija za vaš gumb, ali pretpostavljam da je za ovo uputstvo isto što i moje.

Za dugme 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 ime_teme_oglasa

globalni robot

global 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 će postaviti varijablu ROS_MASTER_URI spajanjem ros_master_ip i porta. Zatim će naredba rosinit pokrenuti vezu. Nakon povezivanja, kreirat će izdavača geometry_msgs/Twist, koji će se koristiti za slanje naredbe velocity. Naziv teme je naziv koji dajemo u okviru za uređivanje. Nakon što je veza uspješna, moći ćemo pritisnuti tipke Naprijed, Nazad, Lijevo, 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 napredna brzina

globalna nazadna brzina

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

povratna brzina = -3;

Napomena: sve brzine su u rad/s

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

Za dugme Naprijed:

function pushbutton4_Callback (hObject, eventdata, handles) globalni velmsg

globalni robot

globalno teleop_topic_name

globalna napredna brzina

velmsg. Angular. Z = 0;

velmsg. Linear. X = napredna brzina;

poslati (robot, velmsg);

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

Slično za dugme unazad:

function pushbutton5_Callback (hObject, eventdata, handles)

global velmsg

globalni robot

globalna nazadna brzina

globalno ime_teme_oglasa

velmsg. Angular. Z = 0;

velmsg. Linear. X = nazadnaVelocity;

poslati (robot, velmsg);

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

Slično za lijevo dugme: funkcija pushbutton3_Callback (hObject, eventdata, handles)

globalni velmsgglobal robot global left_spinVelocity

globalno teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

poslati (robot, velmsg);

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

Slično za desno dugme:

globalni velmsgglobal robot

globalna desna_spinVelocity

globalno teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. 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čunaru (Linux)

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

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

Konfiguracija mreže:

Otvorite prozor terminala i upišite gedit.bashrc

Kada se datoteka otvori, dodajte sljedeće:

#Konfiguracija robotske mašine

izvoz ROS_MASTER_URI = https:// localhost: 11311

#IP adresa glavnog čvora ROS -a

izvoz ROS_HOSTNAME =

izvoz ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

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

Korak 9: Pokrenite Controller

Pokrenite Controller
Pokrenite Controller

Testirat ćemo naš kontroler na Botu kornjače u Gazebu.

Da biste instalirali Gazebo, pogledajte

Da biste instalirali Turtle bot, pogledajte

Otvorite fasciklu 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čunaru. Prije pritiska na povezivanje, provjerite radi li vaš simulator robota kornjače.

Da biste testirali svoju TurtleBot simulaciju:

Otvorite terminal na računaru Ros i upišite: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Ovo će otvoriti simulaciju Turtlebota na tom računaru. Naziv teme TurtleBot -a je/cmd_vel_mux/input/teleop, koji smo već naveli u aplikaciji. Upišite ros pc IP adresu, port i naziv teme u dugmad za uređivanje i pritisnite dugme. Poveži se s robotom. Vaš kornjač bot bi se trebao početi kretati kada pritisnete Naprijed, Nazad 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 svidjelo moje uputstvo, dajte mu glas na Prvom takmičenju autora i podijelite ga sa što više ljudi. Hvala ti.

Preporučuje se: