Innholdsfortegnelse:

Matlab-basert ROS Robotic Controller: 9 trinn
Matlab-basert ROS Robotic Controller: 9 trinn

Video: Matlab-basert ROS Robotic Controller: 9 trinn

Video: Matlab-basert ROS Robotic Controller: 9 trinn
Video: John Tesh - The Health Benefits Of Eating Nuts 2024, Juli
Anonim
Image
Image
Matlab-basert ROS Robotic Controller
Matlab-basert ROS Robotic Controller

Helt siden jeg var barn har jeg alltid drømt om å være Iron Man og gjør det fortsatt. Iron Man er en av de karakterene som er realistisk mulig og enkelt sagt, jeg ønsker å bli Iron Man en dag, selv om folk ler av meg eller sier at det er umulig fordi "det er bare umulig før noen gjør det" -Arnold Schwarzenegger.

ROS er et framvoksende rammeverk som brukes for å utvikle komplekse robotsystemer. Søknadene inkluderer: Automatisert monteringssystem, teleoperasjon, protesearmer og tunge maskiner i industrisektoren.

Forskere og ingeniører bruker ROS for å utvikle prototypene, mens forskjellige leverandører bruker den for å lage sine produkter. Den har en kompleks arkitektur som gjør det vanskelig å bli administrert av en halt mann. Å bruke MATLAB for å lage grensesnittkoblingen med ROS er en ny tilnærming som kan hjelpe forskere, ingeniører og leverandører med å utvikle mer robuste løsninger.

Så denne instruksen handler om hvordan du lager en Matlab-basert ROS Robotic Controller, dette kommer til å bli en av de få opplæringsprogrammene om dette der ute og blant de få ROS-instruktørene. Målet med dette prosjektet er å designe en kontroller som kan kontrollere enhver ROS-robot som er koblet til nettverket ditt. Så la oss komme i gang!

videoredigeringspoeng: Ammar Akher, på [email protected]

Rekvisita

Følgende komponenter kreves for prosjektet:

(1) ROS PC/robot

(2) Ruter

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

Trinn 1: Få alt satt opp

Få alt satt opp
Få alt satt opp

For dette instruerbare bruker jeg Ubuntu 16.04 for min Linux-pc og ros-kinetic, så for å unngå forvirring anbefaler jeg å bruke ros kinetic og ubuntu 16.04 siden den har den beste støtten for ros-kinetic. For mer informasjon om hvordan du installerer ros kinetic, gå til https://wiki.ros.org/kinetic/Installation/Ubuntu. For MATLAB kjøper du enten en lisens eller laster ned en stiversjon herfra.

Trinn 2: Forstå hvordan kontrolleren fungerer

Forstå hvordan kontrolleren fungerer
Forstå hvordan kontrolleren fungerer

En pc kjører robotkontrolleren på MATLAB. Kontrolleren tar inn IP -adressen og porten til ros -pc/robot.

Et ros-emne brukes til å kommunisere mellom kontrolleren og ros pc/roboten, som også tas som input fra kontrolleren. Modemet er nødvendig for å lage et LAN (lokalt nettverk) og er det som tilordner IP -adressene til alle enhetene som er koblet til nettverket. Derfor må ros -pc/roboten og pc -en som driver kontrolleren begge være koblet til det samme nettverket (dvs. modemets nettverk). Så nå som du vet "hvordan det fungerer", la oss komme til "hvordan det er bygget" …

Trinn 3: Opprette et ROS-MATLAB-grensesnitt

Opprette et ROS-MATLAB-grensesnitt
Opprette et ROS-MATLAB-grensesnitt
Opprette et ROS-MATLAB-grensesnitt
Opprette et ROS-MATLAB-grensesnitt
Opprette et ROS-MATLAB-grensesnitt
Opprette et ROS-MATLAB-grensesnitt

ROS-MATLAB-grensesnittet er et nyttig grensesnitt for forskere og studenter for prototyper av robotalgoritmer i MATLAB og tester det på ROS-kompatible roboter. Dette grensesnittet kan opprettes av verktøykassen for robotsystemet i matlab, og vi kan prototype algoritmen vår og teste den på en ROS-aktivert robot eller i robotsimulatorer som Gazebo og V-REP.

For å installere verktøykassen for robotics system på MATLAB, går du bare til alternativet Add-on på verktøylinjen og søker etter robot verktøykasse i add-on explorer. Ved å bruke den robuste verktøykassen kan vi publisere eller abonnere på et emne, for eksempel en ROS -node, og vi kan gjøre den til en ROS -master. MATLAB-ROS-grensesnittet har de fleste ROS-funksjonalitetene du kan kreve for prosjektene dine.

Trinn 4: Få IP -adressen

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

For at kontrolleren skal fungere, er det viktig at du kjenner ip -adressen til ROS -roboten/pc -en og datamaskinen som kjører kontrolleren på MATLAB.

Slik får du pc -en din:

På Windows:

Åpne ledeteksten og skriv ipconfig -kommandoen og noter IPv4 -adressen

For Linux:

Skriv ifconfig -kommandoen og noter inet -adressen. Nå som du har ip -adressen, er det på tide å bygge GUI …

Trinn 5: Lag en GUI for kontrolleren

Lag en GUI for kontrolleren
Lag en GUI for kontrolleren
Lag en GUI for kontrolleren
Lag en GUI for kontrolleren
Lag en GUI for kontrolleren
Lag en GUI for kontrolleren

For å lage GUI, åpne MATLAB og skriv guide i kommandovinduet. Dette åpner guide -appen, men vi skal lage vår GUI. Du kan også bruke appdesigneren på MATLAB til å designe din GUI.

Vi skal lage 9 knapper totalt (som vist på fig):

6 trykknapper: Fremover, Bakover, Venstre, Høyre, Koble til Robot, Koble fra

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

De redigerbare knappene er knappene som vil ta ROS-pcens ip, porten og emnetavnet som input. Emnetavnet er hva MATLAB -kontrolleren og ROS -roboten/pc -en kommuniserer gjennom. For å redigere strengen på den redigerbare knappen, høyreklikk på knappen >> gå til Inspektøregenskaper >> String og rediger teksten på knappen.

Når GUI er fullført, kan du programmere knappene. Det er her den virkelige moroa begynner …

Trinn 6: Programmering av de redigerbare GUI -knappene

Programmering av GUI -redigerbare knapper
Programmering av GUI -redigerbare knapper
Programmering av GUI -redigerbare knapper
Programmering av GUI -redigerbare knapper
Programmering av GUI -redigerbare knapper
Programmering av GUI -redigerbare knapper
Programmering av GUI -redigerbare knapper
Programmering av GUI -redigerbare knapper

GUI-en lagres som en.fig-fil, men funksjonene for tilbakekall/tilbakeringing lagres i.m-format.. M-filen inneholder koden for alle knappene dine. For å legge til tilbakeringingsfunksjoner til knappene, høyreklikker du på knappen> > Vis tilbakeringing >> tilbakeringing. Dette åpner.m -filen for GUI -en der den aktuelle knappen er definert.

Den første tilbakeringingen vi skal kode er for ROS IP -knappen som kan redigeres. Under funksjon edit1_Callback skriver du følgende kode:

funksjon edit1_Callback (hObject, eventdata, håndtak)

global ros_master_ip

ros_master_ip = get (hObject, 'String')

Her er funksjonen definert som edit1_Callback, som refererer til den første redigerbare knappen. Når vi skriver inn en IP-adresse fra ROS-nettverket i denne redigerbare knappen, lagrer den IP-adressen som en streng i en global variabel som heter ros_master_ip.

Deretter definerer du like 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 nettopp globalt hardkodet ros-pc ip (ros_master_ip), port (ros_master_port) og Teleop Topic-navnet. Det dette gjør er at hvis du lar de redigerbare knappene stå tomme, vil disse forhåndsdefinerte verdiene bli brukt når du kobler til.

Den neste tilbakeringingen vi skal kode er for Port -redigerbar -knappen.

Under funksjon edit2_Callback skriver du følgende kode:

funksjon edit2_Callback (hObject, eventdata, håndtak)

global ros_master_port

ros_master_port = get (hObject, 'String')

Her er funksjonen definert som edit2_Callback, som refererer til den andre redigerbare knappen. Når vi går inn i ros pc/robotens port her fra ROS -nettverket i denne redigerbare knappen, lagrer den porten som en streng i en global variabel kalt ros_master_port.

På samme måte er den neste tilbakeringingen vi skal kode for emnetavnet som kan redigeres.

Under funksjon edit3_Callback skriver du følgende kode:

function edit3_Callback (hObject, eventdata, håndtak)

globalt teleop_topic_name

teleop_topic_name = get (hObject, 'String')

I likhet med ros_master_port, er også denne lagret som streng i en global variabel.

Deretter skal vi se på tilbakeringingsfunksjonene for trykknappene …

Trinn 7: Programmering av GUI -trykknapper

Programmering av GUI -trykknapper
Programmering av GUI -trykknapper
Programmering av GUI -trykknapper
Programmering av GUI -trykknapper

Trykknappene vi opprettet tidligere er de vi skal bruke til å flytte, koble til og koble roboten fra kontrolleren. Tilbakekalling av trykknapper er definert som følger:

f.eks. funksjon pushbutton6_Callback (hObject, eventdata, håndtak)

Merk: Avhengig av rekkefølgen du opprettet trykknappene i, vil de bli nummerert tilsvarende. Derfor kan pushbutton6 i min.m -fil være for Forward, mens den i.m -filen kan være for Backwards, så husk det. For å vite hvilken eksakt funksjon for trykknappen din, bare høyreklikk >> Vis tilbakeringing >> tilbakeringing, og det vil åpne funksjonen for din trykknapp, men for denne instruerbare antar jeg at den er den samme som min.

For Koble til robot -knappen:

Under funksjonen pushbutton6_Callback (hObject, eventdata, håndtak):

funksjon pushbutton6_Callback (hObject, eventdata, håndtak) global ros_master_ip

global ros_master_port

globalt teleop_topic_name

global robot

global velg

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 tilbakeringingen vil sette ROS_MASTER_URI -variabelen ved å sammenkoble ros_master_ip og porten. Deretter vil rosinit -kommandoen initialisere tilkoblingen. Etter tilkobling vil den opprette en utgiver av geometry_msgs/Twist, som skal brukes til å sende kommandohastigheten. Emnetavnet er navnet vi gir i redigeringsboksen. Når tilkoblingen er vellykket, vil vi kunne bruke trykknappene Fremover, Bakover, Venstre, Høyre.

Før vi legger til tilbakeringinger til fremover, bakover -push -buttoins, må vi initialisere hastighetene på lineær og vinkelhastighet.

Derfor definerer du nedenfor _OpeningFcn (hObject, eventdata, handles, varargin) følgende (se fig):

global left_spinVelocity global right_spinVelocity

global forwardVelocity

global backwardVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Merk: alle hastigheter er i rad/s

Nå som de globale variablene er definert, la oss programmere bevegelsesknappene.

For fremoverknappen:

funksjon pushbutton4_Callback (hObject, eventdata, håndtak) global velmsg

global robot

globalt teleop_topic_name

global forwardVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

send (robot, velmsg);

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

Tilsvarende for bakoverknappen:

funksjon pushbutton5_Callback (hObject, eventdata, håndtak)

global velg

global robot

global backwardVelocity

globalt teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

send (robot, velmsg);

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

Tilsvarende for venstre trykknapp: funksjon pushbutton3_Callback (hObject, eventdata, håndtak)

global velg global robot global left_spinVelocity

globalt teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

send (robot, velmsg);

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

Tilsvarende for høyre trykknapp:

global velmsgglobal robot

global right_spinVelocity

globalt teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

send (robot, velmsg);

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

Når alle tilbakeringingsfunksjonene er lagt til og filene lagret, kan vi teste kontrolleren vår.

Trinn 8: Konfigurere nettverkskonfigurasjon på ROS PC (Linux)

Konfigurere nettverkskonfigurasjon på ROS PC (Linux)
Konfigurere nettverkskonfigurasjon på ROS PC (Linux)
Konfigurere nettverkskonfigurasjon på ROS PC (Linux)
Konfigurere nettverkskonfigurasjon på ROS PC (Linux)

Vi vil teste kontrolleren på en ros -pc (Linux), noe som vil kreve konfigurering av nettverkskonfigurasjonen. Hvis du også kjører kontrolleren på en linux -pc, må du også konfigurere nettverkskonfigurasjonen der.

Nettverkskonfigurasjon:

Åpne terminalvinduet og skriv gedit.bashrc

Legg til følgende når filen er åpen:

#Robot -maskinkonfigurasjon

eksport ROS_MASTER_URI = https:// localhost: 11311

#IP -adresse til ROS -hovednode

eksporter ROS_HOSTNAME =

eksport ROS_IP =

ekko "ROS_HOSTNAME:" $ ROS_HOSTNAME

ekko "ROS_IP:" $ ROS_IP

ekko "ROS_MASTER_URI:" $ ROS_MASTER_URI

Du må følge dette trinnet hver gang på grunn av dynamisk IP -tildeling.

Trinn 9: Kjør kontrolleren

Kjør kontrolleren
Kjør kontrolleren

Vi skal teste kontrolleren vår på en Turtle -bot i Gazebo.

For å installere Gazebo, se

For å installere Turtle bot, vennligst se

Åpne mappen der du lagret.fig- og.m -filene på MATLAB, og trykk på Kjør (som vist på bildet). Dette åpner kontrolleren på PCen. Før du trykker på koble til, må du kontrollere at skilpaddebotsimulatoren din fungerer.

Slik tester du TurtleBot -simuleringen din:

Åpne Terminal på Ros pc og skriv: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Dette vil åpne opp en simulering av Turtlebot på den PCen. Temaet for TurtleBot er/cmd_vel_mux/input/teleop, som vi allerede har oppgitt i applikasjonen. Skriv inn ros pc -adressen, port og emnenavn i de redigerbare knappene og trykk på. Koble til robot -knappen. Skildpadden din skal begynne å bevege seg når du trykker fremover, bakover osv.

Slik ser du den lineære og vinkelhastigheten:

Åpne en ny terminal og skriv inn kommandoen: $ rostopic echo/cmd_vel_mux/input/teleop

Og der har du din helt egen Matlab-baserte ROS Robotic Controller. Hvis du likte min instruerbare, vennligst gi den en stemme om forfatteren for første gang, og del den med så mange mennesker som mulig. Takk skal du ha.

Anbefalt: