Innehållsförteckning:
- Tillbehör
- Steg 1: Få allt inställt
- Steg 2: Förstå hur styrenheten fungerar
- Steg 3: Skapa ett ROS-MATLAB-gränssnitt
- Steg 4: Skaffa IP -adressen
- Steg 5: Skapa ett GUI för handkontrollen
- Steg 6: Programmering av de redigerbara GUI -knapparna
- Steg 7: Programmering av GUI -tryckknappar
- Steg 8: Konfigurera nätverkskonfiguration på ROS PC (Linux)
- Steg 9: Kör kontrollen
Video: Matlab-baserad ROS robotstyrenhet: 9 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:43
Ä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
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
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
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
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
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
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
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)
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
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:
Så här installerar du ROS: 6 steg
Så här installerar du ROS: I den här självstudien lär du dig hur du installerar ROS. Robot Operating System (ROS) är öppen källkod för robotik, och du kommer att använda den för att styra din Arduino. Om du är intresserad av att lära dig mer besök: http://wiki.ros.org/ROS/Introduction
ROS Melodic på Raspberry Pi 4 [Debian Buster] + RPLIDAR A1M8: 6 steg
ROS Melodic på Raspberry Pi 4 [Debian Buster] + RPLIDAR A1M8: Denna artikel kommer att behandla processen att installera ROS Melodic Morenia på Raspberry Pi 4 som kör den senaste Debian Buster och hur man använder RPLIDAR A1M8 med vår installation. Sedan Debian Buster släpptes officiellt för bara några veckor sedan (för närvarande
Installera ROS Kinetic, TurtleBot3, Raspicam på Raspberry Pi 4b: 5 steg
Installera ROS Kinetic, TurtleBot3, Raspicam på Raspberry Pi 4b: TurtleBot3 Burger levereras med Raspberry Pi 3 B/B+ och stöder inte den nya (från och med 9/2019) Raspberry Pi 4b. Följ stegen nedan för att få TurtleBot3 att fungera på Raspberry Pi 4b, inklusive att bygga ROS Kinetic från källor på Raspberry Pi 4b Raspbian
RGB-D SLAM Med Kinect på Raspberry Pi 4 [Buster] ROS Melodic: 6 steg
RGB-D SLAM Med Kinect på Raspberry Pi 4 [Buster] ROS Melodic: Förra året skrev jag en artikel om att bygga och installera ROS Melodic på nya (vid den tiden) Raspberry Pi med Debian Buster OS. Artikeln har fått mycket uppmärksamhet både här på Instructables och på andra plattformar. Jag är väldigt glad att jag hjälper
N64-inspirerad robotstyrenhet (Arduino + NRF24L01): 4 steg
N64-inspirerad robotstyrenhet (Arduino + NRF24L01): Sedan mitt första robotprojekt använder jag spelkontroller för att utföra kommandon och funktioner. Detta är verkligen ett inflytande från mina gamer -dagar. Jag gjorde redan projekt med PS2, Xbox 360 -kontroller … men det kom en tid då jag hade några gränssnittsproblem