Cuprins:
- Provizii
- Pasul 1: Configurarea totul
- Pasul 2: Înțelegerea modului în care funcționează controlerul
- Pasul 3: Crearea unei interfețe ROS-MATLAB
- Pasul 4: Obținerea adresei IP
- Pasul 5: Creați o interfață grafică pentru controler
- Pasul 6: Programarea butoanelor editabile GUI
- Pasul 7: Programarea butoanelor Push GUI
- Pasul 8: Configurarea configurării rețelei pe computerul ROS (Linux)
- Pasul 9: Rulați controlerul
Video: Controler robotizat ROS bazat pe Matlab: 9 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
Î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
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
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
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
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
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
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
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)
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
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:
[Wearable Mouse] Controler Wearable Mouse bazat pe Bluetooth pentru Windows 10 și Linux: 5 pași
[Wearable Mouse] Wearable Mouse Controller bazat pe Bluetooth pentru Windows 10 și Linux: am realizat un controler de mouse bazat pe Bluetooth care poate fi folosit pentru a controla indicatorul mouse-ului și a efectua operațiuni legate de mouse-ul PC-ului, fără a atinge nicio suprafață. Circuitul electronic, care este încorporat pe o mănușă, poate fi folosit pentru a urmări h
Controler de joc DIY bazat pe Arduino - Controler de joc Arduino PS2 - Jucând Tekken cu DIY Arduino Gamepad: 7 pași
Controler de joc DIY bazat pe Arduino | Controler de joc Arduino PS2 | Jucând Tekken cu DIY Arduino Gamepad: Bună, băieți, jocul este întotdeauna distractiv, dar jocul cu propriul controler personalizat DIY este mai distractiv
Controler de pornire DOL bazat pe IOT pentru pompă de irigare: 6 pași
Controler de pornire DOL bazat pe IOT pentru pompă de irigare: Bună ziua Prieteni Acest instructiv este despre cum să monitorizați și să controlați de la distanță o pompă de irigare setată pe internet. Poveste: în ferma mea primesc sursa de alimentare de la rețeaua locală doar timp de aproximativ 6 ore pe zi. Timpurile nu sunt regulate, disponibilitatea po
Generator de muzică bazat pe vreme (Generator Midi bazat pe ESP8266): 4 pași (cu imagini)
Generator de muzică bazat pe vreme (Generator midi bazat pe ESP8266): Bună, astăzi vă voi explica cum să vă creați propriul generator de muzică bazat pe vreme. Se bazează pe un ESP8266, care este un fel ca un Arduino și răspunde la temperatură, ploaie și intensitatea luminii. Nu vă așteptați să producă melodii întregi sau programe de acord
Braț robotizat bazat pe microcontroler PIC: 6 pași (cu imagini)
Braț robotizat bazat pe microcontroler PIC: De la linia de asamblare a industriilor producătoare de automobile până la roboții de telesurgie din spațiu, brațele robotice se găsesc peste tot. Mecanismele acestor roboți sunt similare cu un om care poate fi programat pentru funcții similare și cresc