Pythoni kasutamine MIR robotite automatiseerimiseks

Kuupäev

2023-05-12

Väljaande pealkiri

Väljaande ISSN

Köite pealkiri

Kirjastaja

Tallinna Tehnikakõrgkool

Kokkuvõte

The problem i was solving is that DemekCNC client wanted to put MIR robot at charging station at exact time automatically at the time when they all are going for lunch and charge during this time. Robots default software don’t have this function. MIR manufacturer offers their solution, MIR Fleet, which adds mission scheduling feature to the MIR as well as a lot of other features. The problem of MIR Fleet for the client is its price, which is high and that they don’t need other extra features for their robot. After this time, they wanted to put their regular mission back. My suggested solution for this problem was to use MIR robots own REST API and combining it with Python, create code that will be able to add missions to the robot and take them out of the robot. I have added 2 more features to my code, except adding and deleting missions. The first one is control of the mission cycle. Which is used to check if robot have done mission cycle to the end or not. This function is needed because clients regular mission is looped, which means that robot repeats same movements over and over again. Because of that, it is not possible to simply add charging mission to the robots queue, because every time mission comes to the mir robots queue it is going to the bottom of the queue and as we know that clients regular mission is looped, it will never end and charging mission will never execute. So the only way to add charging mission to the mir robots queue is to firstly remove all missions that are already in queue and only then add charging mission. However, if I remove regular mission in the middle of mission cycle there could be such situation, when robot comes to the charging station with the product on top of it. This situation has risk to damage the product. Because after charging during launch time robot will come back to regular mission and start his movements from the first action. So in this situation, if robot haven’t delivered product to the destination area before going at charging station and will start mission from the beginning, there is high risk to get new product on the top of the product that remained on the robot, which could lead to product damage. To prevent this, I have function mis_mes that will firstly check if mission cycle have been finished and only after that, pass code to the removing and adding mission part. And the second one is mission filtering using mission names. By default, robot can make operations with mission only using specific mission id, which looks this way: 96adef52-cc93-11ed-bf3d-94c691a73491. It is not very easy to find this id, so I decided to add opportunity to make operations with mission using mission names, which are easy to find with MIR robots software. Summarizing everything I have done, can say that I have developed working solution for the problem that I received form the company and it has opportunity for future growth. For example right this code is used to solve problem with charging mission scheduling, but it can be used for adding other functionalities as well. Video with the working code as well as full code and code scheme you can find in attachments.


Probleem, mida lahendasin on, et DemekCNC kliendil on vajadus panna MIR roboti laadima kindlal ajal. Kliendil, kõik töötajad lähevad lõunale kell 12:00, ehk tööruumis ei ole mitte kedagi sellel ajal ning töö protsess peatatakse. Klient tahab et MIR robot läheks automaatselt lõuna ajal laadimisjaama ja laeks ennast pausi ajal, kokku 1 tund. Pärast pausi, tahab klient automaatselt taaskäivitada roboti tavamissiooni. Missiooni ajatamise funktsioon puudub tavalisel roboti tarkvaral ja tootja pakub selle funktsionaalsuse lahenduseks MIR Fleet tarkvara, mis on kallis lahendus, praegune hind on 13000 eurot. MIR Fleet lisab võimaluse ajatada roboti missioone ja mitte ainult seda, vaid lisab ka teisi funktsionaalsusi lisaks, kuid klientidel pole vaja täiendavaid funktsioone ja ei ole nõus maksma soovitud litsentsi, et kasutada ainult ajatamise funktsioon MIR Fleetiga. MIR on Mobile Industrial Robot, mis tähendab et see on Mobiilne Tööstus Robot. On olemas 4 erinevaid mudelid: MIR 100, 250, 600, 1350. Peamised erinevused on liikumise kiirus ja kandevõime. Number tähendab kaalu, mis robot suudab tõsta, näiteks MIR100 saab tõsta kuni 100 kilogrammi, MIR250 kuni 250 kilogrammi ja nii edasi. Kuid tarkvara koodi jaoks pole see oluline, sest neil on kõikidel sama tarkvara. MIR Fleetil on olemas 2 versiooni: esimene on MIR Fleet PC, mis tuleb väikese eraldiseisva arvutina ja teine on MIR Fleet Server Solution, mis on arendanud paigaldamiseks olemasolevasse serverisüsteemi. Minu pakutav lahendus kasutab MIR enda REST API võimalusi, toetudes Python scriptile, mis võimaldab sama funktsionaalsust ja teha seda kõike kasutajate jaoks võimalikult lihtsalt. REST API on Representational State Transfer Application Programming Interface, ehk see on rakendustarkvara liides, mis kasutab REST reeglid ja annab võimaluse suhelda robotiga. Põhiidee on, et meil on olemas REST API klient, meie juhul see on Python script, mis saadab päringu serverile, meie juhul server on MIR robot, mis saadab kliendile vastuse. Python on kõrgtasemeline, üldotstarbeline programmeerimise keel, mis on täna väga populaarne. Pythoni eelised on, et ta on programmeerija sõbralik, Pythoni kood on lühike ja lugemiseks mugavam võrreldes teiste keeltega. Pythonil on olemas palju standardseid raamatukogusid. Raamatukogu on eelvalmistatud koodi lõikude šabloon, mis on võimalik kasutada oma koodis, et kiiremini ja lihtsamini programmeerida. Python on ka portatiivne keel, see tähendab et ilma muudatustega võib panna käima koodi kõikidel platvormidel, vahet pole missugune süsteem oli kasutatud koodi kirjutamiseks. Minu koodis on 3 funktsionaalsust: Esimene on missioonide kutsumine ja eemaldamine kasutades MIR roboti REST API võimalusi, see on koodi peamine funktsionaalsus. Teine on missiooni lõpetamise kontroll, see on väga tähtis funktsionaalsus, sest kliendi robotil on tehtud ainult 1 missioon, mis jookseb loopis, mis tähendab et 40 robot kordab lõputult sema missiooni ja kui me lihtsalt lisame roboti missioonile midagi juurde, siis ta läheb järjekorra alla ja kuna roboti tavaline missioon on loopis, siis robot mitte kunagi ei jõua alustada seda missiooni. Ainuke võimalus on eemaldada kõik missioonid järjekorrast ja ainult pärast seda lisada laadimise missioon, siis laadimis missioon on esimene ja ainuke missioon järjekorras ja robot hakkab seda missiooni läbi viima. Seepärast on oluline, et robot teeks missioni tsükli lõpuni. Kui me võtame roboti ära missiooni tsükli keskel, meil võiks olla selline olukord, kus robot läheb laadima ja roboti peal on toode, sest ta ei jõudnud toodet viia sihtpunkti, siis robot läheb laadima koos tootega. Pärast lõunapausi lõppemist, kui me paneme roboti tema tavamissioon tagasi, robot ei jätka oma missiooni vaid alustab seda uuesti, esimesest positsioonist siis võib olla selline olukord kui toode peale pannakse teine toode ja see võib tekitada kahju. Selle vältimiseks on olemas koodis mis_mes funktsioon , mis kontrollib kas missiooni tsükkel on lõpetanud või mitte ja kuni selle hetkeni, kuni robot teeks tsükli lõpuni ei lubata koodil edasi minna. Siis kood eemaldab kõik missioonid, mis on robotil järjekorras ja lisab laadimise missiooni, siis robot laadib 1 tund ja pärast seda kood eemaldab laadimise missiooni ja paneb tagasi roboti tavalisse missiooni režiimi.. Viimane funktsionaalsus, mis on loodud minu lõputöö raames, on missioonide filtreerimine, kasutades nende nimesid. Selline funktsionaalsus on kasulik, sest MIR ei anna võimalust kutsuda vaikimisi missioone, kasutades nende nimed, vaid ta tahab saata unikaalse missioni id, mis ei ole väga lihtne leida. Missioni id näeb välja järgmiselt: 96adef52-cc93-11ed-bf3d-94c691a73491. Põhimõtte on, et kood rakendub missiooni nimele õige missiooni id. Kokkuvõteks võin öelda et minul on tehtud töötav lahendus esialgsele probleemile ning sellel lahendusel on hea potentsiaal edasiarenduseks. Näiteks praegu see on kasutatud laadimismissiooni ajatamise probleemi lahendamisel, kuid sarnane lahendus võib-olla kasutatud ka teise funktsionaalsuse loomises.

Kirjeldus

Märksõnad

Mehaanika::Robotitehnika::Tööstusrobotite programmeerimine

Viide