Sadržaj:
- Pribor
- Korak 1: Postavljanje svega
- Korak 2: Razumijevanje rada kontrolera
- Korak 3: Stvaranje ROS-MATLAB sučelja
- Korak 4: Dobivanje IP adrese
- Korak 5: Izradite GUI za kontroler
- Korak 6: Programiranje gumba za uređivanje grafičkog sučelja
- Korak 7: Programiranje GUI tipki
- Korak 8: Postavljanje mrežne konfiguracije na ROS računalu (Linux)
- Korak 9: Pokrenite kontroler
Video: ROS robotski upravljač sa sustavom Matlab: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
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
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
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
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
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
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
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
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)
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
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:
Arduino Bluetooth RC automobil s elektroničkim kočnim sustavom: 4 koraka (sa slikama)
Arduino Bluetooth RC automobil W/ elektronički kočioni sustav: Ovako možete napraviti RC automobil za oko 40 USD (27 $ sa klonom uno)
Instaliranje Loboris (lobo) Micropythona na ESP32 sa sustavom Windows 10 [jednostavno]: 5 koraka
Instaliranje Loboris (lobo) Micropythona na ESP32 Sa sustavom Windows 10 [jednostavno]: Ovaj vodič će vam pomoći da instalirate loboris mikropython na svoj ESP32 bez ikakvog znanja. Loboris ima biblioteke koje standardni mikropython nema i koje su vrlo korisne. Ovaj je vodič posebno napravljen za moj vodič o tome kako koristiti
Robotski daljinski upravljač Rock Crawler Arduino: 4 koraka
Robotski daljinski upravljač Rock Crawler Arduino: Ovo izgleda i vrlo je barebone. Preporučio bih svima koji žele raditi na ovom projektu razmisliti o nekom načinu pokrivanja elektronike kako bi se zaštitili od vode i prljavštine
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: 6 koraka
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: Ako ste ikada izgubili daljinski upravljač za televizor ili DVD uređaj, znate koliko je frustrirajuće morati hodati do, pronaći i koristiti gumbe na samom uređaju. Ponekad ti gumbi čak ne nude istu funkcionalnost kao daljinski. Primiti
ROS MoveIt Robotic Arm 2. dio: Robotski kontroler: 6 koraka
ROS MoveIt Robotic Arm Dio 2: Robot Controller: https://github.com/AIWintermuteAI/ros-moveit-arm.gitU prethodnom dijelu članka stvorili smo URDF i XACRO datoteke za našu robotsku ruku i pokrenuli RVIZ za kontrolu naše robotska ruka u simuliranom okruženju. Ovaj put ćemo to učiniti s rea