Innehållsförteckning:

Matlab-baserad ROS robotstyrenhet: 9 steg
Matlab-baserad ROS robotstyrenhet: 9 steg

Video: Matlab-baserad ROS robotstyrenhet: 9 steg

Video: Matlab-baserad ROS robotstyrenhet: 9 steg
Video: 55/#HAKİKATİN de HAKİKATİ #KOZMİK TANRI HAYKATRA/BETANOVA #İNSAN / YZN:MUTLAK VARLIK #İSMAİLKEÇECİ 2024, November
Anonim
Image
Image
Matlab-baserad ROS robotstyrenhet
Matlab-baserad ROS robotstyrenhet

Ända sedan jag var barn har jag alltid drömt om att vara Iron Man och gör det fortfarande. Iron Man är en av de karaktärer som är realistiskt möjligt och helt enkelt jag strävar efter att bli Iron Man någon dag även om folk skrattar åt mig eller säger att det är omöjligt eftersom "det är bara omöjligt förrän någon gör det" -Arnold Schwarzenegger.

ROS är en framväxande ram som används för att utveckla komplexa robotsystem. Dess applikationer inkluderar: Automatiserat monteringssystem, teleoperation, protetiska vapen och tunga maskiner inom industrisektorn.

Forskare och ingenjörer utnyttjar ROS för att utveckla prototyperna, medan olika leverantörer använder det för att skapa sina produkter. Det har en komplex arkitektur som gör det svårt att hanteras av en halt man. Att använda MATLAB för att skapa gränssnittslänken med ROS är ett nytt tillvägagångssätt som kan hjälpa forskare, ingenjörer och leverantörer att utveckla mer robusta lösningar.

Så det här instruerbara handlar om hur man gör en Matlab-baserad ROS Robotic Controller, det här kommer att bli en av de få tutorials om detta där ute och bland de få ROS-instruktörerna. Målet med detta projekt är att designa en controller som kan styra alla ROS-robotar som är anslutna till ditt nätverk. Så låt oss komma igång!

videoredigeringspoäng: Ammar Akher, på [email protected]

Tillbehör

Följande komponenter krävs för projektet:

(1) ROS PC/Robot

(2) Router

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

Steg 1: Få allt inställt

Att få allt inställt
Att få allt inställt

För detta instruerbara använder jag Ubuntu 16.04 för min Linux-dator och ros-kinetic, så för att undvika förvirring rekommenderar jag att använda ros kinetic och ubuntu 16.04 eftersom det har det bästa stödet för ros-kinetic. För mer information om hur du installerar ros kinetic gå till https://wiki.ros.org/kinetic/Installation/Ubuntu. För MATLAB köper du antingen en licens eller laddar ner en spårversion härifrån.

Steg 2: Förstå hur styrenheten fungerar

Förstå hur styrenheten fungerar
Förstå hur styrenheten fungerar

En dator kör robotstyrenheten på MATLAB. Styrenheten tar in IP -adressen och porten på ros pc/robot.

Ett ros-ämne används för att kommunicera mellan styrenheten och ros-pc/roboten, vilket också tas som inmatning av styrenheten. Modemet krävs för att skapa ett LAN (lokalt nätverk) och är det som tilldelar IP -adresserna till alla enheter som är anslutna till dess nätverk. Därför måste både ros pc/roboten och datorn som kör regulatorn vara anslutna till samma nätverk (dvs. modemets nätverk). Så nu när du vet "hur det fungerar", låt oss gå till "hur det är byggt" …

Steg 3: Skapa ett ROS-MATLAB-gränssnitt

Skapa ett ROS-MATLAB-gränssnitt
Skapa ett ROS-MATLAB-gränssnitt
Skapa ett ROS-MATLAB-gränssnitt
Skapa ett ROS-MATLAB-gränssnitt
Skapa ett ROS-MATLAB-gränssnitt
Skapa ett ROS-MATLAB-gränssnitt

ROS-MATLABInterface är ett användbart gränssnitt för forskare och studenter för att prototypera sina robotalgoritmer i MATLAB och testa det på ROS-kompatibla robotar. Detta gränssnitt kan skapas av robotiksystemets verktygslåda i matlab och vi kan prototypa vår algoritm och testa den på en ROS-aktiverad robot eller i robotsimulatorer som Gazebo och V-REP.

För att installera verktygslåda för robotiksystem på din MATLAB, gå helt enkelt till tilläggsalternativet i verktygsfältet och sök efter robotverktygslåda i tilläggsutforskaren. Med hjälp av robotverktygslådan kan vi publicera eller prenumerera på ett ämne, till exempel en ROS -nod, och vi kan göra det till en ROS -master. MATLAB-ROS-gränssnittet har de flesta ROS-funktioner som du kan behöva för dina projekt.

Steg 4: Skaffa IP -adressen

Skaffa IP -adressen
Skaffa IP -adressen
Skaffa IP -adressen
Skaffa IP -adressen

För att regulatorn ska fungera är det absolut nödvändigt att du känner till ip -adressen för din ROS -robot/dator och datorn som kör styrenheten på MATLAB.

Så här får du din dators IP:

I Windows:

Öppna kommandotolken och skriv ipconfig -kommandot och notera IPv4 -adressen

För Linux:

Skriv ifconfig -kommandot och notera inet -adressen. Nu när du har ip -adressen är det dags att bygga GUI …

Steg 5: Skapa ett GUI för handkontrollen

Skapa ett GUI för handkontrollen
Skapa ett GUI för handkontrollen
Skapa ett GUI för handkontrollen
Skapa ett GUI för handkontrollen
Skapa ett GUI för handkontrollen
Skapa ett GUI för handkontrollen

För att skapa GUI, öppna MATLAB och skriv guide i kommandofönstret. Detta öppnar dock guide -appen, men vi kommer att skapa vårt GUI. Du kan också använda appdesignern på MATLAB för att designa ditt GUI.

Vi kommer att skapa 9 knappar totalt (som visas i fig):

6 tryckknappar: Framåt, Bakåt, Vänster, Höger, Anslut till Robot, Koppla bort

3 redigerbara knappar: Ros pc ip, port och ämnesnamn.

De redigerbara knapparna är knapparna som tar ROS-datorns ip, dess port och ämnesnamnet som ingång. Ämnesnamnet är vad MATLAB -styrenheten och ROS -roboten/datorn kommunicerar igenom. För att redigera strängen på den redigerbara knappen, högerklicka på knappen >> gå till Inspektörens egenskaper >> Sträng och redigera knappens text.

När din GUI är klar kan du programmera knapparna. Det är här det riktigt roliga börjar …

Steg 6: Programmering av de redigerbara GUI -knapparna

Programmering av GUI -redigerbara knappar
Programmering av GUI -redigerbara knappar
Programmering av GUI -redigerbara knappar
Programmering av GUI -redigerbara knappar
Programmering av GUI -redigerbara knappar
Programmering av GUI -redigerbara knappar
Programmering av GUI -redigerbara knappar
Programmering av GUI -redigerbara knappar

GUI sparas som en.fig-fil men funktionerna för kod/återuppringning sparas i.m-format.. M-filen innehåller koden för alla dina knappar. För att lägga till återuppringningsfunktioner till dina knappar högerklickar du på knappen> > Visa återuppringning >> återuppringning. Detta öppnar.m -filen för ditt GUI där den specifika knappen är definierad.

Den första återuppringningen vi ska koda är för ROS IP -redigerbar knapp. Under funktionen edit1_Callback skriver du följande kod:

function edit1_Callback (hObject, eventdata, handtag)

global ros_master_ip

ros_master_ip = get (hObject, 'String')

Här definieras funktionen som edit1_Callback, som hänvisar till den första redigerbara knappen. När vi anger en IP-adress från ROS-nätverket i den här redigerbara knappen, kommer den att lagra IP-adressen som en sträng i en global variabel som heter ros_master_ip.

Strax under _OpeningFcn (hObject, eventdata, handtag, varargin) definierar du följande (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 precis globalt hårdkodat ros-pc ip (ros_master_ip), port (ros_master_port) och Teleop Topic-namnet. Vad detta gör är att om du lämnar de redigerbara knapparna tomma kommer dessa fördefinierade värden att användas när du ansluter.

Nästa återuppringning vi ska koda är för Port redigerbar knapp.

Under funktionen edit2_Callback skriver du följande kod:

function edit2_Callback (hObject, eventdata, handtag)

global ros_master_port

ros_master_port = get (hObject, 'String')

Här definieras funktionen som edit2_Callback, som hänvisar till den andra redigerbara knappen. När vi går in i ros pc/robotens port här från ROS -nätverket i den här redigerbara knappen, kommer den att lagra porten som en sträng i en global variabel som heter ros_master_port.

På samma sätt är nästa återuppringning vi ska koda för knappen Ämnesnamn redigerbar.

Under funktionen edit3_Callback skriver du följande kod:

function edit3_Callback (hObject, eventdata, handtag)

globalt teleop_topic_name

teleop_topic_name = get (hObject, 'String')

I likhet med ros_master_port lagras även detta som sträng i en global variabel.

Därefter ska vi titta på återuppringningsfunktionerna för tryckknapparna …

Steg 7: Programmering av GUI -tryckknappar

Programmering av GUI -tryckknappar
Programmering av GUI -tryckknappar
Programmering av GUI -tryckknappar
Programmering av GUI -tryckknappar

Tryckknapparna vi skapade tidigare är de vi kommer att använda för att flytta, ansluta och koppla bort roboten från styrenheten. Tryckknappsåteruppringningen definieras enligt följande:

t.ex. funktion pushbutton6_Callback (hObject, eventdata, handtag)

Obs: beroende på i vilken ordning du skapade dina tryckknappar skulle de numreras i enlighet därmed. Därför kan funktionen pushbutton6 i min.m -fil vara för Forward medan din.m -fil kan vara för Backwards, så kom ihåg det. För att veta vilken exakt funktion för din tryckknapp, högerklickar du helt enkelt >> Visa återuppringningar >> återuppringningar så öppnas funktionen för din tryckknapp men för denna instruerbara antar jag att den är densamma som min.

För knappen Anslut till robot:

Under funktionen pushbutton6_Callback (hObject, eventdata, handtag):

funktion pushbutton6_Callback (hObject, eventdata, handtag) global ros_master_ip

global ros_master_port

globalt teleop_topic_name

global robot

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

Denna återuppringning kommer att ställa in variabeln ROS_MASTER_URI genom att sammanlänka ros_master_ip och porten. Då kommer rosinit -kommandot att initiera anslutningen. Efter anslutning kommer det att skapa en utgivare av geometry_msgs/Twist, som kommer att användas för att skicka kommandohastigheten. Ämnesnamnet är namnet vi ger i redigeringsrutan. När anslutningen har lyckats kommer vi att kunna använda knapparna Framåt, Bakåt, Vänster, Höger.

Innan vi lägger till återuppringningar till framåt-, bakåt -push -knapparna måste vi initialisera hastigheterna för linjär och vinkelhastighet.

Därför definierar du nedan _OpeningFcn (hObject, eventdata, handtag, varargin) följande (se fig):

global left_spinVelocity global right_spinVelocity

global forwardVelocity

global backwardVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Obs: alla hastigheter är i rad/s

Nu när de globala variablerna är definierade, låt oss programmera rörelseknapparna.

För framåtknappen:

funktion pushbutton4_Callback (hObject, eventdata, handtag) global velmsg

global robot

globalt teleop_topic_name

global forwardVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

skicka (robot, velmsg);

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

På samma sätt för bakåtknappen:

funktion pushbutton5_Callback (hObject, eventdata, handtag)

globala velmsg

global robot

global backwardVelocity

globalt teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

skicka (robot, velmsg);

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

På samma sätt för den vänstra tryckknappen: funktion pushbutton3_Callback (hObject, eventdata, handtag)

global velmsgglobal robot global left_spinVelocity

globalt teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

skicka (robot, velmsg);

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

På samma sätt för den högra tryckknappen:

global velmsgglobal robot

global right_spinVelocity

globalt teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

skicka (robot, velmsg);

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

När alla återuppringningsfunktioner har lagts till och filerna sparats kan vi testa vår handkontroll.

Steg 8: Konfigurera nätverkskonfiguration på ROS PC (Linux)

Konfigurera nätverkskonfiguration på ROS PC (Linux)
Konfigurera nätverkskonfiguration på ROS PC (Linux)
Konfigurera nätverkskonfiguration på ROS PC (Linux)
Konfigurera nätverkskonfiguration på ROS PC (Linux)

Vi kommer att testa handkontrollen på en ros pc (Linux), vilket kommer att kräva konfigurering av nätverkskonfigurationen. Om du också kör kontrollen på en linux -dator måste du också konfigurera nätverkskonfigurationen där.

Nätverkskonfiguration:

Öppna ditt terminalfönster och skriv gedit.bashrc

Lägg till följande när filen är öppen:

#Robot Machine Configuration

exportera ROS_MASTER_URI = https:// localhost: 11311

#IP -adress för ROS -huvudnod

exportera ROS_HOSTNAME =

exportera ROS_IP =

eko "ROS_HOSTNAME:" $ ROS_HOSTNAME

eko "ROS_IP:" $ ROS_IP

eko "ROS_MASTER_URI:" $ ROS_MASTER_URI

Du måste följa detta steg varje gång på grund av dynamisk IP -tilldelning.

Steg 9: Kör kontrollen

Kör kontrollen
Kör kontrollen

Vi ska testa vår controller på en Turtle bot i Gazebo.

För att installera Gazebo, se

För att installera Turtle bot, se

Öppna mappen där du sparade dina.fig- och.m -filer på MATLAB och tryck på Kör (som visas på bilden). Detta öppnar kontrollen på datorn. Innan du trycker på anslut, se till att din sköldpaddsbotsimulator fungerar.

För att testa din TurtleBot -simulering:

Öppna Terminal på Ros pc och skriv: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Detta öppnar upp en simulering av Turtlebot på den datorn. Ämnesnamnet på TurtleBot är/cmd_vel_mux/input/teleop, som vi redan har angett i applikationen. Skriv in ros pc Ip -adress, port och ämnesnamn i de redigerbara knapparna och tryck på. Anslut till robotknappen. Din sköldpadda bot bör börja röra sig när du trycker framåt, bakåt etc.

För att se de linjära och vinkelhastigheterna:

Öppna en ny terminal och skriv kommandot: $ rostopic echo/cmd_vel_mux/input/teleop

Och där har du din egen Matlab-baserade ROS Robotic Controller. Om du gillade min instruerbara, vänligen ge den en röst om författartävlingen för första gången och dela den med så många människor som möjligt. Tack.

Rekommenderad: