Obsah:

Robotický ovladač ROS založený na Matlabu: 9 kroků
Robotický ovladač ROS založený na Matlabu: 9 kroků

Video: Robotický ovladač ROS založený na Matlabu: 9 kroků

Video: Robotický ovladač ROS založený na Matlabu: 9 kroků
Video: Test, recenze robotický vysavač Niceboy ION Charles i8 2024, Červenec
Anonim
Image
Image
Robotický ovladač ROS založený na Matlabu
Robotický ovladač ROS založený na Matlabu

Od dětství jsem vždy snil o tom, že budu Iron Man, a stále to dělám. Iron Man je jednou z těch postav, které jsou reálně možné a jednoduše řečeno, toužím se jednou stát Iron Manem, i když se mi lidé smějí nebo říkají, že je to nemožné, protože „je to nemožné, dokud to někdo neudělá“-Arnold Schwarzenegger.

ROS je rozvíjející se rámec, který se používá pro vývoj složitých robotických systémů. Mezi jeho aplikace patří: Automatizovaný montážní systém, Teleoperace, Protetické zbraně a Těžké stroje průmyslového sektoru.

Výzkumníci a inženýři využívají ROS k vývoji prototypů, zatímco různí prodejci jej používají k vytváření svých produktů. Má složitou architekturu, která ztěžuje ovládání chromým člověkem. Použití MATLABu k vytvoření propojení rozhraní s ROS je nový přístup, který může pomoci výzkumníkům, technikům a prodejcům při vývoji robustnějších řešení.

Tento návod je tedy o tom, jak vytvořit robotický ovladač ROS založený na Matlabu, toto bude jeden z mála návodů na toto téma a mezi několika málo instrukcemi ROS. Cílem tohoto projektu je navrhnout ovladač, který může ovládat jakýkoli robot ROS připojený k vaší síti. Začněme tedy!

kredity za úpravy videa: Ammar Akher, na adrese [email protected]

Zásoby

Pro projekt jsou vyžadovány následující komponenty:

(1) ROS PC/Robot

(2) Směrovač

(3) PC s MATLAB (verze: 2014 nebo vyšší)

Krok 1: Nastavení všeho

Získání všeho nastavení
Získání všeho nastavení

Pro tento instruktáž používám Ubuntu 16.04 pro můj linuxový počítač a ros-kinetický, takže abych se vyhnul záměně, doporučuji používat ros kinetický a ubuntu 16.04, protože má nejlepší podporu pro ros-kinetický. Další informace o tom, jak nainstalovat ros kinetiku, najdete na stránce https://wiki.ros.org/kinetic/Installation/Ubuntu. Pro MATLAB si buď zakoupíte licenci, nebo si odtud stáhnete verzi trailu.

Krok 2: Pochopení fungování ovladače

Pochopení fungování ovladače
Pochopení fungování ovladače

Na počítači běží robotický ovladač na MATLABu. Ovladač převezme IP adresu a port ros pc/robota.

Ke komunikaci mezi ovladačem a ros pc/robotem se používá téma ros, které je rovněž považováno za vstup ovladačem. Modem je vyžadován k vytvoření LAN (místní sítě) a je to, co přiřazuje IP adresy všem zařízením připojeným k jeho síti. Proto musí být ros pc/robot a počítač se spuštěným ovladačem připojeny ke stejné síti (tj. K síti modemu). Takže teď, když víte, „jak to funguje“, pojďme k tomu, „jak je to postaveno“…

Krok 3: Vytvoření rozhraní ROS-MATLAB

Vytvoření rozhraní ROS-MATLAB
Vytvoření rozhraní ROS-MATLAB
Vytvoření rozhraní ROS-MATLAB
Vytvoření rozhraní ROS-MATLAB
Vytvoření rozhraní ROS-MATLAB
Vytvoření rozhraní ROS-MATLAB

Rozhraní ROS-MATLAB je užitečné rozhraní pro výzkumníky a studenty pro prototypování jejich robotických algoritmů v MATLABu a testování na robotech kompatibilních s ROS. Toto rozhraní lze vytvořit pomocí sady nástrojů robotického systému v matlabu a my můžeme prototypovat náš algoritmus a testovat jej na robot s podporou ROS nebo v robotických simulátorech, jako jsou Gazebo a V-REP.

Chcete-li do svého MATLABu nainstalovat sadu nástrojů robotického systému, jednoduše přejděte na možnost Doplněk na panelu nástrojů a v průzkumníku doplňků vyhledejte soubor robotických nástrojů. Pomocí sady robotických nástrojů můžeme publikovat nebo se přihlásit k odběru tématu, jako je uzel ROS, a můžeme z něj udělat mistra ROS. Rozhraní MATLAB-ROS má většinu funkcí ROS, které byste mohli pro své projekty vyžadovat.

Krok 4: Získání adresy IP

Získání IP adresy
Získání IP adresy
Získání IP adresy
Získání IP adresy

Aby ovladač fungoval, je nutné znát IP adresu vašeho robota/počítače ROS a počítače, na kterém běží ovladač na MATLABu.

Získání IP počítače:

Ve Windows:

Otevřete příkazový řádek, zadejte příkaz ipconfig a poznamenejte si adresu IPv4

Pro Linux:

Zadejte příkaz ifconfig a poznamenejte si adresu inet. Nyní, když máte IP adresu, je čas vytvořit GUI …

Krok 5: Vytvořte GUI pro ovladač

Vytvořte GUI pro ovladač
Vytvořte GUI pro ovladač
Vytvořte GUI pro ovladač
Vytvořte GUI pro ovladač
Vytvořte GUI pro ovladač
Vytvořte GUI pro ovladač

Chcete -li vytvořit GUI, otevřete MATLAB a do příkazového okna zadejte průvodce. Tím se otevře aplikace průvodce, ve které budeme vytvářet naše GUI. K návrhu GUI můžete také použít návrháře aplikací na MATLABu.

Vytvoříme celkem 9 tlačítek (jak ukazuje obrázek):

6 tlačítek: Foward, Backward, Left, Right, Connect to Robot, Disconnect

3 Upravitelná tlačítka: Ros pc ip, port a název tématu.

Editovatelná tlačítka jsou tlačítka, která použijí jako vstup IP počítače ROS, jeho port a název tématu. Název tématu je to, přes co komunikuje ovladač MATLAB a robot/PC ROS. Chcete-li upravit řetězec na upravitelném tlačítku, klikněte pravým tlačítkem na tlačítko >> přejděte na Vlastnosti inspektora >> Řetězec a upravte text tlačítka.

Jakmile je vaše grafické uživatelské rozhraní dokončeno, můžete tlačítka naprogramovat. Tady začíná skutečná zábava…

Krok 6: Programování tlačítek pro úpravu GUI

Programování tlačítek pro úpravu GUI
Programování tlačítek pro úpravu GUI
Programování tlačítek pro úpravu GUI
Programování tlačítek pro úpravu GUI
Programování tlačítek upravitelných v GUI
Programování tlačítek upravitelných v GUI
Programování tlačítek pro úpravu GUI
Programování tlačítek pro úpravu GUI

GUI je uloženo jako soubor.fig, ale funkce kódu/zpětného volání jsou uloženy ve formátu.m. Soubor.m obsahuje kód pro všechna vaše tlačítka. Chcete-li do tlačítek přidat funkce zpětného volání, klikněte pravým tlačítkem na tlačítko> > Zobrazit zpětná volání >> zpětné volání. Tím se otevře soubor.m pro vaše GUI, kde je definováno konkrétní tlačítko.

První zpětné volání, které se chystáme kódovat, je pro tlačítko ROS IP, které lze upravit. Pod funkcí edit1_Callback napište následující kód:

funkce edit1_Callback (hObject, eventdata, handle)

globální ros_master_ip

ros_master_ip = get (hObject, 'String')

Zde je funkce definována jako edit1_Callback, což znamená první upravitelné tlačítko. Když do tohoto upravitelného tlačítka zadáme IP adresu ze sítě ROS, uloží IP adresu jako řetězec do globální proměnné zvané ros_master_ip.

Potom těsně pod _OpeningFcn (hObject, eventdata, handle, varargin) definujte následující (viz obr):

globální ros_master_ip

globální ros_master_port

globální název teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Právě jste globálně pevně zakódovali ros-pc ip (ros_master_ip), port (ros_master_port) a název tématu Teleop. Co to dělá, je to, že pokud necháte editovatelná tlačítka prázdná, budou tyto předdefinované hodnoty použity při připojení.

Další zpětné volání, které se chystáme kódovat, je pro tlačítko Upravitelné portem.

Pod funkcí edit2_Callback napište následující kód:

funkce edit2_Callback (hObject, eventdata, handle)

globální ros_master_port

ros_master_port = get (hObject, 'String')

Zde je funkce definována jako edit2_Callback, což znamená druhé editovatelné tlačítko. Když sem zadáme port ros pc/robota ze sítě ROS v tomto upravitelném tlačítku, uloží port jako řetězec do globální proměnné zvané ros_master_port.

Podobně další zpětné volání, které se chystáme kódovat, je pro tlačítko Upravit název tématu.

Pod funkcí edit3_Callback napište následující kód:

funkce edit3_Callback (hObject, eventdata, handle)

globální název teleop_topic_name

teleop_topic_name = get (hObject, 'String')

Podobně jako ros_master_port je i toto uloženo jako řetězec v globální proměnné.

Dále se podíváme na funkce zpětného volání pro tlačítka …

Krok 7: Programování tlačítek GUI

Programování tlačítek GUI
Programování tlačítek GUI
Programování tlačítek GUI
Programování tlačítek GUI

Tlačítka, která jsme vytvořili dříve, použijeme k přesunu, připojení a odpojení robota od ovladače. Zpětná volání tlačítek jsou definována následovně:

např. funkce pushbutton6_Callback (hObject, eventdata, handle)

Poznámka: v závislosti na pořadí, ve kterém jste vytvořili svá tlačítka, budou odpovídajícím způsobem očíslována. Funkce pushbutton6 v mém souboru.m proto může být pro Forward, zatímco ve vašem.m souboru může být pro Backwards, takže to mějte na paměti. Chcete-li zjistit, jakou přesnou funkci má vaše tlačítko, jednoduše klikněte pravým tlačítkem na >> Zobrazit zpětná volání >> zpětná volání a otevře se vám funkce pro vaše tlačítko, ale pro tento pokyn předpokládám, že je stejný jako můj.

Tlačítko Připojit k robotu:

Pod funkcí pushbutton6_Callback (hObject, eventdata, handle):

function pushbutton6_Callback (hObject, eventdata, handle) global ros_master_ip

globální ros_master_port

globální název teleop_topic_name

globální robot

globální 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 zpětné volání nastaví proměnnou ROS_MASTER_URI zřetězením ros_master_ip a portu. Poté příkaz rosinit inicializuje připojení. Po připojení vytvoří vydavatele geometry_msgs/Twist, který bude použit pro odeslání příkazu velocity. Název tématu je název, který zadáme do pole pro úpravy. Jakmile bude připojení úspěšné, budeme moci ovládat tlačítka vpřed, vzad, vlevo, vpravo.

Před přidáním zpětných volání do push -upů vpřed, vzad musíme inicializovat rychlosti lineární a úhlové rychlosti.

Proto pod _OpeningFcn (hObject, eventdata, handle, varargin) definujte následující (viz obr):

globální left_spinVelocity globální right_spinVelocity

globální dopředná rychlost

global backwardVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Poznámka: všechny rychlosti jsou v rad/s

Nyní, když jsou definovány globální proměnné, naprogramujme pohybová tlačítka.

Pro tlačítko Vpřed:

funkce pushbutton4_Callback (hObject, eventdata, handle) globální velmsg

globální robot

globální název teleop_topic_name

globální dopředná rychlost

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

odeslat (robot, velmsg);

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

Podobně pro tlačítko Zpět:

funkce pushbutton5_Callback (hObject, eventdata, handle)

globální velmsg

globální robot

global backwardVelocity

globální název teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

odeslat (robot, velmsg);

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

Podobně pro levé tlačítko: funkce pushbutton3_Callback (hObject, eventdata, handle)

globální velmsgglobal robot global left_spinVelocity

globální název teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

odeslat (robot, velmsg);

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

Podobně pro pravé tlačítko:

globální velmsgglobal robot

globální right_spinVelocity

globální název teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

odeslat (robot, velmsg);

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

Jakmile byly přidány všechny funkce zpětného volání a uloženy soubory, můžeme otestovat náš ovladač.

Krok 8: Nastavení konfigurace sítě na ROS PC (Linux)

Nastavení konfigurace sítě na ROS PC (Linux)
Nastavení konfigurace sítě na ROS PC (Linux)
Nastavení konfigurace sítě na ROS PC (Linux)
Nastavení konfigurace sítě na ROS PC (Linux)

Testujeme ovladač na počítači ros pc (Linux), které bude vyžadovat nastavení konfigurace sítě. Pokud ovladač používáte i na počítači s operačním systémem linux, budete muset také nastavit konfiguraci sítě.

Konfigurace sítě:

Otevřete okno terminálu a zadejte gedit.bashrc

Jakmile je soubor otevřený, přidejte následující:

#Konfigurace robota

export ROS_MASTER_URI = https:// localhost: 11311

#IP adresa hlavního uzlu ROS

exportovat ROS_HOSTNAME =

exportovat ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Tento krok musíte provést pokaždé kvůli dynamickému přiřazování IP.

Krok 9: Spusťte ovladač

Spusťte ovladač
Spusťte ovladač

Chystáme se otestovat náš ovladač na Turtle botovi v Gazebo.

Chcete -li nainstalovat Gazebo, podívejte se na

Chcete-li nainstalovat Turtle bot, podívejte se na

Otevřete složku, kam jste uložili své soubory.fig a.m na MATLAB a stiskněte Spustit (jak je znázorněno na obrázku). Tím se otevře ovladač v počítači. Před stisknutím připojení se ujistěte, že simulátor želvových bot funguje.

Otestování simulace TurtleBot:

Otevřete terminál na počítači Ros a zadejte: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Tím se na tomto počítači otevře simulace Turtlebot. Název tématu TurtleBot je/cmd_vel_mux/input/teleop, který jsme již poskytli v aplikaci. Do upravitelných tlačítek zadejte adresu IP ros port, název portu a tématu a stiskněte tlačítko Connect to Robot. Váš želví bot by se měl začít pohybovat, když stisknete Vpřed, Vzad atd.

Chcete -li zobrazit lineární a úhlové rychlosti:

Otevřete nový terminál a zadejte příkaz: $ rostopic echo/cmd_vel_mux/input/teleop

A tady máte svůj vlastní robotický ovladač ROS založený na Matlabu. Pokud se vám můj pokyn líbil, dejte mu prosím hlas v soutěži Prvního autora a sdílejte jej s co největším počtem lidí. Děkuji.

Doporučuje: