Sisukord:
- Tarvikud
- Samm: seadistage kõik
- 2. toiming: saate aru, kuidas kontroller töötab
- 3. samm: ROS-MATLAB-liidese loomine
- Samm: IP -aadressi hankimine
- Samm: looge kontrollerile GUI
- 6. samm: GUI redigeeritavate nuppude programmeerimine
- Samm 7: GUI nuppude programmeerimine
- 8. samm: võrgukonfiguratsiooni seadistamine ROS -arvutis (Linux)
- 9. samm: käivitage kontroller
Video: Matlabil põhinev ROS robotikontroller: 9 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
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
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
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-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
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
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 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
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)
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
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:
CD4017 põhinev multifunktsionaalne jalgratta taustvalgus: 15 sammu
CD4017 põhinev multifunktsionaalne jalgratta taustvalgustus: see vooluring on valmistatud väga levinud CD4017 LED-ahelaga, mida nimetatakse LED-i tagaajajaks. Kuid see võib toetada erinevaid LED-i vilkumismeetodeid, ühendades juhtimiskaablid erineval viisil. Võib-olla saab seda kasutada jalgratta taustvalgustina või visuaalne indikaator
Tinyduino LoRa põhinev lemmikloomade jälgija: 7 sammu
Tinyduino LoRa põhinev lemmikloomade jälgija: kes ei tahaks lemmikloomi pidada ?? Need karvased sõbrad võivad teid armastuse ja õnnega täita. Kuid nende puudumise valu on laastav. Meie peres oli kass nimega Thor (ülaltoodud pilt) ja ta oli seiklusi armastav rändur. Mitu korda tuli ta tagasi
Google'i assistendil põhinev LED -juhtimine Raspberry Pi abil: 3 sammu
Google'i assistendil põhinev LED -juhtimine Raspberry Pi abil: Hei! Selles projektis rakendame Google'i assistendil põhinevat LED -i juhtimist Raspberry Pi 4 abil, kasutades HTTP -d Pythonis. LED -i saate asendada lambipirniga (ilmselgelt mitte sõna otseses mõttes, vajate releemoodulit vahepeal) või mõne muu koduga
N64-inspireeritud robotikontroller (Arduino + NRF24L01): 4 sammu
N64-st inspireeritud robotikontroller (Arduino + NRF24L01): alates esimesest robotiprojektist kasutan käskude ja funktsioonide täitmiseks mängukontrollereid. See on kindlasti minu mängijate päevade mõju. Ma tegin juba projekte PS2, Xbox 360 kontrolleritega … aga saabus aeg, mil mul tekkisid liidese probleemid
ROS MoveIt robotkäsi 2. osa: robotikontroller: 6 sammu
ROS MoveIt Robotic Arm Part 2: Robot Controller: https://github.com/AIWintermuteAI/ros-moveit-arm.git Artikli eelmises osas oleme loonud oma robotkäe jaoks URDF- ja XACRO-failid ning käivitanud RVIZ-i robotkäsi simuleeritud keskkonnas. Seekord teeme seda reaalse