INHOUDSOPGAWE:

Matlab-gebaseerde ROS Robotic Controller: 9 stappe
Matlab-gebaseerde ROS Robotic Controller: 9 stappe

Video: Matlab-gebaseerde ROS Robotic Controller: 9 stappe

Video: Matlab-gebaseerde ROS Robotic Controller: 9 stappe
Video: Webinar: KUKA.ForceTorqueControl and KUKA.RobotSensorInterface 2024, November
Anonim
Image
Image
Matlab-gebaseerde ROS Robotic Controller
Matlab-gebaseerde ROS Robotic Controller

Vandat ek 'n kind was, het ek nog altyd daarvan gedroom om Iron Man te wees en doen dit steeds. Iron Man is een van die karakters wat realisties moontlik is, en ek wil eenvoudig eendag Iron Man word, selfs al lag mense vir my of sê dit is onmoontlik, want "dit is net onmoontlik totdat iemand dit doen" -Arnold Schwarzenegger.

ROS is 'n opkomende raamwerk wat gebruik word vir die ontwikkeling van komplekse robotstelsels. Die toepassings sluit in: outomatiese monteerstelsel, teleoperasie, prostetiese wapens en swaar masjinerie in die industriële sektor.

Navorsers en ingenieurs maak gebruik van ROS vir die ontwikkeling van die prototipes, terwyl verskillende verskaffers dit gebruik om hul produkte te skep. Dit het 'n ingewikkelde argitektuur wat dit moeilik maak om deur 'n lam man bestuur te word. Die gebruik van MATLAB vir die skep van die koppelvlakverbinding met ROS is 'n nuwe benadering wat navorsers, ingenieurs en verkopers kan help om meer robuuste oplossings te ontwikkel.

Hierdie instruksie handel dus oor hoe om 'n Matlab-gebaseerde ROS-robotbeheerder te maak; dit gaan een van die min tutoriale hieroor en onder die min ROS-instruksies wees. Die doel van hierdie projek is om 'n kontroleerder te ontwerp wat enige ROS-robot wat aan u netwerk gekoppel is, kan beheer. So laat ons begin!

video-redigeringskrediete: Ammar Akher, by [email protected]

Voorrade

Die volgende komponente word benodig vir die projek:

(1) ROS PC/Robot

(2) Router

(3) PC met MATLAB (weergawe: 2014 of hoër)

Stap 1: Alles opgestel word

Alles opgestel
Alles opgestel

Vir hierdie instruksies gebruik ek Ubuntu 16.04 vir my Linux-rekenaar en ros-kinetic, sodat om verwarring te voorkom, raai ek aan om ros kinetic en ubuntu 16.04 te gebruik, aangesien dit die beste ondersteuning vir ros-kinetic het. Vir meer inligting oor die installering van ros kinetic, gaan na https://wiki.ros.org/kinetic/Installation/Ubuntu. Vir MATLAB koop u óf 'n lisensie óf laai 'n trail -weergawe hier af.

Stap 2: Verstaan hoe die beheerder werk

Verstaan hoe die beheerder werk
Verstaan hoe die beheerder werk

'N Rekenaar bestuur die robotbeheerder op MATLAB. Die beheerder neem die IP -adres en die poort van die ros pc/robot in.

'N Ros-onderwerp word gebruik om te kommunikeer tussen die beheerder en die ros pc/robot, wat ook deur die beheerder as insette geneem word. Die modem is nodig om 'n LAN (plaaslike netwerk) te skep, en dit is wat die IP -adresse toewys aan al die toestelle wat aan sy netwerk gekoppel is. Daarom moet die ros pc/robot en die rekenaar waarop die kontroleerder werk, beide aan dieselfde netwerk gekoppel wees (dit wil sê die netwerk van die modem). Noudat u weet "hoe dit werk", gaan ons na die "hoe dit gebou is" …

Stap 3: Skep 'n ROS-MATLAB-koppelvlak

Skep 'n ROS-MATLAB-koppelvlak
Skep 'n ROS-MATLAB-koppelvlak
Skep 'n ROS-MATLAB-koppelvlak
Skep 'n ROS-MATLAB-koppelvlak
Skep 'n ROS-MATLAB-koppelvlak
Skep 'n ROS-MATLAB-koppelvlak

Die ROS-MATLAB-koppelvlak is 'n nuttige koppelvlak vir navorsers en studente om hul robotalgoritmes in MATLAB te prototipeer en dit op ROS-versoenbare robotte te toets. Hierdie koppelvlak kan geskep word deur die robotiese stelsel gereedskapskas in matlab en ons kan ons algoritme prototipe en dit toets 'n ROS-geaktiveerde robot of in robotsimulators soos Gazebo en V-REP.

Om die robotiese stelsel-gereedskapskas op u MATLAB te installeer, gaan na die byvoegingsopsie op die werkbalk en soek na 'n robot-gereedskapskas in die byvoegingsverkenner. Deur die robotiese gereedskapskas te gebruik, kan ons 'n onderwerp, soos 'n ROS -knoop, publiseer of daarop inteken, en ons kan dit 'n ROS -meester maak. Die MATLAB-ROS-koppelvlak het die meeste ROS-funksies wat u benodig vir u projekte.

Stap 4: Kry die IP -adres

Kry die IP -adres
Kry die IP -adres
Kry die IP -adres
Kry die IP -adres

Om die beheerder te laat werk, is dit noodsaaklik dat u die IP -adres van u ROS -robot/rekenaar ken en die rekenaar waarop die beheerder op MATLAB werk.

Om jou rekenaar se ip te kry:

Op Windows:

Maak die opdragprompt oop en tik ipconfig -opdrag en let op die IPv4 -adres

Vir Linux:

Tik ifconfig -opdrag en teken die inet -adres op. Noudat u die ip -adres het, is dit tyd om die GUI te bou …

Stap 5: Skep 'n GUI vir die beheerder

Skep 'n GUI vir die beheerder
Skep 'n GUI vir die beheerder
Skep 'n GUI vir die beheerder
Skep 'n GUI vir die beheerder
Skep 'n GUI vir die beheerder
Skep 'n GUI vir die beheerder

Om die GUI te skep, maak MATLAB oop en tik gids in die opdragvenster. Dit maak die gids -app egter oop, maar ons sal ons GUI skep. U kan ook die app -ontwerper op MATLAB gebruik om u GUI te ontwerp.

Ons maak in totaal 9 knoppies (soos in figuur getoon):

6 drukknoppies: vorentoe, agtertoe, links, regs, koppel aan robot, ontkoppel

3 bewerkbare knoppies: Ros pc ip, poort en onderwerpnaam.

Die knoppies wat bewerkbaar is, is die knoppies wat die IP van ROS PC, die poort en die onderwerpnaam as invoer sal neem. Die onderwerpnaam is waarmee die MATLAB -beheerder en die ROS -robot/rekenaar kommunikeer. Om die string op die bewerkbare knoppie te wysig, klik met die rechtermuisknop op die knoppie >> gaan na Inspekteureienskappe >> String en wysig die teks van die knoppie.

Sodra u GUI voltooi is, kan u die knoppies programmeer. Dit is waar die regte pret begin …

Stap 6: Programmering van die GUI -bewerkbare knoppies

Programmeer die GUI -bewerkbare knoppies
Programmeer die GUI -bewerkbare knoppies
Programmeer die GUI -bewerkbare knoppies
Programmeer die GUI -bewerkbare knoppies
Programmeer die GUI -bewerkbare knoppies
Programmeer die GUI -bewerkbare knoppies
Programmeer die GUI -bewerkbare knoppies
Programmeer die GUI -bewerkbare knoppies

Die GUI word as 'n.fig-lêer gestoor, maar die kode/terugbelfunksies word in.m-formaat gestoor. Die.m-lêer bevat die kode vir al u knoppies. Om terugbelfunksies by u knoppies te voeg, klik met die rechtermuisknop> > Bekyk terugbelle >> terugbel. Dit maak die.m -lêer vir u GUI oop waar die spesifieke knoppie gedefinieer word.

Die eerste terugbel wat ons gaan kodeer, is vir die ROS IP -knoppie. Onder funksie edit1_Callback skryf die volgende kode:

funksie edit1_Callback (hObject, eventdata, handvatsels)

globale ros_master_ip

ros_master_ip = get (hObject, 'String')

Hier word die funksie gedefinieer as edit1_Callback, wat verwys na die eerste bewerkbare knoppie. As ons 'n IP-adres van die ROS-netwerk in hierdie bewerkbare knoppie invoer, stoor dit die IP-adres as 'n string in 'n globale veranderlike genaamd ros_master_ip.

Definieer dan net onder _OpeningFcn (hObject, eventdata, handles, varargin) die volgende (sien fig):

globale ros_master_ip

globale ros_master_port

globale teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

U het die ros-pc ip (ros_master_ip), port (ros_master_port) en die Teleop Topic-naam wêreldwyd net hard gekodeer. Wat dit doen, is dat as u die bewerkbare knoppies leeg laat, hierdie vooraf gedefinieerde waardes gebruik sal word wanneer u verbinding maak.

Die volgende terugbel wat ons gaan kodeer, is vir die Port -bewerkbare knoppie.

Onder funksie edit2_Callback skryf die volgende kode:

funksie edit2_Callback (hObject, eventdata, handvatsels)

globale ros_master_port

ros_master_port = get (hObject, 'String')

Hier word die funksie gedefinieer as edit2_Callback, wat verwys na die tweede bewerkbare knoppie. As ons die ros pc/robot se poort hier vanaf die ROS -netwerk in hierdie bewerkbare knoppie binnegaan, stoor dit die poort as 'n string in 'n globale veranderlike genaamd ros_master_port.

Net so is die volgende terugbel wat ons gaan kodeer vir die knoppie Onderwerpnaam wat bewerk kan word.

Onder funksie edit3_Callback skryf die volgende kode:

funksie edit3_Callback (hObject, eventdata, handvatsels)

globale teleop_topic_name

teleop_topic_name = get (hObject, 'String')

Soortgelyk aan ros_master_port, word ook hierdie as string in 'n globale veranderlike gestoor.

Vervolgens gaan ons kyk na die terugbelfunksies vir die drukknoppies …

Stap 7: Programmering van die GUI -drukknoppies

Programmering van die GUI -drukknoppies
Programmering van die GUI -drukknoppies
Programmeer die GUI -drukknoppies
Programmeer die GUI -drukknoppies

Die drukknoppies wat ons voorheen geskep het, is die knoppies wat ons sal gebruik om die robot van die beheerder te skuif, aan te sluit en te ontkoppel. Die terugknoppie van die drukknoppie word soos volg gedefinieer:

bv. funksie pushbutton6_Callback (hObject, eventdata, handvatsels)

Opmerking: afhangende van die volgorde waarin u u drukknoppies geskep het, word hulle dienooreenkomstig genommer. Daarom kan funksie pushbutton6 in my.m -lêer vir Forward wees, terwyl dit in u.m -file vir Backwards kan wees, maar hou dit in gedagte. Om te weet wat die presiese funksie van u drukknop is, klik eenvoudig met die rechtermuisknop >> Bekyk terugbelle >> terugbelle, en dit sal die funksie vir u drukknop oopmaak, maar vir hierdie instruksies neem ek aan dat dit dieselfde is as myne.

Vir die Connect to robot -knoppie:

Onder die funksie pushbutton6_Callback (hObject, eventdata, handvatsels):

funksie pushbutton6_Callback (hObject, eventdata, handvatsels) global ros_master_ip

globale ros_master_port

globale teleop_topic_name

globale robot

globale 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 = roosboodskap (robot);

Hierdie terugbel sal die veranderlike ROS_MASTER_URI stel deur ros_master_ip en die poort aan te sluit. Dan sal die rosinit -opdrag die verbinding inisieer. Na die verbinding sal dit 'n uitgewer van geometry_msgs/Twist skep, wat gebruik sal word om die opdragsnelheid te stuur. Die onderwerpnaam is die naam wat ons in die redigeerkassie gee. Sodra die verbinding suksesvol is, kan ons die drukknoppies vorentoe, agtertoe, links, regs gebruik.

Voordat ons terugbelle by die voorwaartse, agtertoe -drukboute voeg, moet ons die snelhede van lineêre en hoeksnelheid initialiseer.

Daarom definieer hieronder _OpeningFcn (hObject, eventdata, handles, varargin) die volgende (sien fig):

globale left_spinVelocity globale right_spinVelocity

globale vorentoe -snelheid

globale agterwaartse snelheid

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Let wel: alle snelhede is in rad/s

Noudat die globale veranderlikes gedefinieer is, laat ons die bewegingsknoppies programmeer.

Vir die vorentoe -drukknop:

funksie pushbutton4_Callback (hObject, eventdata, handvatsels) globale velmsg

globale robot

globale teleop_topic_name

globale vorentoe -snelheid

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

stuur (robot, velmsg);

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

Net so vir die agteruit -drukknop:

funksie pushbutton5_Callback (hObject, eventdata, handvatsels)

globale velmsg

globale robot

globale agterwaartse snelheid

globale teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

stuur (robot, velmsg);

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

Net so vir die linker drukknop: funksie pushbutton3_Callback (hObject, eventdata, handvatsels)

globale velms globale robot globale left_spinVelocity

globale teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

stuur (robot, velmsg);

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

Net so vir die regter drukknop:

globale velms globale robot

globale right_spinVelocity

globale teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

stuur (robot, velmsg);

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

Sodra al die terugbelfunksies bygevoeg is en die lêers gestoor is, kan ons ons beheerder toets.

Stap 8: Netwerkopstelling opstel op ROS PC (Linux)

Netwerkopstelling opstel op ROS PC (Linux)
Netwerkopstelling opstel op ROS PC (Linux)
Netwerkopstelling opstel op ROS PC (Linux)
Netwerkopstelling opstel op ROS PC (Linux)

Ons sal die kontroleerder op 'n ros pc (Linux) toets, wat die netwerkkonfigurasie moet opstel.

Netwerkopstelling:

Maak u terminale venster oop en tik gedit.bashrc

Sodra die lêer oop is, voeg die volgende by:

#Konfigurasie van die robotmasjien

voer ROS_MASTER_URI = https:// localhost: 11311 uit

#IP -adres van ROS -hoofknooppunt

voer ROS_HOSTNAME = uit

uitvoer ROS_IP =

eggo "ROS_HOSTNAME:" $ ROS_HOSTNAME

eggo "ROS_IP:" $ ROS_IP

eggo "ROS_MASTER_URI:" $ ROS_MASTER_URI

As gevolg van dinamiese IP -toewysing, moet u hierdie stap elke keer volg.

Stap 9: Begin die beheerder

Begin die beheerder
Begin die beheerder

Ons gaan ons kontroleerder toets op 'n Turtle bot in Gazebo.

Raadpleeg https://gazebosim.org/tutorials?tut=install_ubuntu&cat=install om Gazebo te installeer

Raadpleeg https://yainnoware.blogspot.com/2018/09/install-turtlebot-on-ros-kinetic-ubuntu.html om Turtle bot te installeer

Open die gids waarin u u.fig- en.m -lêers op MATLAB gestoor het en druk op Run (soos in die prentjie getoon). Dit sal die kontroleerder op die rekenaar oopmaak. Maak seker dat u skilpadbotsimulator werk voordat u op connect druk.

Om u TurtleBot -simulasie te toets:

Open Terminal op Ros PC en tik: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Dit sal 'n simulasie van Turtlebot op die rekenaar oopmaak. Die onderwerpnaam van TurtleBot is/cmd_vel_mux/input/teleop, wat ons reeds in die aansoek verskaf het. Tik die ros pc Ip -adres, poort en onderwerpnaam in die bewerkbare knoppies en druk die. Koppel aan die robotknoppie. Jou skilpadbot moet begin beweeg as jy vorentoe, agtertoe, ens.

Om die lineêre en hoeksnelhede te sien:

Maak 'n nuwe terminale oop en tik die opdrag: $ rostopic echo/cmd_vel_mux/input/teleop

En daar het u, u eie Matlab-gebaseerde ROS Robotic Controller. As u van my instruksies gehou het, moet u 'n stem gee oor die eerste keer -outeurskompetisie en dit met soveel mense as moontlik deel. Dankie.

Aanbeveel: