Obsah:

Robotický ovládač ROS založený na Matlabe: 9 krokov
Robotický ovládač ROS založený na Matlabe: 9 krokov

Video: Robotický ovládač ROS založený na Matlabe: 9 krokov

Video: Robotický ovládač ROS založený na Matlabe: 9 krokov
Video: Mathematics with Python! Sequences 2024, Júl
Anonim
Image
Image
Robotický ovládač ROS na báze Matlabu
Robotický ovládač ROS na báze Matlabu

Odmalička som sníval o tom, že budem Iron Man a stále to robím. Iron Man je jednou z tých postáv, ktoré sú realisticky možné a jednoducho povedané, túžim sa raz stať Iron Manom, aj keď sa mi ľudia smejú alebo hovoria, že je to nemožné, pretože „je to nemožné len dovtedy, kým to niekto neurobí“-Arnold Schwarzenegger.

ROS je nový rámec, ktorý sa používa na vývoj komplexných robotických systémov. Medzi jeho aplikácie patrí: Automatizovaný montážny systém, Teleoperácia, Protetické zbrane a ťažké stroje priemyselného sektora.

Výskumníci a inžinieri využívajú ROS na vývoj prototypov, zatiaľ čo rôzni predajcovia ho používajú na vytváranie svojich produktov. Má zložitú architektúru, vďaka ktorej je ťažké ovládať ho chromým mužom. Použitie MATLABu na vytvorenie prepojenia rozhrania s ROS je nový prístup, ktorý môže výskumníkom, inžinierom a predajcom pomôcť pri vývoji robustnejších riešení.

Tento návod je teda o tom, ako vytvoriť robotický ovládač ROS na báze Matlabu. Bude to jeden z mála návodov, ako na to, a medzi niekoľkými inštrukciami ROS. Cieľom tohto projektu je navrhnúť ovládač, ktorý môže ovládať akéhokoľvek robota ROS pripojeného k vašej sieti. Začnime teda!

Kredity za úpravu videa: Ammar Akher, na adrese [email protected]

Zásoby

Na projekt sú potrebné tieto komponenty:

(1) ROS PC/robot

(2) Smerovač

(3) PC s MATLAB (verzia: 2014 alebo vyššia)

Krok 1: Inštalácia všetkého

Všetko sa nastavuje
Všetko sa nastavuje

Na tento pokyn používam Ubuntu 16.04 pre svoj linuxový počítač a ros-kinetiku, aby som sa vyhýbal zmätkom, odporúčam použiť ros kinetiku a ubuntu 16.04, pretože má najlepšiu podporu pre ros-kinetiku. Ďalšie informácie o inštalácii ros kinetiky nájdete na stránke https://wiki.ros.org/kinetic/Installation/Ubuntu. Pre MATLAB si buď kúpite licenciu, alebo si odtiaľ stiahnete trailovú verziu.

Krok 2: Pochopenie fungovania ovládača

Pochopenie fungovania ovládača
Pochopenie fungovania ovládača

Na počítači je spustený robotický ovládač v systéme MATLAB. Ovládač prevezme IP adresu a port ros pc/robota.

Téma ros sa používa na komunikáciu medzi ovládačom a počítačom/počítačom ros, ktorá je tiež považovaná za vstup ovládača. Modem je potrebný na vytvorenie siete LAN (lokálna sieť) a práve ten priradí adresy IP všetkým zariadeniam pripojeným k jej sieti. Preto musia byť ros pc/robot a počítač, na ktorom je spustený ovládač, pripojené k tej istej sieti (tj. K sieti modemu). Takže teraz, keď viete, „ako to funguje“, poďme na to „ako sa to stavia“…

Krok 3: Vytvorenie rozhrania ROS-MATLAB

Vytvorenie rozhrania ROS-MATLAB
Vytvorenie rozhrania ROS-MATLAB
Vytvorenie rozhrania ROS-MATLAB
Vytvorenie rozhrania ROS-MATLAB
Vytvorenie rozhrania ROS-MATLAB
Vytvorenie rozhrania ROS-MATLAB

Rozhranie ROS-MATLAB je užitočným rozhraním pre výskumníkov a študentov na prototypovanie ich algoritmov robotov v programe MATLAB a ich testovanie na robotoch kompatibilných s ROS. Toto rozhranie je možné vytvoriť pomocou súpravy nástrojov systému robotiky v programe MATLAB a náš algoritmus môžeme prototypovať a otestovať na robot s podporou ROS alebo v simulátoroch robotov, ako sú Gazebo a V-REP.

Ak chcete do svojho systému MATLAB nainštalovať súbor nástrojov systému robotiky, jednoducho prejdite na možnosť Doplnok na paneli s nástrojmi a v prieskumníkovi doplnkov vyhľadajte súbor robotických nástrojov. Pomocou súboru robotických nástrojov môžeme publikovať alebo prihlásiť sa na odber témy, napríklad uzla ROS, a môžeme z neho urobiť majstra ROS. Rozhranie MATLAB-ROS má väčšinu funkcií ROS, ktoré by ste mohli potrebovať pre svoje projekty.

Krok 4: Získanie adresy IP

Získanie adresy IP
Získanie adresy IP
Získanie adresy IP
Získanie adresy IP

Aby ovládač fungoval, je nevyhnutné, aby ste poznali IP adresu vášho robota/počítača ROS a počítača, na ktorom je spustený ovládač na serveri MATLAB.

Ak chcete získať adresu IP počítača:

V systéme Windows:

Otvorte príkazový riadok, zadajte príkaz ipconfig a poznamenajte si adresu IPv4

Pre Linux:

Zadajte príkaz ifconfig a poznačte si inet adresu. Teraz, keď máte IP adresu, je čas vytvoriť GUI …

Krok 5: Vytvorte GUI pre ovládač

Vytvorte GUI pre ovládač
Vytvorte GUI pre ovládač
Vytvorte GUI pre ovládač
Vytvorte GUI pre ovládač
Vytvorte GUI pre ovládač
Vytvorte GUI pre ovládač

Ak chcete vytvoriť GUI, otvorte MATLAB a do príkazového okna zadajte príkaz guide. Tým sa otvorí aplikácia sprievodcu, v ktorej budeme vytvárať naše GUI. Na návrh GUI môžete použiť aj návrhára aplikácií v MATLABe.

Vytvoríme celkom 9 tlačidiel (ako je znázornené na obr.):

6 tlačidiel: dopredu, dozadu, doľava, doprava, pripojenie k robotu, odpojenie

3 editovateľné tlačidlá: Ros pc ip, port a názov témy.

Editovateľné tlačidlá sú tlačidlá, ktoré použijú ako vstup IP i ROS počítača, jeho port a názov témy. Názov témy je to, cez čo komunikujú ovládač MATLAB a robot/počítač ROS. Ak chcete upraviť reťazec na editovateľnom tlačidle, kliknite pravým tlačidlom myši na tlačidlo >> prejdite na položku Vlastnosti inšpektora >> Reťazec a upravte text tlačidla.

Akonáhle je vaše GUI dokončené, môžete tlačidlá naprogramovať. Tu začína skutočná zábava …

Krok 6: Programovanie tlačidiel upraviteľných v GUI

Programovanie tlačidiel upraviteľných v GUI
Programovanie tlačidiel upraviteľných v GUI
Programovanie tlačidiel upraviteľných v GUI
Programovanie tlačidiel upraviteľných v GUI
Programovanie tlačidiel upraviteľných v GUI
Programovanie tlačidiel upraviteľných v GUI
Programovanie tlačidiel upraviteľných v GUI
Programovanie tlačidiel upraviteľných v GUI

GUI je uložené ako súbor.fig, ale funkcie kódu/spätného volania sú uložené vo formáte.m. Súbor.m obsahuje kód pre všetky vaše tlačidlá. Ak chcete k svojim tlačidlám pridať funkcie spätného volania, kliknite pravým tlačidlom myši na tlačidlo> > Zobraziť spätné volania >> spätné volanie. Tým sa otvorí súbor.m pre vaše grafické rozhranie, kde je definované konkrétne tlačidlo.

Prvé spätné volanie, ktoré ideme kódovať, je pre tlačidlo ROS IP, ktoré je možné upravovať. Pod funkciou edit1_Callback napíšte nasledujúci kód:

funkcia edit1_Callback (hObject, eventdata, handle)

globálny ros_master_ip

ros_master_ip = get (hObject, 'String')

Tu je funkcia definovaná ako edit1_Callback, ktorá odkazuje na prvé upraviteľné tlačidlo. Keď do tohto upraviteľného tlačidla zadáme IP adresu zo siete ROS, uloží IP adresu ako reťazec do globálnej premennej nazývanej ros_master_ip.

Potom tesne pod _OpeningFcn (hObject, eventdata, handle, varargin) definujte nasledujúce (pozri obr.):

globálny ros_master_ip

globálny ros_master_port

globálny názov teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Práve ste globálne naprogramovali napevno ros-pc ip (ros_master_ip), port (ros_master_port) a názov témy Teleop. Čo to robí, je, že ak necháte editovateľné tlačidlá prázdne, tieto preddefinované hodnoty sa použijú pri pripojení.

Nasledujúce spätné volanie, ktoré ideme kódovať, je pre tlačidlo Upraviteľné portom.

Pod funkciou edit2_Callback napíšte nasledujúci kód:

funkcia edit2_Callback (hObject, eventdata, handle)

globálny ros_master_port

ros_master_port = get (hObject, 'String')

Tu je funkcia definovaná ako edit2_Callback, ktorá odkazuje na druhé upraviteľné tlačidlo. Keď sem zadáme port ros pc/robota zo siete ROS v tomto editovateľnom tlačidle, uloží port ako reťazec do globálnej premennej nazývanej ros_master_port.

Podobne ďalšie spätné volanie, ktoré ideme kódovať, je pre tlačidlo na úpravu názvu témy.

Pod funkciou edit3_Callback napíšte nasledujúci kód:

funkcia edit3_Callback (hObject, eventdata, handle)

globálny názov teleop_topic_name

teleop_topic_name = get (hObject, 'String')

Podobne ako ros_master_port, aj toto je uložené ako reťazec v globálnej premennej.

Ďalej sa pozrieme na funkcie spätného volania tlačidiel …

Krok 7: Programovanie tlačidiel GUI

Programovanie tlačidiel GUI
Programovanie tlačidiel GUI
Programovanie tlačidiel GUI
Programovanie tlačidiel GUI

Tlačidlá, ktoré sme vytvorili predtým, budú tie, ktoré použijeme na pohyb, pripojenie a odpojenie robota od ovládača. Spätné volania tlačidiel sú definované nasledovne:

napr. funkcia pushbutton6_Callback (hObject, eventdata, handle)

Poznámka: v závislosti od poradia, v akom ste vytvorili svoje tlačidlá, budú zodpovedajúcim spôsobom očíslované. Preto funkcia pushbutton6 v mojom súbore.m môže byť pre Forward, zatiaľ čo vo vašom súbore.m môže byť pre Backwards, takže to majte na pamäti. Ak chcete vedieť, akú presnú funkciu má vaše tlačidlo, kliknite pravým tlačidlom myši na položku >> Zobraziť spätné volania >> Spätné volania a otvorí sa funkcia pre vaše tlačidlo, ale pre tento pokyn predpokladám, že je rovnaký ako môj.

Pre tlačidlo Pripojiť k robotovi:

Pod funkciou pushbutton6_Callback (hObject, eventdata, handle):

function pushbutton6_Callback (hObject, eventdata, handle) global ros_master_ip

globálny ros_master_port

globálny názov teleop_topic_name

globálny robot

globálna 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);

Toto spätné volanie nastaví premennú ROS_MASTER_URI zreťazením ros_master_ip a portu. Potom príkaz rosinit inicializuje pripojenie. Po pripojení vytvorí vydavateľa geometry_msgs/Twist, ktorý bude slúžiť na odosielanie príkazu velocity. Názov témy je názov, ktorý zadáme do poľa na úpravu. Akonáhle bude pripojenie úspešné, budeme môcť ovládať tlačidlá dopredu, dozadu, doľava, doprava.

Pred pridaním spätných volaní na tlačidlá Vpred, Vzad musíme inicializovať rýchlosti lineárnej a uhlovej rýchlosti.

Preto pod _OpeningFcn (hObject, eventdata, handle, varargin) definujte nasledujúce (pozri obr.):

global left_spinVelocity global right_spinVelocity

globálna forwardová rýchlosť

global backwardVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Poznámka: všetky rýchlosti sú v rad/s

Teraz, keď sú definované globálne premenné, naprogramujme pohybové tlačidlá.

Pre tlačidlo Vpred:

funkcia pushbutton4_Callback (hObject, eventdata, handle) globálna velmsg

globálny robot

globálny názov teleop_topic_name

globálna forwardová rýchlosť

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

odoslať (robot, velmsg);

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

Podobne pre tlačidlo Späť:

funkcia pushbutton5_Callback (hObject, eventdata, handle)

globálna velmsg

globálny robot

global backwardVelocity

globálny názov teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

odoslať (robot, velmsg);

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

Podobne pre ľavé tlačidlo: funkcia pushbutton3_Callback (hObject, data udalosti, úchyty)

global velmsgglobal robot global left_spinVelocity

globálny názov teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

odoslať (robot, velmsg);

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

Podobne pre pravé tlačidlo:

globálny veľmsgglobal robot

global right_spinVelocity

globálny názov teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

odoslať (robot, velmsg);

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

Akonáhle boli pridané všetky funkcie spätného volania a uložené súbory, môžeme otestovať náš ovládač.

Krok 8: Nastavenie konfigurácie siete na počítači ROS PC (Linux)

Nastavenie konfigurácie siete na počítači ROS PC (Linux)
Nastavenie konfigurácie siete na počítači ROS PC (Linux)
Nastavenie konfigurácie siete na počítači ROS PC (Linux)
Nastavenie konfigurácie siete na počítači ROS PC (Linux)

Testujeme ovládač na počítači ros pc (Linux), ktoré bude vyžadovať nastavenie konfigurácie siete. Ak ovládač používate aj na počítači so systémom Linux, budete musieť nastaviť konfiguráciu siete aj tam.

Konfigurácia siete:

Otvorte okno terminálu a zadajte príkaz gedit.bashrc

Akonáhle je súbor otvorený, pridajte nasledujúce:

#Konfigurácia robota

export ROS_MASTER_URI = https:// localhost: 11311

#IP adresa hlavného uzla ROS

exportovať ROS_HOSTNAME =

exportovať ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Tento krok musíte vykonať vždy kvôli dynamickému priradeniu IP.

Krok 9: Spustite ovládač

Spustite ovládač
Spustite ovládač

Ideme otestovať náš ovládač na korytnačom topánkovi v altánku.

Ak chcete nainštalovať Gazebo, pozrite sa na

Ak chcete nainštalovať Turtle bot, pozrite sa na

Otvorte priečinok, do ktorého ste uložili súbory.fig a.m v MATLABe, a kliknite na položku Spustiť (ako je znázornené na obrázku). Tým sa otvorí ovládač v počítači. Pred stlačením pripojenia sa uistite, že váš simulátor robotov korytnačiek funguje.

Ak chcete otestovať svoju simuláciu TurtleBot:

Otvorte terminál na počítači Ros a zadajte: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Na tomto počítači sa otvorí simulácia Turtlebot. Názov témy programu TurtleBot je/cmd_vel_mux/input/teleop, ktorý sme už poskytli v aplikácii. Do upraviteľných tlačidiel zadajte rosp Ip adresu, port a názov témy a stlačte tlačidlo. Pripojiť k robotu. Váš korytnačí robot by sa mal začať pohybovať, keď stlačíte dopredu, dozadu atď.

Ak chcete zobraziť lineárne a uhlové rýchlosti:

Otvorte nový terminál a zadajte príkaz: $ rostopic echo/cmd_vel_mux/input/teleop

A tu máte svoj vlastný robotický ovládač ROS založený na Matlabe. Ak sa vám páčil môj návod, dajte mu prosím hlas v Prvotnej autorskej súťaži a zdieľajte ho s čo najväčším počtom ľudí. Ďakujem.

Odporúča: