Obsah:
- Zásoby
- Krok 1: Nastavení všeho
- Krok 2: Pochopení fungování ovladače
- Krok 3: Vytvoření rozhraní ROS-MATLAB
- Krok 4: Získání adresy IP
- Krok 5: Vytvořte GUI pro ovladač
- Krok 6: Programování tlačítek pro úpravu GUI
- Krok 7: Programování tlačítek GUI
- Krok 8: Nastavení konfigurace sítě na ROS PC (Linux)
- Krok 9: Spusťte ovladač
Video: Robotický ovladač ROS založený na Matlabu: 9 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
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
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
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
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
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č
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
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
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)
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č
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:
Ovládání Raspberry Pi pomocí Matlabu: 5 kroků
Ovládání Raspberry Pi pomocí Matlabu: Hej, tento tutoriál je o ovládání vašeho bezhlavého malinového pi pomocí matlabu. Možná budete muset nainstalovat matlab na nejnovější verzi, abyste mohli podporovat novější malinovou desku pi
Vylepšení programování vlaků v MATLABu: 6 kroků
Vylepšení programování vlaků v MATLAB: Cíl: Cílem tohoto naprogramovaného systému je podívat se na Arduino v malém měřítku a aplikovat kódování ve větším měřítku, aby se potenciálně zlepšily určité bezpečnostní funkce systémů Amtrak Railroad. Za tímto účelem jsme přidali snímač vlhkosti půdy
Robotický dálkový ovladač: 4 kroky
Drátový robot na dálkové ovládání: Obsah 1. Úvod 2. Komponenty & jeho Specifikace. 3. Jak připojit motor k podvozku. 4.Jak připojit přepínač DPDT k motorům & Baterie 1. Úvod Ruční robot je typ manipulačního robotického systému, který vyžaduje úplné hučení
Jak provést test sluchu pro dospělé pomocí MATLABu: 6 kroků
Jak provést test sluchu pro dospělé pomocí MATLABu: UPOZORNĚNÍ: Náš test NENÍ lékařskou diagnostikou a neměl by být používán jako takový. Chcete -li přesně změřit sluch, navštivte lékaře. Pomocí materiálů, které jsme již měli, naše skupina provedla test sluchu. Náš test je určen pouze pro dospělé a dospívající
Kapacitní dotek s Evive (ovladač založený na Arduinu): 6 kroků (s obrázky)
Capacitive Touch With Evive (Arduino Based Controller): Víte, jak funguje dotyková obrazovka vašeho smartphonu? Smartphone má pod skleněnou obrazovkou řadu dotykových senzorů. V dnešní době je jeho technologie založená na kapacitní kapacitě dotykového snímání a dokonce i jemného dotyku snadno detekována. Kapacitní dotek je cítit