Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Få alt opsat
- Trin 2: Forståelse af hvordan controlleren fungerer
- Trin 3: Oprettelse af et ROS-MATLAB-interface
- Trin 4: Hentning af IP -adressen
- Trin 5: Opret en GUI til controlleren
- Trin 6: Programmering af de redigerbare GUI -knapper
- Trin 7: Programmering af GUI -trykknapper
- Trin 8: Opsætning af netværkskonfiguration på ROS PC (Linux)
- Trin 9: Kør controlleren
Video: Matlab-baseret ROS Robotic Controller: 9 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
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
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
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
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
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
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
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
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)
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
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:
Robotic Arm Game - Smartphone Controller: 6 trin
Robotic Arm Game - Smartphone Controller: Hej! Her er et sjovt sommerspil: Robotarmen styret af Smartphone !! Som du kan se på videoen, kan du styre armen med nogle joysticks på din smartphone. Du kan også gemme et mønster, at robotten vil reproducere i en loop for at
ROS MoveIt Robotic Arm Part 2: Robot Controller: 6 trin
ROS MoveIt Robotic Arm Part 2: Robot Controller: https://github.com/AIWintermuteAI/ros-moveit-arm.git I den forrige del af artiklen har vi oprettet URDF- og XACRO-filer til vores robotarm og lanceret RVIZ for at kontrollere vores robotarm i simuleret miljø. Denne gang gør vi det med rea
YABC - Yet Another Blynk Controller - IoT Cloud Temperature and Humidity Controller, ESP8266: 4 trin
YABC - Endnu en Blynk Controller - IoT Cloud Temperature and Humidity Controller, ESP8266: Hej Makers, jeg begyndte for nylig at dyrke svampe derhjemme, østers svampe, men jeg har allerede 3x af denne controllere derhjemme til fermenteringstemperaturkontrol til mit hjemmebrygg, kone gør også denne Kombucha -ting nu og som termostat til varme
MATLAB Robotic Mixologist: 4 trin (med billeder)
MATLAB Robotic Mixologist: Har du nogensinde ønsket at få dine drinks blandet perfekt til dig på få sekunder? Se ikke længere, Robotic Mixologist er her for at tage den tid, det tager at røre i dine drikkevarer, væk. Dette projekt bruger RobotGeek Snapper Arm til at fungere som din
NES Controller Shuffle (Nintendo Controller MP3, V3.0): 5 trin (med billeder)
NES Controller Shuffle (Nintendo Controller MP3, V3.0): Jeg rippede helt ryan97128 af hans design til Nintendo Controller MP3, version 2.0, og jeg hører, at han fik ideen fra den kloge Morte_Moya, så jeg kan ikke tage æren for alt deres geni. Jeg ville bare tilføje bekvemmeligheden og genoplade