Sef Roboter & ros_control

ros_controlSEF Roboter je svojím spôsobom symbolický projekt, ktorý sprevádzal uplynulých 5 rokov nášho robotického bádania. Jeho počiatky siahajú ešte do obdobia predtým ako sme sa vôbec začali ROS zaoberať, čiastočne boli motiváciou k štúdiu ROS ako takého, nehovoriac o tom, že potreba riadenia Siemens pohonov SEFka viedla k realizácii úspešného GSoC projektu a vzniku siemens_cp1616 wrappera. Počas uplynulých 5 rokov sme sa teda etapu po etape postupne posúvali k hlavnému cieľu tohto projektu – otvorenému robotickému riadiacemu systému umožňujúcemu ovplyvňovať riadenie robota na rôznych úrovniach. A minulý týždeň sme implementáciou hardwarového interfacu pre ros_control doplnili posledný chýbajúci diel do našej skladačky…

Ako sme písali aj v predchádzajúcom článku v súčasnosti je najschodnejšou cestou ako prepojiť vlastného robota s ROS, využitie stacku ros_control. ros_control je súbor packageov obsahujúcich generické controllery, hardwarové interfacy, controller managera – jednoducho sadu nástrojov potrebných nato aby ste mohli implementovať časť riadenia robotického systému priamo v Linuxe a napojiť ho na zbernicu, ktorou ovládate vášho robota. Vďaka šikovne navrhnutej architektúre zobrazenej na prehľadovej schéme nižšie je možné s regulátormi najprv experimentovať simulačne v simulátore Gazebo, kde si viete pomerne rýchlo nakonfigurovať celý pipeline a odladiť všetky parametre. S takto pripraveným systémom vám zostáva dopísať hardwarový interface pre komunikáciu so zbernicou vášho robota, prehodiť zopár nastavení a začať ovládať reálneho robota.

Gazebo_ros_transmission

Najdôležitejším krokom pri implementácii ros_control stacku je návrh riadiacej štruktúry systému. Pri ovládaní robotického ramena je samozrejme základom klasická polohová regulácia jednotlivých pohonov s kaskádnym zapojením polohového, rýchlostného a prúdového regulátora. K nim sa ešte pridáva tzv. Joint Trajectory Controller – ROS nástroj, ktorý na základe modelu a spätnej väzby z reálneho robota prepočítava aktuálnu polohu jednotlivých ramien, rieši interpolácie a generuje setpointy pre jednotlivé polohové regulátory. Zjednodušene povedané zabezpečuje aby bol každý pohon v správnom čase v správnej polohe.

S navrhnutou štruktúrou sa ale dostávame ku ďalšej dôležitej otázke a to: ako túto štruktúru reálne naimplementovať? Ako rozložiť regulátory naprieč systémom, ktoré regulátory nechať bežať na Linuxe a ktoré priamo na robotickom systéme?

img_4576

Odpoveď vždy závisí od reálneho robotického systému a možností ktoré ponúka. V prípade Siemens pohonov SEF Robotera nám síce meniče SINAMICS S120 umožnovali priame polohové riadenie využitím modulu „Basic Positioner“ ale vzhľadom na riadenie celkovej trajektórie sa z viacerých dôvodov ako výhodnejšie riešenie ukázalo presunutie polohovej regulácie na stranu Linuxu a ponechanie meničov v základnom režime rýchlostného riadenia. Joint Trajectory Controller teda spolu s polohovými regulátormi na Linuxovej strane generoval rýchlostné setpointy, ktoré sa po Profinete využitím štandardného telegramu č.4 prenášali do riadiacej jednotky systému (CU320) a priamo riadili rýchlosť všetkých šiestich osí. Ako spätná väzba sa naspäť do Linuxu posielala aktuálna poloha a rýchlosť jednotlivých pohonov.

Implementáciu nám mierne skomplikovali snímače otáčok. Rozlíšenie resolverov je 2048 pulzov na otáčku a problémom ktorý vyvstal pri rýchlostnej regulácii bola nenulová poloha resolverov pri nulovej polohe robota. Jednoducho po vycentorvaní SEFka sa hodnoty stavu snímačov sa pohybovali v rozsahu jednej otáčky (0-2048 pulzov), čo spôsobovalo rozhodenie celého systému o pár stupňov už pri inicializácii. Riešením bol riadený reset stavu resolvera, podobne ako je tomu pri polohovej regulácii, akurát v tomto prípade sa výsledná poloha nachádzala na samostatnom parametri mimo štandardného telegramu. Bolo preto nutné rozšíriť existujúcu komunikáciu o ďalšie dve slová aby sme dostali správnu informáciu o polohe až do regulátora na Linuxe.

gazebo_gui2

Dokončenie ROS riadenia SEF Robotera je veľkým míľnikom pre SmartRoboticSystems ako aj pre Katedru Elektrotechniky a Mechatroniky FEI TUKE. Vďaka kombinácii ROS ako nadradeného systému so Siemens pohomi máme totiž k dispozícii plne otvorený robotický riadiaci systém s ktorým sa dá experimentovať na rozličných úrovniach riadenia od generovania trajektórií až po prúdové regulátory jednotlivých pohonov. A to je zaujímavé najmä z hľadiska výskumnej a publikačnej činnosti. Zdrojové kódy sef_robter stacku vrátane modelu, joint publishera a hadrwarového interfacu pre ros_control sú k dispozícii na githube.

POĎAKOVANIE: Realizácia tohto projektu by nebola možná bez pomoci viacerých kolegov z Katedry Elektortechniky a Mechatroniky konkrétne: František Ďurovský st. Róbert Üvegeš, Ján Svitič, a Marek Vacek.

František Ďurovský