Kazalo:

Robotski krmilnik ROS na osnovi Matlaba: 9 korakov
Robotski krmilnik ROS na osnovi Matlaba: 9 korakov

Video: Robotski krmilnik ROS na osnovi Matlaba: 9 korakov

Video: Robotski krmilnik ROS na osnovi Matlaba: 9 korakov
Video: Публичное собеседование: Junior Java Developer. Пример, как происходит защита проекта после курсов. 2024, Julij
Anonim
Image
Image
Robotski krmilnik ROS na osnovi Matlaba
Robotski krmilnik ROS na osnovi Matlaba

Že kot otrok sem vedno sanjal, da bom Iron Man, in to še vedno počnem. Iron Man je eden tistih likov, ki so realno možni in preprosto povem, da si nekoč želim postati Iron Man, tudi če se mi ljudje smejijo ali rečejo, da je to nemogoče, ker je "nemogoče le, dokler tega ne stori nekdo" -Arnold Schwarzenegger.

ROS je nastajajoči okvir, ki se uporablja za razvoj kompleksnih robotskih sistemov. Njegove aplikacije vključujejo: avtomatiziran sistem sestavljanja, teleoperacijo, protetično orožje in težke stroje v industrijskem sektorju.

Raziskovalci in inženirji uporabljajo ROS za razvoj prototipov, različni prodajalci pa ga uporabljajo za ustvarjanje svojih izdelkov. Ima zapleteno arhitekturo, ki otežuje upravljanje hromega človeka. Uporaba MATLAB -a za ustvarjanje vmesniške povezave z ROS je nov pristop, ki lahko raziskovalcem, inženirjem in prodajalcem pomaga pri razvoju robustnejših rešitev.

Torej ta pouk govori o tem, kako narediti robotskega krmilnika ROS na osnovi Matlaba, to bo ena redkih vadnic o tem in med redkimi navodili ROS. Cilj tega projekta je oblikovanje krmilnika, ki lahko nadzoruje katerega koli ROS-robota, povezanega z vašim omrežjem. Pa začnimo!

avtorji video montaže: Ammar Akher, na [email protected]

Zaloge

Za projekt so potrebne naslednje komponente:

(1) ROS računalnik/robot

(2) Usmerjevalnik

(3) Računalnik z MATLAB (različica: 2014 ali novejša)

1. korak: Nastavitev vsega

Nastavitev vsega
Nastavitev vsega

Za to navodilo uporabljam Ubuntu 16.04 za računalnik linux in ros-kinetic, zato, da se izognemo zmedi, priporočam uporabo ros kinetic in ubuntu 16.04, saj ima najboljšo podporo za ros-kinetic. Za več informacij o namestitvi ros kinetic obiščite https://wiki.ros.org/kinetic/Installation/Ubuntu. Za MATLAB lahko kupite licenco ali prenesete različico poti od tukaj.

2. korak: Razumevanje delovanja krmilnika

Razumevanje delovanja krmilnika
Razumevanje delovanja krmilnika

Računalnik upravlja robotski krmilnik na MATLAB -u. Krmilnik vnese naslov IP in vrata ros pc/robota.

Ros-tema se uporablja za komunikacijo med krmilnikom in ros pc/robotom, kar krmilnik vzame tudi kot vhod. Modem je potreben za ustvarjanje lokalnega omrežja (LAN) in je tisto, kar dodeli naslove IP vsem napravam, povezanim z njegovim omrežjem. Zato morata biti ros pc/robot in pc, ki poganja krmilnik, povezana v isto omrežje (tj. Omrežje modema). Zdaj, ko veste, "kako deluje", pojdimo na "kako je zgrajen" …

3. korak: Ustvarjanje vmesnika ROS-MATLAB

Ustvarjanje vmesnika ROS-MATLAB
Ustvarjanje vmesnika ROS-MATLAB
Ustvarjanje vmesnika ROS-MATLAB
Ustvarjanje vmesnika ROS-MATLAB
Ustvarjanje vmesnika ROS-MATLAB
Ustvarjanje vmesnika ROS-MATLAB

Vmesnik ROS-MATLAB je uporaben vmesnik za raziskovalce in študente za izdelavo prototipov njihovih robotskih algoritmov v MATLAB-u in testiranje na robotih, ki so združljivi z ROS-om. Ta vmesnik lahko ustvari orodjarna robotskega sistema v matlabu, svoj algoritem pa lahko prototipiramo in preizkusimo na robota, ki podpira ROS, ali v simulatorjih robotov, kot sta Gazebo in V-REP.

Če želite v svoj MATLAB namestiti orodjarno robotskega sistema, preprosto pojdite na možnost Dodatek v orodni vrstici in poiščite robotsko orodje v raziskovalcu dodatkov. Z robotsko zbirko orodij lahko objavimo ali se naročimo na temo, na primer vozlišče ROS, in jo naredimo za mojstra ROS. Vmesnik MATLAB-ROS ima večino funkcij ROS, ki bi jih lahko potrebovali za svoje projekte.

4. korak: Pridobivanje naslova IP

Pridobivanje naslova IP
Pridobivanje naslova IP
Pridobivanje naslova IP
Pridobivanje naslova IP

Za delovanje krmilnika je nujno, da poznate naslov ip vašega ROS robota/računalnika in računalnika, ki upravlja krmilnik na MATLAB -u.

Če želite pridobiti IP vašega računalnika:

V sistemu Windows:

Odprite ukazni poziv in vnesite ukaz ipconfig ter si zapišite naslov IPv4

Za Linux:

Vnesite ukaz ifconfig in si zapišite naslov inet. Zdaj, ko imate naslov ip, je čas za izdelavo grafičnega vmesnika …

5. korak: Ustvarite grafični vmesnik za krmilnik

Ustvarite grafični vmesnik za krmilnik
Ustvarite grafični vmesnik za krmilnik
Ustvarite grafični vmesnik za krmilnik
Ustvarite grafični vmesnik za krmilnik
Ustvarite grafični vmesnik za krmilnik
Ustvarite grafični vmesnik za krmilnik

Če želite ustvariti grafični vmesnik, odprite MATLAB in v ukazno okno vnesite guide. To bo odprlo aplikacijo vodnik, čeprav bomo ustvarili naš grafični vmesnik. Za oblikovanje grafičnega vmesnika lahko uporabite tudi oblikovalca aplikacij v MATLAB -u.

Skupaj bomo ustvarili 9 gumbov (kot je prikazano na sliki):

6 gumbov: naprej, nazaj, levo, desno, poveži se z robotom, odklopi

3 Gumbi, ki jih je mogoče urejati: ip Ros, PC in ime teme.

Gumbi za urejanje so gumbi, ki za vnos vzamejo ip računalnika ROS, njegova vrata in ime teme. Ime teme je tisto, prek česar komunicirata krmilnik MATLAB in robot/računalnik ROS. Če želite urediti niz na gumbu za urejanje, z desno miškino tipko kliknite gumb >> pojdite na Lastnosti inšpektorja >> Niz in uredite besedilo gumba.

Ko je grafični vmesnik končan, lahko programirate gumbe. Tu se začne prava zabava …

6. korak: Programiranje gumbov za urejanje grafičnega vmesnika

Programiranje gumbov za urejanje grafičnega vmesnika
Programiranje gumbov za urejanje grafičnega vmesnika
Programiranje gumbov za urejanje grafičnega vmesnika
Programiranje gumbov za urejanje grafičnega vmesnika
Programiranje gumbov za urejanje grafičnega vmesnika
Programiranje gumbov za urejanje grafičnega vmesnika
Programiranje gumbov za urejanje grafičnega vmesnika
Programiranje gumbov za urejanje grafičnega vmesnika

Grafični vmesnik je shranjen kot datoteka.fig, vendar so funkcije kode/povratnega klica shranjene v formatu.m. Datoteka.m vsebuje kodo za vse gumbe. Če želite gumbom dodati funkcije povratnega klica, z desno tipko miške kliknite gumb> > Ogled povratnih klicev >> povratni klic. To bo odprlo datoteko.m za vaš grafični vmesnik, kjer je določen ta gumb.

Prvi povratni klic, ki ga bomo kodirali, je gumb za urejanje IP ROS. Pod funkcijo edit1_Callback napišite naslednjo kodo:

funkcija edit1_Callback (hObject, podatki o dogodku, ročaji)

globalni ros_master_ip

ros_master_ip = get (hObject, 'String')

Tu je funkcija definirana kot edit1_Callback, kar se nanaša na prvi gumb za urejanje. Ko v ta gumb za urejanje vnesemo naslov IP iz omrežja ROS, bo ta naslov IP shranil kot niz v globalni spremenljivki, imenovani ros_master_ip.

Nato tik pod _OpeningFcn (hObject, eventdata, handles, varargin) določite naslednje (glej sliko):

globalni ros_master_ip

globalni ros_master_port

globalno teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Pravkar ste globalno trdo kodirali ros-pc ip (ros_master_ip), vrata (ros_master_port) in ime teme Teleop. Če to storite, pustite gumbe za urejanje prazne, bodo te vnaprej določene vrednosti uporabljene, ko se povežete.

Naslednji povratni klic, ki ga bomo kodirali, je gumb za urejanje vrat.

Pod funkcijo edit2_Callback napišite naslednjo kodo:

funkcija edit2_Callback (hObject, podatki o dogodku, ročaji)

globalni ros_master_port

ros_master_port = get (hObject, 'String')

Tu je funkcija definirana kot edit2_Callback, kar se nanaša na drugi gumb za urejanje. Ko vnesemo vrata ros pc/robot iz omrežja ROS v tem gumbu, ki ga je mogoče urejati, bodo vrata shranjena kot niz v globalni spremenljivki, imenovani ros_master_port.

Podobno je naslednji povratni klic gumb za urejanje imena teme.

Pod funkcijo edit3_Callback napišite naslednjo kodo:

funkcija edit3_Callback (hObject, podatki o dogodku, ročaji)

globalno ime_teme_teme

teleop_topic_name = get (hObject, 'String')

Podobno kot ros_master_port je tudi to shranjeno kot niz v globalni spremenljivki.

Nato si bomo ogledali funkcije povratnega klica za gumbe …

7. korak: Programiranje gumbov GUI

Programiranje gumbov GUI
Programiranje gumbov GUI
Programiranje gumbov GUI
Programiranje gumbov GUI

Gumbi, ki smo jih ustvarili prej, so tisti, ki jih bomo uporabljali za premikanje, povezovanje in odklop robota od krmilnika. Povratni klici z gumbom so opredeljeni na naslednji način:

npr. funkcijska tipka6_povratni klic (hObject, podatki o dogodku, ročaji)

Opomba: glede na vrstni red, v katerem ste ustvarili svoje gumbe, bodo ustrezno oštevilčeni. Zato je funkcija pushbutton6 v moji datoteki.m lahko za Naprej, medtem ko je v datoteki.m lahko za Nazaj, zato imejte to v mislih. Če želite vedeti, katera natančna funkcija je za vaš potisni gumb, preprosto kliknite z desno tipko miške >> Prikaži povratne klice >> povratne klice in odprl bo funkcijo za vaš gumb, vendar za to navodilo predvidevam, da je enak mojemu.

Za gumb Poveži se z robotom:

Pod funkcijskim gumbom6_Callback (hObject, eventdata, ročaji):

funkcija pushbutton6_Callback (hObject, podatki o dogodku, ročaji) globalni ros_master_ip

globalni ros_master_port

globalno ime_teme_teme

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);

Ta povratni klic bo nastavil spremenljivko ROS_MASTER_URI s povezovanjem ros_master_ip in vrat. Nato bo ukaz rosinit inicializiral povezavo. Po povezavi bo ustvaril založnika geometry_msgs/Twist, ki bo uporabljen za pošiljanje ukaza ukaz hitrost. Ime teme je ime, ki ga vnesemo v polje za urejanje. Ko bo povezava uspešna, bomo lahko pritisnili gumbe Naprej, Nazaj, Levo, Desno.

Preden povratnim klicem dodamo gumbe za naprej, nazaj, moramo inicializirati hitrosti linearne in kotne hitrosti.

Zato spodaj _OpeningFcn (hObject, eventdata, handles, varargin) opredelite naslednje (glej sliko):

global left_spinVelocity globalno right_spinVelocity

globalna hitrost naprej

globalna hitrost nazaj

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

hitrost nazaj = -3;

Opomba: vse hitrosti so v rad/s

Zdaj, ko so globalne spremenljivke definirane, programirajmo gumbe za gibanje.

Za gumb Naprej:

function pushbutton4_Callback (hObject, eventdata, handles) globalni velmsg

globalni robot

globalno ime_teme_teme

globalna hitrost naprej

velmsg. Angular. Z = 0;

velmsg. Linear. X = hitrost naprej;

pošlji (robot, velmsg);

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

Podobno za gumb za nazaj:

funkcijska tipka5_poklic (hObject, podatki o dogodku, ročaji)

globalni velmsg

globalni robot

globalna hitrost nazaj

globalno ime_teme_teme

velmsg. Angular. Z = 0;

velmsg. Linear. X = hitrost nazaj;

pošlji (robot, velmsg);

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

Podobno za levi gumb: funkcijski gumb3_Callback (hObject, podatki o dogodku, ročaji)

globalni velmsgglobal robot global left_spinVelocity

globalno ime_teme_teme

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linearno. X = 0;

pošlji (robot, velmsg);

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

Podobno za desni gumb:

globalni velmsgglobal robot

globalno right_spinVelocity

globalno teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linearno. X = 0;

pošlji (robot, velmsg);

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

Ko smo dodali vse funkcije povratnega klica in shranili datoteke, lahko preizkusimo naš krmilnik.

8. korak: Nastavitev omrežne konfiguracije na računalniku ROS (Linux)

Nastavitev konfiguracije omrežja na računalniku ROS (Linux)
Nastavitev konfiguracije omrežja na računalniku ROS (Linux)
Nastavitev konfiguracije omrežja na računalniku ROS (Linux)
Nastavitev konfiguracije omrežja na računalniku ROS (Linux)

Krmilnik bomo testirali na ros pc (Linux), kar bo zahtevalo nastavitev omrežne konfiguracije. Če krmilnik zaženete tudi na pc linux, boste morali tudi tam nastaviti omrežno konfiguracijo.

Konfiguracija omrežja:

Odprite terminalsko okno in vnesite gedit.bashrc

Ko je datoteka odprta, dodajte naslednje:

#Konfiguracija stroja robota

izvozi ROS_MASTER_URI = https:// localhost: 11311

#IP naslov glavnega vozlišča ROS

izvozi ROS_HOSTNAME =

izvoz ROS_IP =

odmev "ROS_HOSTNAME:" $ ROS_HOSTNAME

odmev "ROS_IP:" $ ROS_IP

odmev "ROS_MASTER_URI:" $ ROS_MASTER_URI

Temu koraku morate vsakič slediti zaradi dinamične dodelitve IP.

9. korak: Zaženite krmilnik

Zaženite krmilnik
Zaženite krmilnik

Naš krmilnik bomo preizkusili na želvi bot v Gazebu.

Če želite namestiti Gazebo, obiščite

Če želite namestiti Turtle bot, obiščite

Odprite mapo, v kateri ste shranili datoteke.fig in.m v MATLAB in pritisnite Run (kot je prikazano na sliki). S tem se odpre krmilnik v računalniku. Preden pritisnete na povezavo, se prepričajte, da vaš simulator želve deluje.

Če želite preizkusiti svojo simulacijo TurtleBot:

Odprite terminal na računalniku Ros in vnesite: $ roslaunch turtlebot_gazebo turtlebot_world.launch. To bo odprlo simulacijo Turtlebota na tem računalniku. Ime teme programa TurtleBot je/cmd_vel_mux/input/teleop, ki smo ga že navedli v aplikaciji. Vnesite naslov IP ros pc, vrata in ime teme v gumbih za urejanje in pritisnite gumb. Poveži se z robotom. Vaš želvin bot bi se moral začeti premikati, ko pritisnete naprej, nazaj itd.

Za ogled linearnih in kotnih hitrosti:

Odprite nov terminal in vnesite ukaz: $ rostopic echo/cmd_vel_mux/input/teleop

In tu imate svoj lastni robotski krmilnik ROS, ki temelji na Matlabu. Če vam je moj pouk všeč, ga glasujte na tekmovanju avtorjev prvič in ga delite s čim več ljudmi. Hvala vam.

Priporočena: