Indholdsfortegnelse:

Matlab-baseret ROS Robotic Controller: 9 trin
Matlab-baseret ROS Robotic Controller: 9 trin

Video: Matlab-baseret ROS Robotic Controller: 9 trin

Video: Matlab-baseret ROS Robotic Controller: 9 trin
Video: HOUSE SHARK (2017) Official Trailer - Shark Horror Movie HD 2024, November
Anonim
Image
Image
Matlab-baseret ROS Robotic Controller
Matlab-baseret ROS Robotic Controller

Lige siden jeg var barn har jeg altid drømt om at være Iron Man og gør det stadig. Iron Man er en af de karakterer, der er realistisk muligt og ganske enkelt, jeg stræber efter at blive Iron Man en dag, selvom folk griner af mig eller siger, at det er umuligt, fordi "det er kun umuligt, før nogen gør det" -Arnold Schwarzenegger.

ROS er en spirende ramme, der bruges til at udvikle komplekse robotsystemer. Dens applikationer omfatter: Automatiseret montagesystem, teleoperation, protesearme og tunge maskiner i industrisektoren.

Forskere og ingeniører udnytter ROS til at udvikle prototyperne, mens forskellige leverandører bruger det til at skabe deres produkter. Det har en kompleks arkitektur, der gør det svært at blive styret af en lam mand. Brug af MATLAB til at skabe grænsefladeforbindelsen med ROS er en ny tilgang, der kan hjælpe forskere, ingeniører og leverandører med at udvikle mere robuste løsninger.

Så dette instruerbare handler om, hvordan man laver en Matlab-baseret ROS Robotic Controller, dette bliver en af de meget få selvstudier om dette derude og blandt de få ROS-instruktører. Målet med dette projekt er at designe en controller, der kan styre enhver ROS-robot, der er tilsluttet dit netværk. Så lad os komme i gang!

videoredigeringskreditter: Ammar Akher, på [email protected]

Forbrugsvarer

Følgende komponenter kræves til projektet:

(1) ROS PC/Robot

(2) Router

(3) PC med MATLAB (version: 2014 eller nyere)

Trin 1: Få alt opsat

Få alt opsat
Få alt opsat

Til dette instruerbare bruger jeg Ubuntu 16.04 til min Linux-pc og ros-kinetic, så for at undgå forvirring anbefaler jeg at bruge ros kinetic og ubuntu 16.04, da det har den bedste understøttelse af ros-kinetic. For mere information om, hvordan du installerer ros kinetic, gå til https://wiki.ros.org/kinetic/Installation/Ubuntu. For MATLAB køber du enten en licens eller downloader en trailversion herfra.

Trin 2: Forståelse af hvordan controlleren fungerer

Forståelse af hvordan controlleren fungerer
Forståelse af hvordan controlleren fungerer

En pc kører robotcontrolleren på MATLAB. Controlleren indtager IP -adressen og porten til ros -pc'en/robotten.

Et ros-emne bruges til at kommunikere mellem controlleren og ros pc/robotten, som også tages som input af controlleren. Modemet er påkrævet for at oprette et LAN (lokalnetværk) og er det, der tildeler IP -adresserne til alle de enheder, der er forbundet til dets netværk. Derfor skal ros pc'en/robotten og pc'en, der kører controlleren, begge være forbundet til det samme netværk (dvs. modemets netværk). Så nu hvor du ved "hvordan det fungerer", lad os komme til "hvordan det er bygget" …

Trin 3: Oprettelse af et ROS-MATLAB-interface

Oprettelse af et ROS-MATLAB-interface
Oprettelse af et ROS-MATLAB-interface
Oprettelse af et ROS-MATLAB-interface
Oprettelse af et ROS-MATLAB-interface
Oprettelse af et ROS-MATLAB-interface
Oprettelse af et ROS-MATLAB-interface

ROS-MATLABInterface er en nyttig grænseflade for forskere og studerende til prototypering af deres robotalgoritmer i MATLAB og test af den på ROS-kompatible robotter. Denne grænseflade kan oprettes af robotics system værktøjskasse i matlab, og vi kan prototype vores algoritme og teste den på en ROS-aktiveret robot eller i robotsimulatorer som Gazebo og V-REP.

For at installere værktøjskasse til robotiksystem på din MATLAB, skal du blot gå til tilføjelsesindstillingen på værktøjslinjen og søge efter robotværktøjskasse i tilføjelsesudforskeren. Ved hjælp af robotværktøjskassen kan vi udgive eller abonnere på et emne, f.eks. En ROS -knude, og vi kan gøre den til en ROS -master. MATLAB-ROS-grænsefladen har de fleste ROS-funktioner, som du kan kræve til dine projekter.

Trin 4: Hentning af IP -adressen

Få IP -adressen
Få IP -adressen
Henter IP -adressen
Henter IP -adressen

For at controlleren fungerer, er det bydende nødvendigt, at du kender IP -adressen på din ROS -robot/pc og pc'en, der kører controlleren på MATLAB.

Sådan får du din pc's ip:

I Windows:

Åbn kommandoprompt, og skriv kommandoen ipconfig, og noter IPv4 -adressen

Til Linux:

Skriv ifconfig -kommandoen, og noter inet -adressen. Nu hvor du har ip -adressen, er det tid til at bygge GUI …

Trin 5: Opret en GUI til controlleren

Opret en GUI til controlleren
Opret en GUI til controlleren
Opret en GUI til controlleren
Opret en GUI til controlleren
Opret en GUI til controlleren
Opret en GUI til controlleren

For at oprette GUI'en skal du åbne MATLAB og skrive guide i kommandovinduet. Dette åbner dog guide -appen, men vi opretter vores GUI. Du kan også bruge appdesigneren på MATLAB til at designe din GUI.

Vi opretter i alt 9 knapper (som vist i fig):

6 trykknapper: Fremad, Bagud, Venstre, Højre, Tilslut til Robot, Afbryd

3 redigerbare knapper: Ros pc ip, port og emne navn.

De redigerbare knapper er de knapper, der vil tage ROS pc's ip, dens port og emnet navn som input. Emnetavnet er, hvad MATLAB -controlleren og ROS -robotten/pc'en kommunikerer igennem. For at redigere strengen på den redigerbare knap skal du højreklikke på knappen >> gå til Inspektøregenskaber >> String og redigere tekst på knappen.

Når din GUI er færdig, kan du programmere knapperne. Det er her den rigtige sjov begynder …

Trin 6: Programmering af de redigerbare GUI -knapper

Programmering af de redigerbare GUI -knapper
Programmering af de redigerbare GUI -knapper
Programmering af de redigerbare GUI -knapper
Programmering af de redigerbare GUI -knapper
Programmering af de redigerbare GUI -knapper
Programmering af de redigerbare GUI -knapper
Programmering af de redigerbare GUI -knapper
Programmering af de redigerbare GUI -knapper

GUI'en gemmes som en.fig-fil, men funktionerne til kode/tilbagekald gemmes i.m-format.. M-filen indeholder koden for alle dine knapper. For at tilføje tilbagekaldsfunktioner til dine knapper skal du højreklikke på knappen> > Se tilbagekald >> tilbagekald. Dette åbner.m -filen for din GUI, hvor den pågældende knap er defineret.

Det første tilbagekald, vi skal kode, er for ROS IP -knappen, der kan redigeres. Under funktionen edit1_Callback skriver du følgende kode:

funktion edit1_Callback (hObject, eventdata, håndtag)

global ros_master_ip

ros_master_ip = get (hObject, 'String')

Her er funktionen defineret som edit1_Callback, som refererer til den første redigerbare knap. Når vi indtaster en IP-adresse fra ROS-netværket i denne redigerbare knap, gemmer den IP-adressen som en streng i en global variabel kaldet ros_master_ip.

Derefter definerer du lige under _OpeningFcn (hObject, eventdata, handles, varargin) følgende (se fig):

global ros_master_ip

global ros_master_port

globalt teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Du har bare globalt hårdt kodet ros-pc ip (ros_master_ip), port (ros_master_port) og Teleop Topic-navnet. Hvad dette gør er, at hvis du lader de redigerbare knapper stå tomme, vil disse foruddefinerede værdier blive brugt, når du opretter forbindelse.

Det næste tilbagekald, vi skal kode, er for knappen Port, der kan redigeres.

Under funktion edit2_Callback skriver du følgende kode:

funktion edit2_Callback (hObject, eventdata, håndtag)

global ros_master_port

ros_master_port = get (hObject, 'String')

Her er funktionen defineret som edit2_Callback, som refererer til den anden redigerbare knap. Når vi indtaster ros pc'en/robotens port her fra ROS -netværket i denne redigerbare knap, gemmer den porten som en streng i en global variabel kaldet ros_master_port.

Tilsvarende er det næste tilbagekald, vi skal kode, for emnet navn, der kan redigeres.

Under funktion edit3_Callback skriver du følgende kode:

funktion edit3_Callback (hObject, eventdata, håndtag)

globalt teleop_topic_name

teleop_topic_name = get (hObject, 'String')

I lighed med ros_master_port gemmes også denne som streng i en global variabel.

Dernæst skal vi se på tilbagekaldsfunktionerne til trykknapperne …

Trin 7: Programmering af GUI -trykknapper

Programmering af GUI -trykknapper
Programmering af GUI -trykknapper
Programmering af GUI -trykknapper
Programmering af GUI -trykknapper

De trykknapper, vi har oprettet tidligere, er dem, vi vil bruge til at flytte, tilslutte og afbryde robotten fra controlleren. Tilbagekald til trykknapper er defineret som følger:

f.eks. funktion pushbutton6_Callback (hObject, eventdata, håndtag)

Bemærk: afhængigt af den rækkefølge, du oprettede dine trykknapper, ville de blive nummereret i overensstemmelse hermed. Derfor kan funktionsknappen Button6 i min.m -fil være for Forward, mens den i din.m -fil kan være til baglæns, så husk det. For at vide, hvilken nøjagtig funktion til din trykknap, skal du blot højreklikke >> Se tilbagekald >> tilbagekald, og det åbner funktionen for din trykknap, men for denne instruerbare formoder jeg, at det er det samme som mit.

Til knappen Opret forbindelse til robot:

Under funktionen pushbutton6_Callback (hObject, eventdata, håndtag):

funktion pushbutton6_Callback (hObject, eventdata, håndtag) global ros_master_ip

global ros_master_port

globalt teleop_topic_name

global 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 = rosmessage (robot);

Denne tilbagekaldelse vil indstille variablen ROS_MASTER_URI ved at sammenkæde ros_master_ip og porten. Herefter vil rosinit -kommandoen initialisere forbindelsen. Efter tilslutning vil det oprette en udgiver af geometry_msgs/Twist, som vil blive brugt til at sende kommandohastigheden. Emnetavnet er det navn, vi giver i redigeringsfeltet. Når forbindelsen er vellykket, vil vi være i stand til at betjene fremad, bagud, venstre, højre trykknapper.

Inden vi tilføjer tilbagekald til Forward, Backward push buttoins, skal vi initialisere hastighederne på lineær og vinkelhastighed.

Derfor under _OpeningFcn (hObject, eventdata, håndtag, varargin) definerer følgende (se fig):

global left_spinVelocity global right_spinVelocity

global fremad hastighed

global bagudVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Bemærk: alle hastigheder er i rad/s

Nu hvor de globale variabler er defineret, lad os programmere bevægelsesknapperne.

Til knappen Fremad:

funktion pushbutton4_Callback (hObject, eventdata, håndtag) global velmsg

global robot

globalt teleop_topic_name

global fremad hastighed

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

sende (robot, velmsg);

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

Tilsvarende for den bagudgående trykknap:

funktion pushbutton5_Callback (hObject, eventdata, håndtag)

globale velmsg

global robot

global bagudVelocity

globalt teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = bagudVelocity;

sende (robot, velmsg);

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

Tilsvarende for den venstre trykknap: funktion pushbutton3_Callback (hObject, eventdata, håndtag)

global velmsgglobal robot global left_spinVelocity

globalt teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

sende (robot, velmsg);

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

Tilsvarende for den højre trykknap:

global velmsgglobal robot

global right_spinVelocity

globalt teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

sende (robot, velmsg);

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

Når alle tilbagekaldsfunktioner er tilføjet og filerne gemt, kan vi teste vores controller.

Trin 8: Opsætning af netværkskonfiguration på ROS PC (Linux)

Opsætning af netværkskonfiguration på ROS PC (Linux)
Opsætning af netværkskonfiguration på ROS PC (Linux)
Opsætning af netværkskonfiguration på ROS PC (Linux)
Opsætning af netværkskonfiguration på ROS PC (Linux)

Vi tester controlleren på en ros pc (Linux), hvilket vil kræve opsætning af netværkskonfigurationen. Hvis du også kører controlleren på en linux pc, skal du også konfigurere netværkskonfigurationen der.

Netværkskonfiguration:

Åbn dit terminalvindue, og skriv gedit.bashrc

Når filen er åben, tilføj følgende:

#Robot -maskinkonfiguration

eksport ROS_MASTER_URI = https:// localhost: 11311

#IP -adresse på ROS -hovednode

eksport ROS_HOSTNAME =

eksport ROS_IP =

ekko "ROS_HOSTNAME:" $ ROS_HOSTNAME

ekko "ROS_IP:" $ ROS_IP

ekko "ROS_MASTER_URI:" $ ROS_MASTER_URI

Du skal følge dette trin hver gang på grund af dynamisk IP -tildeling.

Trin 9: Kør controlleren

Kør controlleren
Kør controlleren

Vi skal teste vores controller på en Turtle bot i Gazebo.

For at installere Gazebo henvises til

For at installere Turtle bot, henvises til

Åbn den mappe, hvor du gemte dine.fig- og.m -filer på MATLAB, og tryk på Kør (som vist på billedet). Dette åbner controlleren på pc'en. Inden du trykker på forbind, skal du sørge for, at din skildpaddebotsimulator fungerer.

Sådan testes din TurtleBot -simulering:

Åbn Terminal på Ros pc og skriv: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Dette åbner en simulering af Turtlebot på den pc. Emnet navn på TurtleBot er/cmd_vel_mux/input/teleop, som vi allerede har angivet i applikationen. Indtast ros pc'ens IP -adresse, port og emnenavn i de redigerbare knapper, og tryk på knappen. Tilslut til robot. Din skildpaddebot skal begynde at bevæge sig, når du trykker fremad, bagud osv.

Sådan ses de lineære og vinkelhastigheder:

Åbn en ny terminal, og skriv kommandoen: $ rostopic echo/cmd_vel_mux/input/teleop

Og der har du din helt egen Matlab-baserede ROS Robotic Controller. Hvis du kunne lide min instruerbare, bedes du give den en stemme om forfatterens første konkurrence og dele den med så mange mennesker som muligt. Tak skal du have.

Anbefalede: