Motoman SDA10F & ROS-Industrial

motoman_webAk má priemyselný robot vo výrobe opakovať tie isté vopred naučené pohyby, väčšinou ho dokážete naprogramovať pomocou pendantu. Ak sa ale jedná o náročnejšiu aplikáciu, prepojenie s vizuálnym systémom s potrebou generovania trajektórií, programovanie sa značne komplikuje. V tomto článku si na príklade  manipulátora SDA10F ukážeme aké možnosti nám v takejto situácii ponúka ROS-Industrial.

1. Krok – Model robota

Základom akéhokoľvek pokročilejšieho riadenia manipulátorov je matematický model robota, ktorý na základe vzťahov medzi jednotlivými kĺbmi a článkami danej konštrukcie umožňuje prepočítať pohyb pohonov na polohu a orientáciu ramena v priestore. Spôsobov ako matematický model robota vytvoriť je viacero, najznámejší je Denavit-Hartenbergov popis, každopádne zostaviť správny a funkčný model robota nie je jednoduché ani na vzorovom učebnicovom príklade, nieto ešte na reálnom mechanizme.

V súčasnosti je najspoľahlivejším riešením vygenerovať matematický model na základe CAD modelu ramena, čím odpadá potreba ručného zadávania parametrov a definovania súradnicových systémov. Viacero návrhárskych a väčšina offline programovacích softwarov túto možnosť ponúka a ROS nie je výnimkou. CAD model ľubovolného ramena je možné prekonvertovať do formátu URDF kompatibilného s ROS priamo zo Solidworksu pomocou tzv. „sw_urdf_exporter“ pluginu. Výsledný URDF model robota vyzerá takmer identicky ako jeho CAD predloha vrátane meshov, akurát je už kompatibilný s ROS a jeho nástrojmi. Po otvorení v RVize teda viete hýbať s jednotlivými kĺbmi a sledovať správanie a polohu ramena v priestore.

2. Krok – Moveit_config

Ak je model robota funkčný ďalším krokom je rozšírenie jeho možností o riešenie inverznej kinematiky a plánovanie trajektórií. Knižníc na riešenie inverznej kinematiky existuje vo svete robotiky viacero a väčšina z nich využíva pri riešení numerické metódy (KDL, IKAN). Výnimkou je OpenRave, ktoré ponúka aj možnosť analytického riešenia inverznej kinematickej úlohy na základe zadaného modelu robota – tzv „ikfast“. V ROS sa vo všeobecnosti pre roboty so 6 a viac stupňami voľnosti používa KDL plugin, ale je možné použiť aj iné riešenia, prípadne implementovať vlastný solver.

Iba inverzná kinematika však pre spoľahlivé generovanie trajektórie nestačí a IK solver je ešte potrebné doplniť o tzv. „motion planner“. Motion planner sa postará o vygenerovanie sekvencie polôh, rýchlostí a zrýchlení jednotlivých motorov ramena tak aby vygenerovaná trajektória začínala v aktuálnom a končila v cieľovom bode, dodržiavala pritom obmedzenia rýchlosti pohonov a neobsahovala tzv „jumps“ skoky medzi rôznymi riešeniami IK. Planner zároveň zabezpečí aby sa rameno počas pohybu nedostalo do kolízie samé so sebou, prípadne s okolitým prostredím ak je k dispozícii aj jeho model. ROS používa v súčasnosti najpopulárnejší motion planner Open Motion Planning Library (OMPL), v ktorom sú k dispozícii state-of-art výsledky z tejto oblasti .

Na zintegrovanie modelu robota s IK solverom a Motion Plannerom sa v ROS používa knižnica MoveIt. Výsledkom updatu pôvodného modelu je „ROBOT_moveit_config“ – package,  obsahujúci kompletné riešenie kinematiky potrebné pre plnohodnotné riadenie manipulátora. Updatovať základný URDF model na moveit_config v praxi zaberie pri použití wizarda pár minút, po ktorých môžete okamžite začať testovať kinematiku.

3. Krok – prepojenie modelu s reálnym robotom

Krok, v ktorom to celé začína byť zaujímavé. Ako prepojiť vytvorený model s priemyselným robotom tak, aby ak pohnete ramenom robota cez pendant zmenil sa jeho stav v simulácií a zároveň aby výsledkom zmeny polohy ramena v simulácii bol pohyb reálneho robota?

Ak máte to štastie, že vám výrobca priemyselného robota dal k dispozícii knižnice pre komunikáciu s controllerom, či už cez TCP/IP, UDP alebo nejaký iný protokol, môžete sa pokúsiť napísať vlastnú aplikáciu. Komunikáciu sa vám ešte pravdepodobne oživiť podarí ale zintegrovať všetko aj s modelom, protokolmi, simuláciou a riešením kinematiky do funkčného celku už také jednoduché nebude.

V ROS v tejto chvíli vstupuje do hry ROS-Industrial, o ktorom sme podrobnejšie písali tu. Jeho hlavnou úlohou je zabezpečiť interface medzi moveIt_config package-om a fyzickým controllerom robota tak, aby bolo možné po Ethernete alebo inej zbernici preniesť pohyb zo simulácie na reálny robot a naopak.

Samotný interface sa sladá sa z dvoch častí:

  1.  industrial_core – middleware, ktorý zabezpečuje základný interface s moveit_configom.
  2. robot_specific_pkg“ – implementácia drivera pre komunikáciu medzi industrial_core a konkrétnym robotickým controllerom

Výhodou tohto rozdelenia je možnosť použiť pre danú aplikáciu rôzne roboty. Ak máte odladenú aplikáciu napríklad s Motomanon SIA20D, nemal by byť problém vymeniť ho za Universal Robot UR5, ktorý ma podobné rozmery. V ROS aplikácii sa jednoducho vymení sia20d_moveit_config pkg za ur5_moveit_config, prepíše sa zopár parametrov, topicov v programe, systém sa prekalibruje a aplikácia funguje ďalej.

V ROS-Inustrial sú moveit_pkg-e pre priemyselné roboty naprogramované tak, aby fungovali out-of-the-box, čiže si ich stiahnete, zadáte zopár parametrov ako IP adresu, typ robotického controllera a môžete skúšať. V praxi to väčšinou také jednoduché nie je a aj pri Motomanovi bolo potrebných viacero krokov, vrátane updatu firmwaru robotického controllera a inštalácie MotoROS aplikácie, kým sa komunikáciu z ROS podarilo oživiť. Ako to celé vyzerá v praxi v napovie nasledujúce video:

Samozrejme pohyb robota je možné riadiť nielen z RVizu ale aj z C++ aplikácie, ktorá beží na pozadí. Čo sa týka rýchlosti odozvy tak, podľa našich testov controller streamuje aktuálnu polohu všetkých 15tich kĺbov 110 krát za sekundu, čiže pri pohybe ramena pendantom je odozva do ROS okamžitá. Pri opačnom toku dát je najprv trajektória vypočítaná v ROS celá odoslaná do robotického controllera, ten ju spracuje a následne vykoná na reálnom manipulátore, čo trvá okolo 1-2 sekúnd od zadania príkazu po začiatok pohybu. Voľba, či vykonávať nasimulované pohyby aj na reálnom manipulátore alebo iba offline je z hľadiska užívateľa záležitosťou jedného true/false parametra.

V súčasnosti je možné z ROS-Industrial týmto spôsobom ovládať priemyselné manipulátory 5-tich výrobcov ale na GitHube je možné nájsť experimentálne drivre aj na ďalšie typy vrátane KUKA, či Staubli robotov. Vo všeobecnosti sa čím ďalej tým viac výrobcov snaží, aby bol ich hardware s ROS kompatibilný a spolupracujú na vývoji ovládačov s lídrami ROS konzorcíi  – SwRI v USA a Fraunhofer IPA v Európe. Z hľadiska užívateľa je to podstatné najmä z dôvodu, že v prípade problémov s ovládačom daného manipulátora, mu má kto poskytnúť support.

V nasledujúcom článku si ukážeme ako využiť pokročilé riadenie priemyselného robota a prepojiť ho so  senzorikou tak, aby bolo možné vykonávať jednoduchý pick&place z náhodnej (nenaučenej) pozície.

František Ďurovský