Përmbajtje:

Kontrolluesi Robotik ROS me bazë Matlab: 9 hapa
Kontrolluesi Robotik ROS me bazë Matlab: 9 hapa

Video: Kontrolluesi Robotik ROS me bazë Matlab: 9 hapa

Video: Kontrolluesi Robotik ROS me bazë Matlab: 9 hapa
Video: 8 инструментов в Excel, которыми каждый должен уметь пользоваться 2024, Nëntor
Anonim
Image
Image
Kontrollues robotik ROS me bazë Matlab
Kontrollues robotik ROS me bazë Matlab

Që kur kam qenë fëmijë, kam ëndërruar gjithmonë të jem Iron Man dhe ende e bëj këtë. Iron Man është një nga ata personazhe që është realisht i mundshëm dhe thjesht them që aspiroj të bëhem Iron Man një ditë edhe nëse njerëzit qeshin me mua ose thonë se është e pamundur sepse "është e pamundur vetëm derisa dikush ta bëjë këtë" -Arnold Schwarzenegger.

ROS është një kornizë në zhvillim që përdoret për zhvillimin e sistemeve komplekse robotike. Aplikacionet e tij përfshijnë: Sistemin e Automatizuar të Asamblesë, Teleoperacionin, Armët Protetike dhe Makineritë e Rënda të sektorit industrial.

Hulumtuesit dhe inxhinierët përdorin ROS për zhvillimin e prototipeve, ndërsa shitës të ndryshëm e përdorin atë për krijimin e produkteve të tyre. Ka një arkitekturë komplekse që e bën të vështirë të menaxhohet nga një njeri i çalë. Përdorimi i MATLAB për krijimin e lidhjes së ndërfaqes me ROS është një qasje e re që mund të ndihmojë studiuesit, inxhinierët dhe shitësit në zhvillimin e zgjidhjeve më të fuqishme.

Pra, ky udhëzues ka të bëjë me mënyrën e krijimit të një Kontrolluesi Robotik ROS të bazuar në Matlab, ky do të jetë një nga mësimet shumë të pakta për këtë atje dhe ndër të paktat udhëzues ROS. Qëllimi i këtij projekti është të krijojë një kontrollues që mund të kontrollojë çdo robot ROS të lidhur me rrjetin tuaj. Pra, le të fillojmë!

kredite për redaktimin e videos: Ammar Akher, në [email protected]

Furnizimet

Komponentët e mëposhtëm kërkohen për projektin:

(1) ROS PC/Robot

(2) Ruteri

(3) PC me MATLAB (versioni: 2014 ose më lart)

Hapi 1: Përgatitja e gjithçkaje

Marrja e gjithçkaje të konfiguruar
Marrja e gjithçkaje të konfiguruar

Për këtë të udhëzueshëm, unë jam duke përdorur Ubuntu 16.04 për kompjuterin tim linux dhe ros-kinetik, kështu që për të shmangur konfuzionin unë rekomandoj të përdorni ros kinetic dhe ubuntu 16.04 pasi ka mbështetjen më të mirë për ros-kinetikën. Për më shumë informacion se si të instaloni ros kinetic shkoni në https://wiki.ros.org/kinetic/Installation/Ubuntu. Për MATLAB ose blini një licencë ose shkarkoni një version gjurmë nga këtu.

Hapi 2: Kuptimi se si funksionon kontrolluesi

Kuptimi se si funksionon kontrolluesi
Kuptimi se si funksionon kontrolluesi

Një kompjuter drejton kontrolluesin robotik në MATLAB. Kontrolluesi merr adresën IP dhe portën e ros pc/robotit.

Një temë ros përdoret për të komunikuar midis kontrolluesit dhe ros pc/robotit, e cila gjithashtu merret si hyrje nga kontrolluesi. Modemi kërkohet të krijojë një LAN (rrjet lokal) dhe është ajo që cakton adresat IP për të gjitha pajisjet e lidhura me rrjetin e tij. Prandaj, ros pc/roboti dhe kompjuteri që drejtojnë kontrolluesin duhet të jenë të dy të lidhur me të njëjtin rrjet (dmth. Rrjetin e modemit). Pra, tani që e dini "si funksionon", le të shkojmë te "si është ndërtuar" …

Hapi 3: Krijimi i një ndërfaqe ROS-MATLAB

Krijimi i një ndërfaqe ROS-MATLAB
Krijimi i një ndërfaqe ROS-MATLAB
Krijimi i një ndërfaqe ROS-MATLAB
Krijimi i një ndërfaqe ROS-MATLAB
Krijimi i një ndërfaqe ROS-MATLAB
Krijimi i një ndërfaqe ROS-MATLAB

ROS-MATLABInterface është një ndërfaqe e dobishme për studiuesit dhe studentët për prototipimin e algoritmeve të robotëve të tyre në MATLAB dhe testimin e tyre në robotë të pajtueshëm me ROS. Kjo ndërfaqe mund të krijohet nga kutia e veglave të sistemit robotikë në matlab dhe ne mund të prototipojmë algoritmin tonë dhe ta testojmë atë një robot i aktivizuar me ROS ose në simulues robotësh siç janë Gazebo dhe V-REP.

Për të instaluar kutinë e veglave të sistemit robotik në MATLAB tuaj, thjesht shkoni te opsioni Shtesë në shiritin e veglave dhe kërkoni për kutinë e veglave robotike në eksploruesin shtesë. Duke përdorur kutinë e veglave robotike ne mund të publikojmë ose të regjistrohemi në një temë, të tillë si një nyje ROS, dhe ne mund ta bëjmë atë një master ROS. Ndërfaqja MATLAB-ROS ka shumicën e funksionaliteteve ROS që mund të kërkoni për projektet tuaja.

Hapi 4: Marrja e adresës IP

Marrja e adresës IP
Marrja e adresës IP
Marrja e adresës IP
Marrja e adresës IP

Që kontrolluesi të funksionojë është e domosdoshme të dini adresën IP të robotit/kompjuterit tuaj ROS dhe kompjuterin që drejton kontrolluesin në MATLAB.

Për të marrë IP -në e kompjuterit tuaj:

Në Windows:

Hapni komandën e shpejtë dhe shkruani komandën ipconfig dhe shënoni adresën IPv4

Për Linux:

Shkruani komandën ifconfig dhe shënoni adresën inet. Tani që keni adresën IP, është koha për të ndërtuar GUI …

Hapi 5: Krijoni një GUI për Kontrolluesin

Krijoni një GUI për Kontrolluesin
Krijoni një GUI për Kontrolluesin
Krijoni një GUI për Kontrolluesin
Krijoni një GUI për Kontrolluesin
Krijoni një GUI për Kontrolluesin
Krijoni një GUI për Kontrolluesin

Për të krijuar GUI, hapni MATLAB dhe shkruani udhëzuesin në dritaren e komandës. Kjo do të hapë aplikacionin udhëzues edhe pse ne do të krijojmë GUI -në tonë. Ju gjithashtu mund të përdorni projektuesin e aplikacionit në MATLAB për të hartuar GUI tuaj.

Ne do të krijojmë 9 butona në total (siç tregohet në fig):

6 butona shtypi: Drejt, prapa, majtas, djathtas, Lidhu me robotin, shkëputu

3 Butonat e redaktueshëm: Ros pc ip, porti dhe emri i temës.

Butonat e redaktueshëm janë butonat të cilët do të marrin IP-në e ROS pc-së, portën e saj dhe emrin e Temës si hyrje. Emri i Temës është ajo përmes së cilës komunikojnë kontrolluesi MATLAB dhe roboti/kompjuteri ROS. Për të redaktuar vargun në butonin e redaktueshëm, klikoni me të djathtën mbi butonin >> shkoni te Vetitë e inspektorit >> String dhe modifikoni tekstin e butonit.

Pasi të përfundojë GUI -ja juaj, mund t'i programoni butonat. Këtu fillon argëtimi i vërtetë…

Hapi 6: Programimi i butonave të redaktueshëm të GUI

Programimi i butonave të redaktueshëm të GUI
Programimi i butonave të redaktueshëm të GUI
Programimi i butonave të redaktueshëm të GUI
Programimi i butonave të redaktueshëm të GUI
Programimi i butonave të redaktueshëm të GUI
Programimi i butonave të redaktueshëm të GUI
Programimi i butonave të redaktueshëm të GUI
Programimi i butonave të redaktueshëm të GUI

GUI ruhet si një skedar.fig por funksionet e kodit/thirrjes ruhen në formatin.m. Skedari.m përmban kodin për të gjithë butonat tuaj. Për të shtuar funksionet e kthimit të telefonatave në butonat tuaj, klikoni me të djathtën në butonin> > Shikoni përgjigjet e thirrjeve >> përgjigjen në telefon. Kjo do të hapë skedarin.m për GUI -në tuaj aty ku është përcaktuar ai buton i veçantë.

Thirrja e parë që do të kodojmë është për butonin ROS IP të redaktueshëm. Nën funksionin edit1_Callback shkruani kodin e mëposhtëm:

