Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Få alt satt opp
- Trinn 2: Forstå hvordan kontrolleren fungerer
- Trinn 3: Opprette et ROS-MATLAB-grensesnitt
- Trinn 4: Få IP -adressen
- Trinn 5: Lag en GUI for kontrolleren
- Trinn 6: Programmering av de redigerbare GUI -knappene
- Trinn 7: Programmering av GUI -trykknapper
- Trinn 8: Konfigurere nettverkskonfigurasjon på ROS PC (Linux)
- Trinn 9: Kjør kontrolleren
Video: Matlab-basert ROS Robotic Controller: 9 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
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
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
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
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
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
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
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
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)
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
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:
Robotic Arm Game - Smartphone Controller: 6 trinn
Robotic Arm Game - Smartphone Controller: Hei! Her er et morsomt sommerspill: Robotic Arm styrt av Smartphone !! Som du kan se på videoen, kan du styre armen med noen joysticks på smarttelefonen din. Du kan også lagre et mønster, at roboten vil reprodusere i en loop, for å
ROS MoveIt Robotic Arm Del 2: Robotkontroller: 6 trinn
ROS MoveIt Robotic Arm Part 2: Robot Controller: https://github.com/AIWintermuteAI/ros-moveit-arm.git I forrige del av artikkelen har vi opprettet URDF- og XACRO-filer for vår robotarm og lansert RVIZ for å kontrollere vår robotarm i simulert miljø. Denne gangen gjør vi det med rea
YABC - Yet Another Blynk Controller - IoT Cloud Temperature and Humidity Controller, ESP8266: 4 trinn
YABC - Yet Another Blynk Controller - IoT Cloud Temperature and Humidity Controller, ESP8266: Hi Makers, jeg begynte nylig å dyrke sopp hjemme, østerssopp, men jeg har allerede 3x av denne kontrollerne hjemme for fermenteringstemperaturkontroll for hjemmebrygget mitt, kone gjør også denne Kombucha -tingen nå, og som termostat for varme
MATLAB Robotic Mixologist: 4 trinn (med bilder)
MATLAB Robotic Mixologist: Har du noen gang ønsket å få drinkene dine blandet perfekt for deg på få sekunder? Ikke let lenger Robotic Mixologist er her for å ta bort den tiden det tar å røre i drinkene dine. Dette prosjektet bruker RobotGeek Snapper Arm for å fungere som din
NES Controller Shuffle (Nintendo Controller MP3, V3.0): 5 trinn (med bilder)
NES Controller Shuffle (Nintendo Controller MP3, V3.0): Jeg dratt fullstendig av ryan97128 på designet hans for Nintendo Controller MP3, versjon 2.0, og jeg hører at han fikk ideen fra den kloke Morte_Moya, så jeg kan ikke ta æren for alle deres genier. Jeg ville bare legge til bekvemmeligheten og lade opp