Sadržaj:
- Supplies
- Korak 1: Postavljanje svega
- Korak 2: Razumijevanje rada kontrolera
- Korak 3: Kreiranje ROS-MATLAB sučelja
- Korak 4: Dobivanje IP adrese
- Korak 5: Kreirajte GUI za Controller
- Korak 6: Programiranje tipki za uređivanje grafičkog sučelja
- Korak 7: Programiranje GUI tipki
- Korak 8: Postavljanje mrežne konfiguracije na ROS računaru (Linux)
- Korak 9: Pokrenite Controller
Video: ROS robotski kontroler zasnovan na Matlabu: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:06
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
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
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
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
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
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
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
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)
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
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:
Robotski kontroler inspiriran N64 (Arduino + NRF24L01): 4 koraka
Robotski kontroler inspiriran N64 (Arduino + NRF24L01): Od svog prvog robotskog projekta koristim kontrolere za igre za izvršavanje naredbi i funkcija. Ovo je svakako utjecaj mojih gejmerskih dana. Već sam radio projekte sa PS2, Xbox 360 kontrolerima … ali došlo je vrijeme kada sam imao nekih problema sa sučeljem
Arduino kontroler za igre uradi sam. Arduino PS2 kontroler igre - Igranje Tekkena s DIY Arduino gamepadom: 7 koraka
Arduino kontroler za igre uradi sam. Arduino PS2 kontroler igre | Igranje Tekkena s DIY Arduino gamepad -om: Zdravo momci, igranje igara uvijek je zabavno, ali igranje sa vlastitim DIY prilagođenim kontrolorom igara je zabavnije. Zato ćemo napraviti kontroler igre pomoću arduino pro micro u ovim uputama
DOL -ov starterski kontroler zasnovan na IOT -u za pumpu za navodnjavanje: 6 koraka
DOL Starter kontroler zasnovan na IOT -u za pumpu za navodnjavanje: Zdravo prijateljiOva instrukcija govori o tome kako daljinski nadzirati i kontrolirati pumpu za navodnjavanje preko interneta. Story: Na mojoj farmi dobivam napajanje iz lokalne mreže samo oko 6 sati dnevno. Termini nisu redovni, dostupnost po
ROS MoveIt Robotic Arm Dio 2: 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
Serijski servo kontroler zasnovan na Arduinu: 6 koraka
Serijski servo kontroler zasnovan na Arduinu: Ovo je jednostavan serijski kontroler za više servo servera zasnovanih na Arduinu. (i moj prvi instruktor :)) Većina posla u ovome dolazi od dobijanja softvera za razgovor s arduinom i izrade protokola za prijenos podataka. Kao f