funksion edit1_Callback (hObject, datadata, doreza)

global ros_master_ip

ros_master_ip = merrni (hObject, 'String')

Këtu funksioni përcaktohet si edit1_Callback, i cili i referohet butonit të parë të redaktueshëm. Kur futim një adresë IP nga rrjeti ROS në këtë buton të redaktueshëm, ajo do të ruajë adresën IP si një varg në një ndryshore globale të quajtur ros_master_ip.

Pastaj vetëm nën _OpeningFcn (hObject, datadata, dorezat, varargin) përcaktoni sa vijon (shiko fig):

global ros_master_ip

ros_master_port global

emri global teleoptik_

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topi_emër = '/cmd_vel_mux/input/teleop';

Ju thjesht keni koduar globalisht ros-pc ip (ros_master_ip), portin (ros_master_port) dhe emrin e Temës Teleop. Ajo që bën kjo është se nëse i lini butonat e redaktueshëm bosh, këto vlera të paracaktuara do të përdoren kur lidheni.

Thirrja tjetër që do të kodojmë është për butonin Port editable.

Nën funksionin edit2_Callback shkruani kodin e mëposhtëm:

funksioni edit2_Callback (hObject, datadata, dorezat)

ros_master_port global

ros_master_port = merrni (hObject, 'String')

Këtu funksioni përcaktohet si edit2_Callback, i cili i referohet butonit të dytë të redaktueshëm. Kur futim portin ros pc/robot këtu nga rrjeti ROS në këtë buton të redaktueshëm, ai do ta ruajë portin si një varg në një ndryshore globale të quajtur ros_master_port.

Në mënyrë të ngjashme, thirrja tjetër që do të kodojmë është për butonin Editable name.

Nën funksionin edit3_Callback shkruani kodin e mëposhtëm:

funksioni edit3_Callback (hObject, datadata, dorezat)

emri global teleopik_topik

teleop_topic_name = marr (hObject, 'String')

Ngjashëm me ros_master_port, edhe kjo ruhet si varg në një ndryshore globale.

Tjetra ne do të shikojmë funksionet e thirrjes për butonat e shtypjes…

Hapi 7: Programimi i butonave shtytës të GUI

Programimi i butonave shtytës të GUI
Programimi i butonave shtytës të GUI
Programimi i butonave shtytës të GUI
Programimi i butonave shtytës të GUI

Butonat e shtypjes që kemi krijuar më parë janë ato që do të përdorim për të lëvizur, lidhur dhe shkëputur robotin nga kontrolluesi. Thirrjet e butonit të shtytjes përcaktohen si më poshtë:

p.sh. funksioni pushbutton6_Callback (hObject, datadata, dorezat)

Shënim: në varësi të rendit në të cilin keni krijuar butonat, ato do të numërohen në përputhje me rrethanat. Prandaj funksioni pushbutton6 në skedarin tim.m mund të jetë për Forward ndërsa në skedarin tuaj.m mund të jetë për Backwards kështu që mbajeni këtë në mendje. Për të ditur se cili është funksioni i saktë për butonin tuaj të shtypjes, thjesht klikoni me të djathtën >> Shikoni përgjigjet e thirrjeve >> thirrjet dhe do të hapë funksionin për butonin tuaj, por për këtë të udhëzueshëm unë supozoj se është i njëjtë me timen.

Për butonin Lidhu me robotin:

Nën funksionin pushbutton6_Callback (hObject, datadata, dorezat):

funksioni pushbutton6_Callback (hObject, eventdata, trajton) global ros_master_ip

ros_master_port global

emri global teleopik_topik

robot global

velmsg globale

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

Kjo thirrje do të vendosë ndryshoren ROS_MASTER_URI duke bashkuar ros_master_ip dhe portën. Pastaj komanda rosinit do të fillojë lidhjen. Pas lidhjes, do të krijojë një botues të geometry_msgs/Twist, i cili do të përdoret për dërgimin e shpejtësisë së komandës. Emri i temës është emri që ne japim në kutinë e redaktimit. Pasi lidhja të jetë e suksesshme, ne do të jemi në gjendje të përdorim butonat përpara, prapa, majtas, djathtas.

Përpara se të shtojmë thirrje në butonat e Forward, Backward, duhet të inicojmë shpejtësinë e shpejtësisë lineare dhe këndore.

Prandaj më poshtë _OpeningFcn (hObject, datadata, dorezat, varargin) përcaktoni sa vijon (shiko fig):

global left_spinVelocity global right_spinVelocity

përpara globale Shpejtësia

global i prapambeturVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

prapambetje = -3;

Shënim: të gjitha shpejtësitë janë në rad/s

Tani që variablat globale janë përcaktuar, le të programojmë butonat e lëvizjes.

Për butonin Forward:

funksioni pushbutton4_Callback (hObject, eventdata, handles) global velmsg

robot global

emri global teleoptik_

përpara globale Shpejtësia

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

dërgoni (robot, velmsg);

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

Në mënyrë të ngjashme për butonin Backward:

funksioni pushbutton5_Callback (hObject, datadata, dorezat)

velmsg globale

robot global

global i prapambeturVelocity

emri global teleopik_topik

velmsg. Angular. Z = 0;

velmsg. Linear. X = shpejtësi e prapambetur;

dërgoni (robot, velmsg);

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

Në mënyrë të ngjashme për butonin e majtë: funksioni pushbutton3_Callback (hObject, datadata, dorezat)

robot global velmsgglobal global left_spinVelocity

emri global teleoptik_

velmsg. Angular. Z = maja_spinVelocity;

velmsg. Linear. X = 0;

dërgoni (robot, velmsg);

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

Në mënyrë të ngjashme për butonin e djathtë:

robot global velmsgglobal

global right_spinVelocity

emri global teleoptik_

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

dërgoni (robot, velmsg);

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

Pasi të jenë shtuar të gjitha funksionet e thirrjes dhe të ruhen skedarët, ne mund të testojmë kontrolluesin tonë.

Hapi 8: Vendosja e Konfigurimit të Rrjetit në PC ROS (Linux)

Vendosja e konfigurimit të rrjetit në PC ROS (Linux)
Vendosja e konfigurimit të rrjetit në PC ROS (Linux)
Vendosja e konfigurimit të rrjetit në PC ROS (Linux)
Vendosja e konfigurimit të rrjetit në PC ROS (Linux)

Ne do të testojmë kontrolluesin në një kompjuter ros (Linux), i cili do të kërkojë konfigurimin e konfigurimit të rrjetit. Nëse jeni duke drejtuar gjithashtu kontrolluesin në një kompjuter Linux, do të duhet të vendosni konfigurimin e rrjetit edhe atje.

Konfigurimi i rrjetit:

Hapni dritaren tuaj të terminalit dhe shkruani gedit.bashrc

Pasi të hapet skedari, shtoni sa vijon:

Konfigurimi i #Robot Machine

eksporto ROS_MASTER_URI = https:// localhost: 11311

Adresa #IP e nyjes kryesore ROS

eksporto ROS_HOSTNAME =

eksport ROS_IP =

jehonë "ROS_HOSTNAME:" $ ROS_HOSTNAME

jehonë "ROS_IP:" $ ROS_IP

jehonë "ROS_MASTER_URI:" $ ROS_MASTER_URI

Ju duhet ta ndiqni këtë hap çdo herë për shkak të caktimit dinamik të IP.

Hapi 9: Drejtoni Kontrolluesin

Drejtoni Kontrolluesin
Drejtoni Kontrolluesin

Ne do të testojmë kontrolluesin tonë në një bot Turtle në Gazebo.

Për të instaluar Gazebo, ju lutemi referojuni

Për të instaluar botin e Turtle, ju lutemi referojuni

Hapni dosjen ku keni ruajtur skedarët tuaj.fig dhe.m në MATLAB dhe shtypni Run (siç tregohet në figurë). Kjo do të hapë kontrolluesin në PC. Para se të shtypni lidhjen, sigurohuni që imituesi juaj i breshkave të botëve po funksionon.

Për të testuar simulimin tuaj TurtleBot:

Hapni Terminalin në kompjuterin Ros dhe shkruani: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Kjo do të hapë një simulim të Turtlebot në atë kompjuter. Emri i temës së TurtleBot është/cmd_vel_mux/input/teleop, të cilin e kemi dhënë tashmë në aplikacion. Shkruani në adresën e kompjuterit ros, emrin e portës dhe temës në butonat e redaktueshëm dhe shtypni.. Lidhu me butonin Robot. Boti juaj i breshkave duhet të fillojë të lëvizë kur shtypni Forward, Backward etj.

Për të parë shpejtësitë lineare dhe këndore:

Hapni një terminal të ri dhe shkruani komandën: $ rostopic echo/cmd_vel_mux/input/teleop

Dhe atje keni, kontrolluesin tuaj robotik ROS me bazë Matlab. Nëse ju pëlqeu udhëzimi im, ju lutemi jepni një votë në Konkursin e Autorit të Herës së Parë dhe ndani atë me sa më shumë njerëz të jetë e mundur. Faleminderit.

Recommended: