Sisukord:

Matlabil põhinev ROS robotikontroller: 9 sammu
Matlabil põhinev ROS robotikontroller: 9 sammu

Video: Matlabil põhinev ROS robotikontroller: 9 sammu

Video: Matlabil põhinev ROS robotikontroller: 9 sammu
Video: Ханс и Ола Рослинги: Давайте узнаем этот мир получше 2024, November
Anonim
Image
Image
Matlabil põhinev ROS robotikontroller
Matlabil põhinev ROS robotikontroller

Lapsest saati olen alati unistanud olla Raudmees ja teen seda siiani. Raudmees on üks neist tegelastest, kes on reaalselt võimalik ja ma lihtsalt soovin saada kunagi raudmeheks isegi siis, kui inimesed minu üle naeravad või ütlevad, et see on võimatu, sest "see on võimatu ainult enne, kui keegi seda teeb"-Arnold Schwarzenegger.

ROS on arenev raamistik, mida kasutatakse keerukate robootikasüsteemide väljatöötamiseks. Selle rakenduste hulka kuuluvad: automatiseeritud kokkupanekusüsteem, kaugtöö, tööstusharu proteesid ja raskemasinad.

Teadlased ja insenerid kasutavad prototüüpide väljatöötamiseks ROS -i, samas kui erinevad müüjad kasutavad seda oma toodete loomisel. Sellel on keeruline arhitektuur, mis raskendab halva mehe juhtimist. MATLAB -i kasutamine liideselingi loomiseks ROS -iga on uudne lähenemisviis, mis võib aidata teadlastel, inseneridel ja müüjatel jõulisemate lahenduste väljatöötamisel.

Nii et see juhend on mõeldud Matlabil põhineva ROS-robotkontrolleri valmistamiseks, see saab olema üks väheseid õpetusi selle kohta ja nende väheste ROS-i juhendite hulgas. Selle projekti eesmärk on kujundada kontroller, mis suudab juhtida kõiki teie võrku ühendatud ROS-roboteid. Nii et alustame!

videotöötlusautorid: Ammar Akher, aadressil [email protected]

Tarvikud

Projekti jaoks on vaja järgmisi komponente:

(1) ROS PC/robot

(2) Ruuter

(3) arvuti koos MATLABiga (versioon: 2014 või uuem)

Samm: seadistage kõik

Kõigi seadistamine
Kõigi seadistamine

Selle juhise jaoks kasutan oma Linuxi arvuti ja ros-kineetika jaoks Ubuntu 16.04, nii et segaduste vältimiseks soovitan kasutada ros kineetikat ja ubuntu 16.04, kuna see toetab ros-kineetikat kõige paremini. Ros kineetika installimise kohta lisateabe saamiseks minge aadressile https://wiki.ros.org/kinetic/Installation/Ubuntu. MATLABi jaoks ostate litsentsi või laadite siit alla raja versiooni.

2. toiming: saate aru, kuidas kontroller töötab

Kontrolleri töö mõistmine
Kontrolleri töö mõistmine

Arvuti juhib MATLABi robotkontrollerit. Kontroller võtab sisse roosa arvuti/roboti IP -aadressi ja pordi.

Kontrolleri ja ros pc/roboti vaheliseks suhtlemiseks kasutatakse ros-teemat, mida kontroller ka sisendiks võtab. Modem on vajalik kohtvõrgu (LAN) loomiseks ja see määrab IP -aadressid kõikidele selle võrguga ühendatud seadmetele. Seetõttu peavad ros pc/robot ja kontrollerit käivitav arvuti olema ühendatud samasse võrku (st modemi võrku). Nüüd, kui teate, "kuidas see töötab", asume "kuidas see on üles ehitatud" juurde …

3. samm: ROS-MATLAB-liidese loomine

ROS-MATLAB liidese loomine
ROS-MATLAB liidese loomine
ROS-MATLAB liidese loomine
ROS-MATLAB liidese loomine
ROS-MATLAB liidese loomine
ROS-MATLAB liidese loomine

ROS-MATLABInterface on kasulik liides teadlastele ja üliõpilastele oma robotialgoritmide prototüüpimiseks MATLAB-is ja selle testimiseks ROS-iga ühilduvatel robotitel. Selle liidese saab luua Matlabi robootikasüsteemi tööriistakastiga ja me saame oma algoritmi prototüübi koostada ja seda testida ROS-toega robot või selliste robotite simulaatorites nagu Gazebo ja V-REP.

Robootikasüsteemi tööriistakasti installimiseks oma MATLAB-i, minge lihtsalt tööriistariba suvandile Lisandmoodul ja otsige lisandmoodulitest robotitööriistakasti. Kasutades robotite tööriistakasti, saame avaldada või tellida teema, näiteks ROS -sõlme, ja teha sellest ROS -meister. MATLAB-ROS-liidesel on enamik ROS-funktsioone, mida te oma projektide jaoks vajate.

Samm: IP -aadressi hankimine

IP -aadressi hankimine
IP -aadressi hankimine
IP -aadressi hankimine
IP -aadressi hankimine

Kontrolleri toimimiseks on hädavajalik teada oma ROS -roboti/arvuti IP -aadressi ja arvutit, mis töötab MATLAB -is.

Arvuti ip hankimiseks toimige järgmiselt.

Windowsis:

Avage käsuviip ja tippige käsk ipconfig ja märkige üles IPv4 -aadress

Linuxi jaoks:

Sisestage ifconfig käsk ja märkige sisestatud aadress üles. Nüüd, kui teil on IP -aadress, on aeg luua GUI …

Samm: looge kontrollerile GUI

Looge kontrollerile GUI
Looge kontrollerile GUI
Looge kontrollerile GUI
Looge kontrollerile GUI
Looge kontrollerile GUI
Looge kontrollerile GUI

GUI loomiseks avage käsuaknas MATLAB ja tippige juhend. See avab juhendirakenduse, mille abil me oma GUI -d loome. GUI kujundamiseks saate kasutada ka MATLABi rakenduste disainerit.

Loome kokku 9 nuppu (nagu on näidatud joonisel):

6 surunuppu: edasi, tagasi, vasakule, paremale, ühendage robotiga, katkestage ühendus

3 Redigeerimisnupud: Ros pc ip, port ja teema nimi.

Redigeeritavad nupud on nupud, mis kasutavad sisendina ROS-i arvuti IP-d, selle porti ja teema nime. Teema nimi on see, mille kaudu MATLAB -kontroller ja ROS -robot/arvuti suhtlevad. Redigeeritava nupu stringi muutmiseks paremklõpsake nuppu >> minge jaotisse Inspektori omadused >> String ja muutke nupu teksti.

Kui teie GUI on valmis, saate nuppe programmeerida. Siit algab tõeline lõbu…

6. samm: GUI redigeeritavate nuppude programmeerimine

GUI redigeeritavate nuppude programmeerimine
GUI redigeeritavate nuppude programmeerimine
GUI redigeeritavate nuppude programmeerimine
GUI redigeeritavate nuppude programmeerimine
GUI redigeeritavate nuppude programmeerimine
GUI redigeeritavate nuppude programmeerimine
GUI redigeeritavate nuppude programmeerimine
GUI redigeeritavate nuppude programmeerimine

GUI salvestatakse.fig-failina, kuid koodi/tagasihelistamise funktsioonid salvestatakse.m-vormingus.. M-fail sisaldab kõigi teie nuppude koodi. Nuppudele tagasihelistamisfunktsioonide lisamiseks paremklõpsake nuppu > Vaata tagasihelistamist >> tagasihelistamine. See avab teie GUI.m -faili sinna, kus see nupp on määratletud.

Esimene tagasihelistamine, mida me kodeerime, on redigeeritava ROS IP -nupu jaoks. Funktsiooni edit1_Callback alla kirjutage järgmine kood:

funktsioon edit1_Callback (hObject, eventdata, handles)

globaalne ros_master_ip

ros_master_ip = get (hObject, 'String')

Siin on funktsioon defineeritud kui edit1_Callback, mis viitab esimesele redigeeritavale nupule. Kui sisestame sellesse redigeeritavasse nuppu ROS-võrgust IP-aadressi, salvestab see IP-aadressi stringina globaalsesse muutujale ros_master_ip.

Seejärel määratlege all _OpeningFcn (hObject, eventdata, käepidemed, varargin) järgmine (vt joonis):

globaalne ros_master_ip

globaalne ros_master_port

globaalne teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Olete lihtsalt globaalselt kõvasti kodeerinud ros-pc ip (ros_master_ip), port (ros_master_port) ja Teleopi teema nimi. See tähendab, et kui jätate muudetavad nupud tühjaks, kasutatakse ühenduse loomisel neid eelnevalt määratletud väärtusi.

Järgmine tagasihelistamine, mida me kodeerime, on nupp Port redigeeritav.

Funktsiooni edit2_Callback alla kirjutage järgmine kood:

funktsioon edit2_Callback (hObject, eventdata, käepidemed)

globaalne ros_master_port

ros_master_port = get (hObject, 'String')

Siin on funktsioon määratletud kui edit2_Callback, mis viitab teisele muudetavale nupule. Kui siseneme selles redigeeritavas nupus ROS -võrgust siit ros pc/roboti porti, salvestab see pordi stringina globaalses muutuja nimega ros_master_port.

Samamoodi on järgmine tagasikutsumine, mida me kodeerime, nupp Teema nime redigeerimine.

Funktsiooni edit3_Callback alla kirjutage järgmine kood:

funktsioon edit3_Callback (hObject, eventdata, handles)

globaalne teleop_topic_name

teleop_topic_name = saada (hObject, 'String')

Sarnaselt ros_master_portiga salvestatakse ka see globaalses muutuja stringina.

Järgmisena vaatame nuppude tagasikutsumise funktsioone …

Samm 7: GUI nuppude programmeerimine

GUI nuppude programmeerimine
GUI nuppude programmeerimine
GUI nuppude programmeerimine
GUI nuppude programmeerimine

Varasemalt loodud vajutusnuppe kasutame roboti liigutamiseks, ühendamiseks ja kontrollerist lahti ühendamiseks. Nuppude tagasikutsumised on määratletud järgmiselt.

nt. funktsiooni pushbutton6_Callback (hObject, eventdata, handles)

Märkus: sõltuvalt nuppude loomise järjekorrast nummerdatakse need vastavalt. Seetõttu võib minu.m -faili funktsioon pushbutton6 olla suunatud edasi, samas kui teie.m -failis võib see olla tagurpidi, nii et pidage seda meeles. Et teada saada, milline on teie nupu täpne funktsioon, paremklõpsake lihtsalt >> Vaata tagasihelistamist >> tagasihelistamist ja see avab teie nupu funktsiooni, kuid selle juhendamise jaoks eeldan, et see on sama mis minu oma.

Nupp Ühenda robotiga:

Funktsiooni pushbutton6_Callback (hObject, eventdata, handles) all:

funktsioon pushbutton6_Callback (hObject, eventdata, handles) global ros_master_ip

globaalne ros_master_port

globaalne teleop_topic_name

ülemaailmne robot

ülemaailmne kiirus

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

See tagasihelistamine määrab muutuja ROS_MASTER_URI, ühendades ros_master_ip ja pordi. Seejärel käivitab käsk rosinit ühenduse. Pärast ühendamist loob see väljaandja geometry_msgs/Twist, mida kasutatakse käsu kiiruse saatmiseks. Teema nimi on nimi, mille anname redigeerimiskasti. Kui ühendus on õnnestunud, saame kasutada nuppe Edasi, Tagasi, Vasakule, Paremale.

Enne tagasikutsumiste lisamist edasi -tagasi liikuvatele nuppudele peame initsialiseerima lineaarse ja nurkkiiruse kiirused.

Seetõttu määratlege allpool _OpeningFcn (hObject, eventdata, handles, varargin) järgmine (vt joonis):

global left_spinVelocity globaalne right_spinVelocity

globaalne tulevik

globaalne tagurpidi

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

tagurlikKiirus = -3;

Märkus: kõik kiirused on rad/s

Nüüd, kui globaalsed muutujad on määratletud, programmeerime liikumisnupud.

Edasiliikumise nupp:

funktsioon pushbutton4_Callback (hObject, eventdata, handles) globaalne velmsg

ülemaailmne robot

globaalne teleop_topic_name

globaalne tulevik

velmsg. Nurk. Z = 0;

velmsg. Lineaarne. X = edasiVelocity;

saatma (robot, velmsg);

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

Sarnaselt tagurpidi nupule:

funktsiooni pushbutton5_Callback (hObject, eventdata, handles)

ülemaailmne kiirus

ülemaailmne robot

ülemaailmne mahajäämus

globaalne teleop_topic_name

velmsg. Nurk. Z = 0;

velmsg. Lineaarne. X = tagurpidiKiirus;

saatma (robot, velmsg);

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

Sarnaselt vasakpoolse nupu puhul: funktsioon pushbutton3_Callback (hObject, eventdata, handles)

globaalne velmsgglobal robot globaalne left_spinVelocity

globaalne teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Lineaarne. X = 0;

saatma (robot, velmsg);

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

Samamoodi parempoolse nupu puhul:

ülemaailmne velmsgglobal robot

globaalne right_spinVelocity

globaalne teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Lineaarne. X = 0;

saatma (robot, velmsg);

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

Kui kõik tagasihelistamisfunktsioonid on lisatud ja failid salvestatud, saame oma kontrollerit testida.

8. samm: võrgukonfiguratsiooni seadistamine ROS -arvutis (Linux)

Võrgukonfiguratsiooni seadistamine ROS -arvutis (Linux)
Võrgukonfiguratsiooni seadistamine ROS -arvutis (Linux)
Võrgukonfiguratsiooni seadistamine ROS -arvutis (Linux)
Võrgukonfiguratsiooni seadistamine ROS -arvutis (Linux)

Kontrollerit testime ros arvutis (Linux), mis nõuab võrgukonfiguratsiooni seadistamist. Kui kasutate kontrollerit ka Linuxi arvutis, peate ka seal võrgukonfiguratsiooni seadistama.

Võrgu konfiguratsioon:

Avage terminaliaken ja tippige gedit.bashrc

Kui fail on avatud, lisage järgmine:

#Robotmasina seadistamine

eksport ROS_MASTER_URI = https:// localhost: 11311

#ROS peasõlme IP -aadress

eksport ROS_HOSTNAME =

eksport ROS_IP =

kaja "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

kaja "ROS_MASTER_URI:" $ ROS_MASTER_URI

Dünaamilise IP määramise tõttu peate seda sammu iga kord järgima.

9. samm: käivitage kontroller

Käivitage kontroller
Käivitage kontroller

Katsetame oma kontrollerit vaatetornis asuval kilpkonna robotil.

Gazebo installimiseks vaadake palun aadressi

Turtle bot'i installimiseks vaadake palun

Avage kaust, kuhu salvestasite.fig ja.m failid MATLAB -is ja vajutage Käivita (nagu pildil näidatud). See avab arvuti kontrolleri. Enne ühenduse vajutamist veenduge, et teie kilpkonna bot -simulaator töötab.

TurtleBoti simulatsiooni testimiseks tehke järgmist

Avage Ros terminalis terminal ja tippige: $ roslaunch turtlebot_gazebo turtlebot_world.launch. See avab selles arvutis Turtleboti simulatsiooni. TurtleBoti teema nimi on/cmd_vel_mux/input/teleop, mille oleme juba rakenduses esitanud. Sisestage redigeeritavatesse nuppudesse ros pc Ip aadress, pordi ja teema nimi ning vajutage. Ühenda robotiga. Teie kilpkonna robot peaks liikuma hakkama, kui vajutate edasi, tagasi jne.

Lineaarsete ja nurkkiiruste vaatamiseks tehke järgmist

Avage uus terminal ja tippige käsk: $ rostopic echo/cmd_vel_mux/input/teleop

Ja seal on teie enda Matlabil põhinev ROS robotikontroller. Kui teile meeldis minu juhendatav, siis andke talle hääl esmakordsel autorivõistlusel ja jagage seda võimalikult paljude inimestega. Aitäh.

Soovitan: