Inhoudsopgave:

Op Matlab gebaseerde ROS Robotic Controller - Ajarnpa
Op Matlab gebaseerde ROS Robotic Controller - Ajarnpa

Video: Op Matlab gebaseerde ROS Robotic Controller - Ajarnpa

Video: Op Matlab gebaseerde ROS Robotic Controller - Ajarnpa
Video: Webinar: KUKA.ForceTorqueControl and KUKA.RobotSensorInterface 2024, November
Anonim
Image
Image
Op Matlab gebaseerde ROS Robotic Controller
Op Matlab gebaseerde ROS Robotic Controller

Sinds ik een kind was, heb ik er altijd van gedroomd Iron Man te zijn en dat doe ik nog steeds. Iron Man is een van die personages die realistisch mogelijk is en simpel gezegd streef ik ernaar om ooit Iron Man te worden, zelfs als mensen me uitlachen of zeggen dat het onmogelijk is omdat "het alleen onmogelijk is totdat iemand het doet" - Arnold Schwarzenegger.

ROS is een opkomend raamwerk dat wordt gebruikt voor het ontwikkelen van complexe robotsystemen. De toepassingen zijn onder meer: geautomatiseerd montagesysteem, teleoperatie, prothetische armen en zware machines van de industriële sector.

Onderzoekers en ingenieurs gebruiken ROS voor het ontwikkelen van de prototypes, terwijl verschillende leveranciers het gebruiken voor het maken van hun producten. Het heeft een complexe architectuur die het moeilijk maakt om door een lamme man te worden beheerd. Het gebruik van MATLAB voor het maken van de interfacekoppeling met ROS is een nieuwe benadering die onderzoekers, ingenieurs en leveranciers kan helpen bij het ontwikkelen van robuustere oplossingen.

Dus deze instructable gaat over het maken van een op Matlab gebaseerde ROS Robotic Controller, dit wordt een van de weinige tutorials hierover die er zijn en een van de weinige ROS-instructables. Het doel van dit project is om een controller te ontwerpen die elke ROS-robot kan aansturen die op uw netwerk is aangesloten. Dus laten we beginnen!

videobewerkingscredits: Ammar Akher, op [email protected]

Benodigdheden

Voor het project zijn de volgende onderdelen nodig:

(1) ROS-pc/robot

(2) Router

(3) PC met MATLAB (versie: 2014 of hoger)

Stap 1: Alles instellen

Alles instellen
Alles instellen

Voor deze instructable gebruik ik Ubuntu 16.04 voor voor mijn Linux-pc en ros-kinetic, dus om verwarring te voorkomen, raad ik aan om ros kinetic en ubuntu 16.04 te gebruiken, omdat het de beste ondersteuning voor ros-kinetic heeft. Ga voor meer informatie over het installeren van ros kinetic naar https://wiki.ros.org/kinetic/Installation/Ubuntu. Voor MATLAB koop je een licentie of download je hier een trailversie.

Stap 2: Begrijpen hoe de controller werkt

Begrijpen hoe de controller werkt
Begrijpen hoe de controller werkt

Een pc draait de robotbesturing op MATLAB. De controller neemt het IP-adres en de poort van de ros pc/robot in.

Een ros-topic wordt gebruikt om te communiceren tussen de controller en de ros pc/robot, die ook als input wordt genomen door de controller. De modem is vereist om een LAN (Local Area Network) te creëren en wijst de IP-adressen toe aan alle apparaten die op het netwerk zijn aangesloten. Daarom moeten de ros-pc/robot en de pc waarop de controller draait, beide zijn aangesloten op hetzelfde netwerk (dwz het netwerk van de modem). Dus nu je weet "hoe het werkt", laten we naar de "hoe het is gebouwd" gaan…

Stap 3: Een ROS-MATLAB-interface maken

Een ROS-MATLAB-interface maken
Een ROS-MATLAB-interface maken
Een ROS-MATLAB-interface maken
Een ROS-MATLAB-interface maken
Een ROS-MATLAB-interface maken
Een ROS-MATLAB-interface maken

De ROS-MATLABInterface is een nuttige interface voor onderzoekers en studenten voor het prototypen van hun robotalgoritmen in MATLAB en het testen ervan op ROS-compatibele robots. een ROS-compatibele robot of in robotsimulators zoals Gazebo en V-REP.

Om robotica-systeemtoolbox op uw MATLAB te installeren, gaat u naar de optie Add-on op de werkbalk en zoekt u naar robotic toolbox in de add-onverkenner. Met behulp van de robottoolbox kunnen we een onderwerp publiceren of erop abonneren, zoals een ROS-knooppunt, en we kunnen er een ROS-master van maken. De MATLAB-ROS-interface heeft de meeste ROS-functionaliteiten die u voor uw projecten nodig zou kunnen hebben.

Stap 4: Het IP-adres verkrijgen

Het IP-adres verkrijgen
Het IP-adres verkrijgen
Het IP-adres verkrijgen
Het IP-adres verkrijgen

Om de controller te laten werken, is het noodzakelijk dat u het ip-adres van uw ROS-robot/pc en de pc waarop de controller op MATLAB draait, weet.

Om het ip van je pc te krijgen:

Op Windows:

Open de opdrachtprompt en typ de opdracht ipconfig en noteer het IPv4-adres

Voor Linux:

Typ de opdracht ifconfig en noteer het inet-adres. Nu je het ip-adres hebt, is het tijd om de GUI te bouwen…

Stap 5: Maak een GUI voor de controller

Maak een GUI voor de controller
Maak een GUI voor de controller
Maak een GUI voor de controller
Maak een GUI voor de controller
Maak een GUI voor de controller
Maak een GUI voor de controller

Om de GUI te maken, opent u MATLAB en typt u guide in het opdrachtvenster. Dit zal de gids-app openen, maar we zullen onze GUI maken. U kunt ook de app-ontwerper op MATLAB gebruiken om uw GUI te ontwerpen.

We zullen in totaal 9 knoppen maken (zoals weergegeven in fig):

6 drukknoppen: vooruit, achteruit, links, rechts, verbinding maken met robot, verbinding verbreken

3 bewerkbare knoppen: Ros pc ip, poort en Topic naam.

De bewerkbare-knoppen zijn de knoppen die het IP-adres van de ROS-pc, de poort en de Topic-naam als invoer gebruiken. De Topic-naam is waar de MATLAB-controller en de ROS-robot/pc doorheen communiceren. Om de tekenreeks op de bewerkbare knop te bewerken, klikt u met de rechtermuisknop op de knop >> ga naar Inspector-eigenschappen >>String en bewerk de tekst van de knop.

Zodra uw GUI voltooid is, kunt u de knoppen programmeren. Dit is waar het echte plezier begint…

Stap 6: Programmeren van de GUI bewerkbare knoppen

Programmeren van de GUI bewerkbare knoppen
Programmeren van de GUI bewerkbare knoppen
Programmeren van de GUI bewerkbare knoppen
Programmeren van de GUI bewerkbare knoppen
Programmeren van de GUI bewerkbare knoppen
Programmeren van de GUI bewerkbare knoppen
Programmeren van de GUI bewerkbare knoppen
Programmeren van de GUI bewerkbare knoppen

De GUI wordt opgeslagen als een.fig-bestand, maar de code/terugbelfuncties worden opgeslagen in.m-indeling. Het.m-bestand bevat de code voor al uw knoppen. Om terugbelfuncties aan uw knoppen toe te voegen, klikt u met de rechtermuisknop op de knop > >Terugbellen bekijken>>terugbellen. Dit opent het.m-bestand voor uw GUI waar die specifieke knop is gedefinieerd.

De eerste callback die we gaan coderen is voor de ROS IP bewerkbare knop. Schrijf onder functie edit1_Callback de volgende code:

functie edit1_Callback(hObject, eventdata, handles)

globaal ros_master_ip

ros_master_ip = get(hObject, 'String')

Hier wordt de functie gedefinieerd als edit1_Callback, wat verwijst naar de eerste bewerkbare knop. Wanneer we een IP-adres van het ROS-netwerk invoeren in deze bewerkbare knop, zal het het IP-adres als een string opslaan in een globale variabele genaamd ros_master_ip.

Definieer dan net onder _OpeningFcn(hObject, eventdata, handles, varargin) het volgende (zie fig):

globaal ros_master_ip

globale ros_master_port

global teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Je hebt zojuist de ros-pc ip (ros_master_ip), port (ros_master_port) en de Teleop Topic-naam globaal hard gecodeerd. Wat dit doet, is dat als u de bewerkbare knoppen leeg laat, deze vooraf gedefinieerde waarden worden gebruikt wanneer u verbinding maakt.

De volgende callback die we gaan coderen, is voor de bewerkbare knop Port.

Schrijf onder functie edit2_Callback de volgende code:

functie edit2_Callback(hObject, eventdata, handles)

globale ros_master_port

ros_master_port = get(hObject, 'String')

Hier wordt de functie gedefinieerd als edit2_Callback, wat verwijst naar de tweede bewerkbare knop. Wanneer we de poort van de ros pc/robot hier invoeren vanuit het ROS-netwerk in deze bewerkbare knop, zal het de poort opslaan als een string in een globale variabele genaamd ros_master_port.

Evenzo is de volgende callback die we gaan coderen voor de bewerkbare knop Onderwerpnaam.

Schrijf onder functie edit3_Callback de volgende code:

functie edit3_Callback(hObject, eventdata, handles)

global teleop_topic_name

teleop_topic_name = get(hObject, 'String')

Net als bij ros_master_port, wordt dit ook opgeslagen als string in een globale variabele.

Vervolgens gaan we kijken naar de terugbelfuncties voor de drukknoppen…

Stap 7: De GUI-drukknoppen programmeren

De GUI-drukknoppen programmeren
De GUI-drukknoppen programmeren
De GUI-drukknoppen programmeren
De GUI-drukknoppen programmeren

De drukknoppen die we eerder hebben gemaakt, zullen we gebruiken om de robot te verplaatsen, aan te sluiten en los te koppelen van de controller. De drukknop-callbacks zijn als volgt gedefinieerd:

bijv. functie drukknop6_Callback(hObject, eventdata, handles)

Opmerking: afhankelijk van de volgorde waarin u uw drukknoppen hebt gemaakt, worden ze overeenkomstig genummerd. Daarom kan de functie pushbutton6 in mijn.m-bestand voor Forward zijn, terwijl het in uw.m-bestand voor Backwards is, dus houd daar rekening mee. Om te weten welke de exacte functie voor uw drukknop is, klikt u gewoon met de rechtermuisknop>>Bekijk callbacks>>callbacks en het zal de functie voor uw drukknop openen, maar voor deze instructable neem ik aan dat het hetzelfde is als de mijne.

Voor de knop Verbinden met robot:

Onder de functie pushbutton6_Callback(hObject, eventdata, handles):

functie pushbutton6_Callback(hObject, eventdata, handles) global ros_master_ip

globale ros_master_port

global teleop_topic_name

wereldwijde robot

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

Deze callback zal de ROS_MASTER_URI variabele instellen door ros_master_ip en de poort samen te voegen. Vervolgens zal het rosinit commando de verbinding initialiseren. Na het verbinden zal het een uitgever maken van geometrie_msgs/Twist, die zal worden gebruikt voor het verzenden van de opdrachtsnelheid. De onderwerpnaam is de naam die we in het bewerkingsvak geven. Zodra de verbinding tot stand is gebracht, kunnen we de knoppen Vooruit, Achteruit, Links en Rechts bedienen.

Voordat we callbacks toevoegen aan de knoppen Vooruit, Achteruit, moeten we de snelheden van lineaire en hoeksnelheid initialiseren.

Daarom definieert u onder _OpeningFcn(hObject, eventdata, handles, varargin) het volgende (zie fig):

global left_spinVelocity global right_spinVelocity

global forward Velocity

globale achterwaartse snelheid

left_spinVelocity = 2;

right_spinVelocity = -2;

voorwaartse snelheid = 3;

achteruitVelocity = -3;

Let op: alle snelheden zijn in rad/s

Nu de globale variabelen gedefinieerd zijn, gaan we de bewegingsknoppen programmeren.

Voor de Vooruit-drukknop:

functie pushbutton4_Callback(hObject, eventdata, handles) global velmsg

wereldwijde robot

global teleop_topic_name

global forward Velocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

sturen (robot, velmsg);

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

Hetzelfde geldt voor de achterwaartse drukknop:

functie drukknop5_Callback(hObject, eventdata, handles)

globaal velmsg

wereldwijde robot

globale achterwaartse snelheid

global teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = achterwaartse Velocity;

sturen (robot, velmsg);

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

Hetzelfde geldt voor de linker drukknop: functie pushbutton3_Callback(hObject, eventdata, handles)

global velmsggglobal robot global left_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Lineair. X = 0;

sturen (robot, velmsg);

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

Hetzelfde geldt voor de rechter drukknop:

wereldwijde velmsgglobal robot

global right_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Lineair. X = 0;

sturen (robot, velmsg);

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

Nadat alle callback-functies zijn toegevoegd en de bestanden zijn opgeslagen, kunnen we onze controller testen.

Stap 8: Netwerkconfiguratie instellen op ROS PC (Linux)

Netwerkconfiguratie instellen op ROS PC (Linux)
Netwerkconfiguratie instellen op ROS PC (Linux)
Netwerkconfiguratie instellen op ROS PC (Linux)
Netwerkconfiguratie instellen op ROS PC (Linux)

We gaan de controller testen op een ros-pc (Linux), waarvoor de netwerkconfiguratie moet worden ingesteld. Als je de controller ook op een linux-pc gebruikt, moet je de netwerkconfiguratie daar ook instellen.

Netwerk configuratie:

Open uw terminalvenster en typ gedit.bashrc

Zodra het bestand is geopend, voegt u het volgende toe:

#Robotmachineconfiguratie

export ROS_MASTER_URI=https://localhost:11311

#IP-adres van ROS-masterknooppunt

export ROS_HOSTNAME=

exporteren ROS_IP=

echo "ROS_HOSTNAME: " $ROS_HOSTNAME

echo "ROS_IP:"$ROS_IP

echo "ROS_MASTER_URI:"$ROS_MASTER_URI

U moet deze stap elke keer volgen vanwege dynamische IP-toewijzing.

Stap 9: Voer de controller uit

Voer de controller uit
Voer de controller uit

We gaan onze controller testen op een Turtle-bot in Gazebo.

Raadpleeg https://gazebosim.org/tutorials?tut=install_ubuntu&cat=install om Gazebo te installeren

Ga naar https://yainnoware.blogspot.com/2018/09/install-turtlebot-on-ros-kinetic-ubuntu.html om Turtle-bot te installeren

Open de map waarin u uw.fig- en.m-bestanden op MATLAB hebt opgeslagen en druk op Uitvoeren (zoals weergegeven in de afbeelding). Hierdoor wordt de controller op de pc geopend. Voordat je op verbinden drukt, moet je ervoor zorgen dat je turtle bot-simulator werkt.

Je TurtleBot-simulatie testen:

Open Terminal op Ros pc en typ: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Dit opent een simulatie van Turtlebot op die pc. De onderwerpnaam van TurtleBot is /cmd_vel_mux/input/teleop, die we al in de toepassing hebben verstrekt. Typ het ros pc Ip-adres, poort en onderwerpnaam in de bewerkbare knoppen en druk op de knop Verbinden met robot. Je schildpadbot zou moeten beginnen te bewegen wanneer je op Vooruit, Achteruit enz. drukt.

Om de lineaire en hoeksnelheden te bekijken:

Open een nieuwe terminal en typ het commando: $ rostopic echo /cmd_vel_mux/input/teleop

En daar heb je je eigen op Matlab gebaseerde ROS Robotic Controller. Als je mijn instructable leuk vond, geef het dan een stem op de First Time Author Contest en deel het met zoveel mogelijk mensen. Bedankt.

Aanbevolen: