Inhoudsopgave:
- Benodigdheden
- Stap 1: Alles instellen
- Stap 2: Begrijpen hoe de controller werkt
- Stap 3: Een ROS-MATLAB-interface maken
- Stap 4: Het IP-adres verkrijgen
- Stap 5: Maak een GUI voor de controller
- Stap 6: Programmeren van de GUI bewerkbare knoppen
- Stap 7: De GUI-drukknoppen programmeren
- Stap 8: Netwerkconfiguratie instellen op ROS PC (Linux)
- Stap 9: Voer de controller uit
Video: Op Matlab gebaseerde ROS Robotic Controller - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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
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
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
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
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
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
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 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)
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
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:
Web ?gebaseerde Arduino-simulator van Wokwi-2020?: 5 stappen
Web-gebaseerde Arduino-simulator van Wokwi-2020: Wokwi Arduino-simulator draait op het AVR8js-platform. Het is een webgebaseerde Arduino Simulator. Arduino Simulator draait op een webbrowser. vandaar dat dit meer aandacht krijgt en eerlijk gezegd heeft dit veel positieve punten in vergelijking met andere beschikbare simulators
Op Arduino gebaseerde telefoon (prototype): 7 stappen
Op Arduino gebaseerde telefoon (prototype): Hallo allemaal, vandaag gaan we in deze instructable kijken naar een op arduino gebaseerde telefoon. Dit is een telefoon is een prototype, het is nog in ontwikkeling. De broncode is opensource, iedereen kan de code wijzigen. Functies in telefoon:1. Muziek 2. Video's 3
Op LoRa gebaseerde afstandsbediening - Apparaten bedienen vanaf grote afstanden: 8 stappen
Op LoRa gebaseerde afstandsbediening | Bedien apparaten van grote afstanden: Hé, wat is er, jongens! Akarsh hier van CETech. In dit project gaan we een afstandsbediening maken die kan worden gebruikt om een verscheidenheid aan instrumenten te bedienen, zoals LED's, motoren of als we het hebben over ons dagelijks leven, kunnen we onze huisapplian
Hoe op IoT gebaseerde domotica te maken met NodeMCU-sensoren Besturingsrelais 14 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe op IoT gebaseerde huisautomatisering te maken met NodeMCU-sensoren Besturingsrelais: In dit op IoT gebaseerde project heb ik huisautomatisering gemaakt met Blynk en NodeMCU besturingsrelaismodule met realtime feedback. In de handmatige modus kan deze relaismodule worden bediend vanaf mobiel of smartphone en handmatige schakelaar. In de automatische modus is deze slimme
Op Arduino gebaseerde contactloze infraroodthermometer - Op IR gebaseerde thermometer met Arduino: 4 stappen
Arduino-gebaseerde contactloze infraroodthermometer | IR-gebaseerde thermometer met Arduino: Hallo allemaal, in deze instructables zullen we een contactloze thermometer maken met behulp van Arduino. Omdat de temperatuur van de vloeistof / vaste stof soms veel te hoog of te laag is en dan is het moeilijk om er contact mee te maken en de temperatuur dan in die sc