====== Marocon: BlueBot Robot Control Toolbox pro Matlab - Návod použití ====== ===== Úvod ===== Tato knihovna funkcí zpřístupňuje řízení robotů z Matlabu pomocí jednotného rozhraní. Umožňuje pohyb robotem v kloubových souřadnicích (hardwarové IRC i stupně) a ovládání chapadla. Dále obsahuje podpůrné funkce pro konverze kloubových souřadnic a přímou a inverzní kinematickou úlohu. Knihovna dále nově obsahuje i funkce pro pohyb po splinech. Aby bylo možné daný robot tímto toolboxem ovládat, musí být k dispozici definiční soubor. Některé definice robotů jsou součástí toolboxu (např. [[help:common:robot_crs|CRS A565]] nebo [[help:common:robot_bosch|Bosch SR450s]]); je možné také pracovat s externími definicemi. V současné době je komunikace s řídící jednotkou realizována pomocí sériového (RS232) rozhraní. BlueBot toolbox vyžaduje Matlab 7.6 (R2008a) a výše s podporou ''serial port object'' (na x64 je třeba vyšší verze). Kromě tohoto návodu jsou všechny funkce toolboxu zdokumentovány, pro jejich podrobný popis je vhodné používat příkaz ''help''. Knihovna je přístupna na adrese:\\ [[https://github.com/cvut/marocon|GitHub - Marocon]] Pro použití v učebně E-131 je knihovna umístěna na síťovém disku, pro její použití je třeba ji nejprve umístit do cesty Matlabu: /bluebot/data/Marocon/src Pro načtení hodnoty výstupu snímače, pokud je nainstalován, lze použít funkce ''bbreaddigi(robot, index)''. Výstup snímače je namapován na sedmý bit počítáno od 0, v MATLABu tedy pod indexem 8. ===== Jednoduchá demonstrace ===== Definice robotů, které jsou v knihovně k dispozici lze vyjmenovat příkazem ''bbrobots'': >> bbrobots Available robot definitions: CRS93 .. CRS 1993 with gripper CRS97 .. CRS 1997 with gripper T2 .. Single translation table Opten T2 bosch .. Bosch SR450s boschmagnet .. Bosch SR450s equipped with magnetic gripper Základní ovládání robotu demonstruje funkce ''bbdemo''. bbdemo( robotname [, comport] ) Ta provede patřičné inicializace a volá demonstrační sekvenci, je-li k dispozici. Na závěr uzavře komunikaci s robotem. Funkce očekává parametr specifikující daného robota (např. ''bosch'') a volitelně lze zadat komunikační port, je-li robot připojen k jinému portu než je definováno v jeho specifikaci. V případě, že je komunikace s robotem již otevřena, lze funkci předat přímo řídící strukturu robotu. V tom případě je pouze zavolána demonstrační sekvence a komunikační kanál je ponechán otevřen. Pozor: demonstrační sekvence pro daný robot předpokládá (více či méně) **volný pracovní prostor**. ===== Typický průběh práce s toolboxem ===== Předpokládáme, že knihovna BlueBot je v Matlabu již přístupná (nastavení path). Před započetím vlastní práce s robotem je třeba otevřít kumunikační kanál (''bbopen'') a zinicializovat řídící jednotku a robot (''bbinit''). Pak je možné ovládat pohyb a podobně. Nakonec je vhodné robot uvést do klidové polohy a ukončit komunikaci s řídící jednotkou (''bbclose''). ===== Inicializace a ukončení ===== robot = bbopen( robotname [, comport] ) Načte specifikaci robotu, otevře komunikační port a nastaví jeho parametry. Funkce vrací řídící proměnnou, kterou používají ostatní funkce knihovny. Použitý port je definován specifikací robotu, může být také nastaven volitelným argumentem. Port musí být pro Matlab volný. V případě potřeby (například po ztrátě řídící proměnné) lze uvolnit všechny porty příkazem ''bbcomreset''. robot = bbinit( robot [, force_hh ] ) Inicializuje řídící jednotku a nastaví její parametry potřebné pro řízení konkrétního robotu (PID regulátor, logika řízení os a podobně). Následně provede inicializaci polohy ("hard home") a nastavení do počáteční polohy ("soft home"). Inicializaci jednotky lze kdykoli opakovat, v tom případě se ale již robotem nehýbe. Nastavení do počáteční polohy lze opakovat příkazem ''bbsofthome''. Pozor: pokud by došlo k vypnutí (a zapnutí) řídící jednotky, či jiným způsobem ke ztrátě informace o poloze kloubů, je třeba provést celou inicializaci znova. To se zajistí nastavením volitelného argumentu ''force_hh = true''. bbclose( robot ) Proběhla-li inicializace polohy, nastaví robot do počáteční polohy. Nakonec uzavře komunikační kanál. ===== Základní pohyb ===== Při práci s robotem lze používat kloubové souřadnice v jednotkách: * IRC - hardwarové jednotky kloubového senzoru. * deg - stupně pro rotační kloub, milimetry pro posuvný kloub. Jsou k dispozici i konverzní funkce (''bbdegtoirc'', ''bbirctodeg''). Základní pohyb robotu ovládají funkce ''bbmoveirc'' a ''bbmovedeg''. Tyto funkce pohybují všemi klouby nastavenou rychlostí, doba pohybu jednotlivých klobů se tedy liší. Pro koordinovaný pohyb slouží funkce ''bbmoveircs'' a ''bbmovedegs''. Dotaz na aktualní polohu lze učinit funkcemi ''bbgetirc'', ''bbgetdeg''. Pohybové funkce započnou s pohybem robotu, nečekají však na jeho dokončení. K tomu lze využít dotaz ''bbisready'' a čekání ''bbwaitforready''. Pokud dojde k chybě řízení, například odpojením motorů stiskem bezpečnostního tlačítka, může ovládací jednotka zůstat v chybovém stavu v nekterých kloubech. Tuto chybu je pak třeba vypnout příkazem ''bbresetmotors''. ===== Chapadlo ===== Je-li robot vybaven chapadlem, lze jej ovládat příkazem ''bbgrip''. bbgrip( robot, power ) ''Power'' se nastavuje v rozsahu -1 až 1, jeho význam je závislý na typu chapadla. Hodnota ''0'' je speciální, vždy znamená chapadlo v klidové poloze, bez síly, bez napájení (tj. bez případné regulace polohy). ==== Chapadlo řízené napětím (robPWMgripper) ==== Tento typ chapadla používá například přídržný magnet. Hodnota ''power'' má smysl v rozsahu 0 až 1 (hodnoty <0 se převedou na 0) a udává hodnotu napětí přivedeného na chapadlo, tedy odpovídá například síle magnetu. ==== Chapadlo montované na robota CRS (robCRSgripper) ==== {{ help:common:crsgripper_situation.png?172|Chapadlo CRS}} Chapadlo používá ''power'' v plném rozsahu < -1;1>: * Poloha - v rozsahu < -0.1;0.1> pracuje řízení polohy čelistí s poměrně malou silou (-0.1 - plné otevření, 0.1 - plné uzavření). * Stisk - v rozsahu <0.1;1> dochází k stisknutí tak jak uchopený předmět dovolí a je nastavena síla stisku (0.1 - téměř bez síly, 1 - maximální síla). * Rozpor - v rozsahu < -1;-0.1> dochází k rozevření tak jak uchopený předmět dovolí a je nastavena síla rozporu (-0.1 - téměř bez síly, -1 - maximální síla). {{ help:common:crsgripper_power.gif?212|Průběh polohy a síly}} Obrázek - průběh polohy (modře) a síly (červeně) v závislosti na nastavení ''power''. Průběh polohy platí pro chapadlo bez předmětu. Pozn: průběh síly je orientační, její skutečná velikost je ovlivněna velikostí uchopovaného předmětu. ===== Souhrn funkcí ===== Přehled funkcí lze získat příkazem ''help bluebot'' (je-li v cestě Matlabu). Startup/shutdown bbopen - Open the robot communication. bbinit - Robot initialization and homing. bbclose - Close the robot communication. bbcomreset - Try to close and free all COM ports in use. Low level robot motion bbsofthome - Soft homing. bbcheckirc - Check bounds of joint coordinates given in IRC units. bbcheckdeg - Check bounds of joint coordinates given in degrees/milimeters. bbgetirc - Query current joint positions in IRC units. bbgetdeg - Query current joint positions in degrees/mm. bbmoveirc - Move joints to position given in IRC units. bbmoveircs - Coordinated robot motion through positions given in IRC units. bbmovedeg - Move the joints to position given in degrees/mm. bbmovedegs - Coordinated robot motion through positions given in degrees/mm. bbgrip - Gripper control. bbsetacceleration - Set acceleration for each axis. bbsetspeed - Set speed for each axis. bbisready - Determine if the robot is ready. bbwaitforready - Wait until the robot is ready. bbwaitforgrip - Wait until the gripper finish move. bbresetmotors - Clear err state of all motors. bbrelease - Stop all motors and release its control. Conversions bbdegtoirc - Conversion of angles in degrees/mm to IRC units. bbirctodeg - Conversion of angles in IRC units to degrees/mm. Kinematics bbdkt - Direct kinematic task. bbikt - Inverse kinematic task. Other bbdemo - Demonstration of robot control by BlueBot toolbox. bbrobots - List available robots implemented in the toolbox.