Cuprins:

Controler robotizat ROS bazat pe Matlab: 9 pași
Controler robotizat ROS bazat pe Matlab: 9 pași

Video: Controler robotizat ROS bazat pe Matlab: 9 pași

Video: Controler robotizat ROS bazat pe Matlab: 9 pași
Video: 40 полезных автотоваров с Aliexpress, которые упростят жизнь любому автовладельцу #6 2024, Noiembrie
Anonim
Image
Image
Controler robotizat ROS bazat pe Matlab
Controler robotizat ROS bazat pe Matlab

Încă de când eram copil, am visat întotdeauna să fiu Iron Man și încă o fac. Iron Man este unul dintre acele personaje care este posibil în mod realist și pur și simplu spun că aspir să devin Iron Man cândva chiar dacă oamenii râd de mine sau spun că este imposibil pentru că „este imposibil doar până când cineva o face” - Arnold Schwarzenegger.

ROS este un cadru emergent care este utilizat pentru dezvoltarea sistemelor complexe de robotică. Aplicațiile sale includ: sistem automat de asamblare, teleoperare, brațe protetice și utilaje grele din sectorul industrial.

Cercetătorii și inginerii folosesc ROS pentru dezvoltarea prototipurilor, în timp ce diferiți furnizori îl folosesc pentru a-și crea produsele. Are o arhitectură complexă care face dificilă administrarea unui om șchiop. Utilizarea MATLAB pentru crearea legăturii de interfață cu ROS este o abordare nouă care poate ajuta cercetătorii, inginerii și furnizorii să dezvolte soluții mai robuste.

Deci, acest instructable este despre cum să faceți un controler robotizat bazat pe Matlab, acesta va fi unul dintre puținele tutoriale despre acest lucru acolo și printre puținele instructabile ROS. Scopul acestui proiect este de a proiecta un controler care poate controla orice robot ROS conectat la rețeaua dvs. Deci sa începem!

credite de editare video: Ammar Akher, la adresa [email protected]

Provizii

Pentru proiect sunt necesare următoarele componente:

(1) ROS PC / Robot

(2) Router

(3) PC cu MATLAB (versiunea: 2014 sau mai mare)

Pasul 1: Configurarea totul

Configurarea totul
Configurarea totul

Pentru acest lucru instructiv, folosesc Ubuntu 16.04 pentru computerul meu Linux și ros-kinetic, așa că, pentru a evita confuzia, recomand utilizarea ros kinetic și ubuntu 16.04, deoarece are cel mai bun suport pentru ros-kinetic. Pentru mai multe informații despre cum se instalează ros kinetic, accesați https://wiki.ros.org/kinetic/Installation/Ubuntu. Pentru MATLAB, fie achiziționați o licență, fie descărcați o versiune a traseului de aici.

Pasul 2: Înțelegerea modului în care funcționează controlerul

Înțelegerea modului în care funcționează controlerul
Înțelegerea modului în care funcționează controlerul

Un computer rulează controlerul robot pe MATLAB. Controlerul preia adresa IP și portul computerului / robotului ros.

Un subiect ros este folosit pentru a comunica între controler și computerul / robotul ros, care este, de asemenea, luat ca intrare de către controler. Modemul este necesar pentru a crea o rețea locală (LAN) și este ceea ce atribuie adresele IP tuturor dispozitivelor conectate la rețeaua sa. Prin urmare, computerul / robotul ros și computerul care rulează controlerul trebuie să fie conectate ambele la aceeași rețea (adică la rețeaua modemului). Deci, acum, când știți „cum funcționează”, să trecem la „cum este construit” …

Pasul 3: Crearea unei interfețe ROS-MATLAB

Crearea unei interfețe ROS-MATLAB
Crearea unei interfețe ROS-MATLAB
Crearea unei interfețe ROS-MATLAB
Crearea unei interfețe ROS-MATLAB
Crearea unei interfețe ROS-MATLAB
Crearea unei interfețe ROS-MATLAB

Interfața ROS-MATLAB este o interfață utilă pentru cercetători și studenți pentru prototiparea algoritmilor robotului lor în MATLAB și testarea acestuia pe roboți compatibili cu ROS. Această interfață poate fi creată de sistemul de instrumente robotice din matlab și ne putem prototipa algoritmul și îl putem testa pe un robot activat ROS sau în simulatoare de roboți precum Gazebo și V-REP.

Pentru a instala caseta de instrumente a sistemului robotic pe MATLAB, pur și simplu accesați opțiunea Add-on de pe bara de instrumente și căutați caseta de instrumente robotizată în exploratorul de suplimente. Folosind caseta de instrumente robotizate putem publica sau abona la un subiect, cum ar fi un nod ROS, și îl putem face un master ROS. Interfața MATLAB-ROS are majoritatea funcționalităților ROS de care ați putea avea nevoie pentru proiectele dvs.

Pasul 4: Obținerea adresei IP

Obținerea adresei IP
Obținerea adresei IP
Obținerea adresei IP
Obținerea adresei IP

Pentru ca controlerul să funcționeze, este imperativ să cunoașteți adresa IP a robotului / computerului dvs. ROS și a computerului care rulează controlerul pe MATLAB.

Pentru a obține IP-ul computerului:

Pe Windows:

Deschideți promptul de comandă și tastați comanda ipconfig și notați adresa IPv4

Pentru Linux:

Tastați comanda ifconfig și notați adresa inet. Acum că aveți adresa IP, este timpul să creați GUI …

Pasul 5: Creați o interfață grafică pentru controler

Creați o interfață grafică pentru controler
Creați o interfață grafică pentru controler
Creați o interfață grafică pentru controler
Creați o interfață grafică pentru controler
Creați o interfață grafică pentru controler
Creați o interfață grafică pentru controler

Pentru a crea interfața grafică, deschideți MATLAB și tastați ghid în fereastra de comandă. Acest lucru va deschide aplicația de ghidare, deși vom crea GUI-ul nostru. De asemenea, puteți utiliza designerul de aplicații pe MATLAB pentru a vă proiecta interfața grafică.

Vom crea 9 butoane în total (așa cum se arată în fig):

6 butoane: Foward, Înapoi, Stânga, Dreapta, Conectare la robot, Deconectare

3 Butoane editabile: Ros pc ip, port și numele subiectului.

Butoanele editabile sunt butoanele care vor prelua ip-ul computerului ROS, portul său și numele subiectului ca intrare. Numele subiectului este prin care comunică controlerul MATLAB și robotul / computerul ROS. Pentru a edita șirul de pe butonul editabil, faceți clic dreapta pe butonul >> mergeți la Proprietăți inspector >> Șir și editați textul butonului.

Odată ce GUI-ul dvs. este complet, puteți programa butoanele. Aici începe adevărata distracție …

Pasul 6: Programarea butoanelor editabile GUI

Programarea butoanelor editabile GUI
Programarea butoanelor editabile GUI
Programarea butoanelor editabile GUI
Programarea butoanelor editabile GUI
Programarea butoanelor editabile GUI
Programarea butoanelor editabile GUI
Programarea butoanelor editabile GUI
Programarea butoanelor editabile GUI

GUI este salvat ca fișier.fig, dar funcțiile de cod / returnare sunt salvate în format.m. Fișierul.m conține codul pentru toate butoanele dvs. Pentru a adăuga funcții de apel înapoi la butoane, faceți clic dreapta pe butonul> > Vizualizare apeluri >> apelare. Aceasta va deschide fișierul.m pentru interfața grafică către locul în care este definit butonul respectiv.

Primul apel invers pe care îl vom codifica este pentru butonul modificabil ROS IP. Sub funcția edit1_Callback scrieți următorul cod:

funcția edit1_Callback (hObject, eventdata, handles)

global ros_master_ip

ros_master_ip = get (hObject, 'Șir')

Aici funcția este definită ca edit1_Callback, care se referă la primul buton editabil. Când introducem o adresă IP din rețeaua ROS în acest buton editabil, aceasta va stoca adresa IP ca un șir într-o variabilă globală numită ros_master_ip.

Apoi, chiar sub _OpeningFcn (hObject, eventdata, handles, varargin) definiți următoarele (a se vedea fig):

global ros_master_ip

global ros_master_port

global teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/ cmd_vel_mux / input / teleop';

Tocmai ați codificat la nivel global ip-ul ros-pc (ros_master_ip), portul (ros_master_port) și numele subiectului Teleop. Ceea ce face acest lucru este că, dacă lăsați butoanele editabile goale, aceste valori predefinite vor fi utilizate atunci când vă conectați.

Următorul apel invers pe care îl vom codifica este pentru butonul editabil Port.

Sub funcția edit2_Callback scrieți următorul cod:

funcția edit2_Callback (hObject, eventdata, handles)

global ros_master_port

ros_master_port = get (hObject, 'Șir')

Aici funcția este definită ca edit2_Callback, care se referă la al doilea buton editabil. Când intrăm aici portul ros pc / robot din rețeaua ROS în acest buton editabil, acesta va stoca portul ca un șir într-o variabilă globală numită ros_master_port.

În mod similar, următorul apel invers pe care îl vom codifica este pentru butonul Editare nume subiect.

Sub funcția edit3_Callback scrieți următorul cod:

funcție edit3_Callback (hObject, eventdata, handles)

global teleop_topic_name

teleop_topic_name = get (hObject, 'Șir')

Similar cu ros_master_port, și acesta este stocat ca șir într-o variabilă globală.

În continuare vom analiza funcțiile de apelare pentru butoanele …

Pasul 7: Programarea butoanelor Push GUI

Programarea butoanelor push GUI
Programarea butoanelor push GUI
Programarea butoanelor push GUI
Programarea butoanelor push GUI

Butoanele pe care le-am creat anterior sunt cele pe care le vom folosi pentru a muta, conecta și deconecta robotul de la controler. Rambursările de apel de la buton sunt definite după cum urmează:

de exemplu. funcția pushbutton6_Callback (hObject, eventdata, handles)

Notă: în funcție de ordinea în care ați creat butoanele dvs., acestea vor fi numerotate corespunzător. Prin urmare, funcția pushbutton6 din fișierul meu.m ar putea fi pentru Înainte, în timp ce în fișierul dvs..m ar putea fi pentru Înapoi, așa că rețineți acest lucru. Pentru a afla care este funcția exactă pentru butonul dvs., faceți clic dreapta pe >> Vizualizare apeluri >> apeluri și va deschide funcția pentru butonul dvs., dar pentru acest lucru instructiv presupun că este la fel ca al meu.

Pentru butonul Conectare la robot:

Sub funcția pushbutton6_Callback (hObject, eventdata, handles):

funcție pushbutton6_Callback (hObject, eventdata, handles) global ros_master_ip

global ros_master_port

global teleop_topic_name

robot global

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

Acest apel invers va seta variabila ROS_MASTER_URI concatenând ros_master_ip și portul. Apoi comanda rosinit va inițializa conexiunea. După conectare, va crea un editor de geometry_msgs / Twist, care va fi utilizat pentru trimiterea vitezei de comandă. Numele subiectului este numele pe care îl oferim în caseta de editare. Odată ce conexiunea va avea succes, vom putea acționa butoanele înainte, înapoi, stânga, dreapta.

Înainte de a adăuga apeluri de apel la butoanele de împingere înainte, înapoi, trebuie să inițializăm viteza de viteză liniară și unghiulară.

Prin urmare, mai jos _OpeningFcn (hObject, eventdata, handles, varargin) definiți următoarele (a se vedea fig):

global left_spinVelocity global right_spinVelocity

global forwardVelocity

global backwardVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Notă: toate vitezele sunt în rad / s

Acum că sunt definite variabilele globale, să programăm butoanele de mișcare.

Pentru butonul Înainte:

function pushbutton4_Callback (hObject, eventdata, handles) global velmsg

robot global

global teleop_topic_name

global forwardVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

trimite (robot, velmsg);

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

În mod similar pentru butonul înapoi:

funcție pushbutton5_Callback (hObject, eventdata, handles)

global velmsg

robot global

global backwardVelocity

global teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = BackwardVelocity;

trimite (robot, velmsg);

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

În mod similar pentru butonul stâng: funcția pushbutton3_Callback (hObject, eventdata, handles)

global velmsgglobal robot global left_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

trimite (robot, velmsg);

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

În mod similar pentru butonul Dreapta:

robot global velmsgglobal

global right_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

trimite (robot, velmsg);

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

Odată ce toate funcțiile de apel invers au fost adăugate și fișierele salvate, putem testa controlerul nostru.

Pasul 8: Configurarea configurării rețelei pe computerul ROS (Linux)

Configurarea configurației de rețea pe computerul ROS (Linux)
Configurarea configurației de rețea pe computerul ROS (Linux)
Configurarea configurației de rețea pe computerul ROS (Linux)
Configurarea configurației de rețea pe computerul ROS (Linux)

Vom testa controlerul pe un computer ros (Linux), care va necesita configurarea configurației de rețea. Dacă rulați și controlerul pe un computer Linux, va trebui să configurați și configurația de rețea acolo.

Configurarea Rețelei:

Deschideți fereastra terminalului și tastați gedit.bashrc

Odată ce fișierul este deschis, adăugați următoarele:

#Configurare mașină robot

export ROS_MASTER_URI = https:// localhost: 11311

Adresa #IP a nodului master ROS

export ROS_HOSTNAME =

export ROS_IP =

ecou "ROS_HOSTNAME:" $ ROS_HOSTNAME

ecou "ROS_IP:" $ ROS_IP

ecou "ROS_MASTER_URI:" $ ROS_MASTER_URI

Trebuie să urmați acest pas de fiecare dată datorită alocării dinamice a IP-ului.

Pasul 9: Rulați controlerul

Rulați controlerul
Rulați controlerul

Vom testa controlerul nostru pe un robot Turtle în Gazebo.

Pentru a instala Gazebo, vă rugăm să consultați

Pentru a instala robotul Turtle, vă rugăm să consultați

Deschideți folderul în care ați salvat fișierele.fig și.m pe MATLAB și apăsați Run (așa cum se arată în imagine). Aceasta va deschide controlerul de pe computer. Înainte de a apăsa pe conectare, asigurați-vă că simulatorul dvs. de broască țestoasă funcționează.

Pentru a testa simularea TurtleBot:

Deschideți Terminalul pe computerul Ros și tastați: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Aceasta va deschide o simulare a Turtlebot pe acel PC. Numele subiectului TurtleBot este / cmd_vel_mux / input / teleop, pe care l-am furnizat deja în aplicație. Introduceți adresa IP a computerului rosu, portul și numele subiectului în butoanele editabile și apăsați butonul Conectare la robot. Botul tău de broască țestoasă ar trebui să înceapă să se miște atunci când apeși înainte, înapoi etc.

Pentru a vizualiza vitezele liniare și unghiulare:

Deschideți un terminal nou și tastați comanda: $ rostopic echo / cmd_vel_mux / input / teleop

Și iată-l, propriul controler robotizat ROS bazat pe Matlab. Dacă ți-a plăcut instructabilul meu, te rog, dă-i un vot la Concursul de autor pentru prima dată și împărtășește-l cu cât mai mulți oameni posibil. Mulțumesc.

Recomandat: