U P O R A B N A I N F O R M A T I K A102 2020 - πtevilka 2 - letnik XXVIII Spomini na prve korake v robotiko v Sloveniji pOGLEDI V zGODOVINO Spomini segajo v sedemdeseta leta prejšnjega stoletja in na ustvarjalno delo na Inštitutu Jožef Stefan (IJS). Naslednje vrstice odražajo le enega od pogledov, saj nas je bilo ustvarjalcev kar nekaj, večinoma pa je naše delo preveval veliko razvojno raziskovalno navdu- šenje. Prav bi bilo, da te vrstice dopolnijo še drugi »igralci«, saj so moji spomini le delni, pa tudi po toli- kšnem času že nekoliko zamegljeni. Z današnjega stališča so stvari morda videti pre- proste, a takrat smo orali ledino in imeli za današnje pojme na voljo res skromno tehnologijo. Ker so bili tudi prvi koraki v robotiko s tem pogojeni, je prav, da o teh romantičnih časih povem kaj več. Osnova so tedaj bili mikroračunalniki z mikro- procesorji 8008, kasneje pa seveda tudi drugimi. Prvi tak razvojni mikroračunalnik smo kupili po kompo- nentah in prvi program zanj ročno, dejansko binarno vpisali s stikali kar v strojni kodi in upali, da se pri tem ne bi kaj zmotili, saj je bil postopek zamuden. Kasneje pa smo prešli na lasten razvoj mikroraču- nalnikov. V našem odseku za avtomatiko, biokiber- netiko in robotiko je bil temelj tako imenovani mi- kroračunalnik Darta 80, ki ga je leta 1980 modularno zasnoval Jurij Tasič. Zanimivost je še, da se je samo na IJS v različnih odsekih pojavilo več podobnih mi- kroračunalniških konceptov. To so bili časi Jugosla- vije in hladne vojne med blokoma. Tako nismo smeli (z mikroračunalniki) avtomatiziranih sistemov, ki so imeli vgrajene ameriške mikroprocesorje, kljub siceršnjemu lastnemu razvoju, posredovati v dežele vzhodnega bloka. Mikroprocesorji so bili praktično prešteti. A o tem kasneje. V sedemdesetih letih prejšnjega stoletja je bilo programiranje mikroračunalniških sistemov sprva zamudno, saj takrat nismo imeli zunanjih magnetnih medijev (diskov ali vsaj kaset). In urejevalniki bese- dila, torej izvorne programske kode, so bili tedaj zelo primitivni, enovrstični, kar je za današnje čase nepoj- mljivo. Samo za zgled, kako je potekal postopek od odkritja programerske napake do njenega popravka. Naslednjih nekaj stavkov lahko razume le računalni- kar tiste generacije. Koraki so bili naslednji: Saša Divjak Univerza v Ljubljani, Fakulteta za računalništvo in informatiko, Večna pot 113, SI-1000 Ljubljana sasa.divjak@fri.uni-lj.si Slika 1: Razvoj programske opreme je potekal s pomočjo teleprinerja 1. V računalnik smo preko luknjanega traku prebra- li urejevalnik besedila 2. Prebrali so nato izvorno programsko kodo z ugo- tovljeno napako. 3. Popravili smo napako v izvorni kodi 4. Sledilo je luknjanje popravljene izvorne kode na nov trak 5. Nato sledi branje tako imenovanega assemblerja (zbirnika) 6. In nato branje popravljene izvorne kode našega programa 7. Ahh, ponovno branje popravljene izvorne kode (tako je pač zbirnik deloval, v dveh pasovih) 8. In končno luknjanje tako pridobljene binarne (strojne) kode na luknjan trak 9. In branje traku z binarno kodo nazaj v ciljni ra- čunalnik. Ob takratni hitrosti teleprinterjev (tele- type) je ves postopek trajal kar nekaj minut. Da- nes za to potrebujemo drobec sekunde. Ni čuda, če smo se temu hoteli izogniti. In ob odkritju manjših programskih hroščev smo pogosto raje napakico popravili kar na strojnem nivoju (če se je dalo) in »spekli« nov EPROM. To je vrsta bral- nega pomnilnika, ki omogoča večkraten zapis po- datkov. Pomnilnike pobrišemo z UV-svetlobo, ki preko odprtine na čipu toplotno ogreje pomnilne celice, ki zato pozabijo staro vsebino. Sledi progra- miranje z enakim programatorjem. Posledica take slabe navade je lahko bila, da smo na koncu sicer imeli pravilno delujoč program, nje- gova izvorna koda pa temu ni več ustrezala. Za da- našnje razmere hudo napačen pristop. Programiranje je v tistih časih tako praviloma potekalo na ravni zbirnega jezika. Razvoj v svetu je seveda tekel naprej in v drugi polovici sedemdese- tih let smo dobili nekaj računalnikov PDP 11 znamke Digital, ki pa so že bili opremljeni z diskom. Za tak računalnik sem razvil tako imenovani križni zbir- nik (crossassembler). Ta je omogočal bolj udobno in hitrejše razvijanje in popravljanje programov za naše avtomatizirane sisteme. Še vedno pa je programiran- je potekalo na ravni zbirnega jezika, rezultat pa je še vedno bila binarna koda na luknjanem traku. A ta- krat so bili luknjači in bralci parirnega traku že precej hitrejši. Za hip se tu ustavimo in se povrnimo na proble- matiko prepovedi izvoza računalniških avtomatizacij z ameriškimi čipi na vzhod. V odseku smo dobili pro- jekt z Iskro, v okviru katerega naj bi razvili računal- niško krmiljen spektrometer za znano firmo Carl Ze- iss, ki pa je bilo v takratni Vzhodni Nemčiji. Kaj stori- ti?. Povrnili smo se h koreninam pojava mikroproce- sorjev. Prvi mikroprocesor je bil 4 bitni Intel 4004, ki je v bistvu izhajal iz kombinacije CPE in pomnilnika. In prav tako pot smo ubrali z originalno kombinacijo klasičnega kalkulatorskega čipa in pomnilnika ROM. Tako smo dobili »svoj lastni« mikroračunalnik, ki ni bil podvržen embargu. Dopolnili smo ga s svojim naborom ukazov in s posebej zanj razvitim zbirnim jezikom in zbirnikom. Za aparaturno zasnovo je poskrbel Jurij Tasič, programski del pa je bil moj. Seveda so bili v razvoj vključeni tudi drugi sodelavci. Spomnim se, kako smo s prototipom z avtom odšli v Vzhodno Nemčijo, za takratno železno zaveso. In v Carlu Zeissu so nam najprej pobrali potne liste in smo jih dobili nazaj šele po uspešni predaji prototipa. K sreči brez kakšnih zapletov. Spektrometer SPEKOL je bil nato uspešnica Iskre Horjul in je tudi dobil zlato nagrado v Leipzigu. Ekipa v Sloveniji pa je tudi dobi- la priznanje takratnega Sklada Borisa Kidriča. Take in podobne avtomatizacije so bile dobre iz- kušnje za prve korake v robotiko. Prvi robot smo leta 1978 razvili v sodelovanju z inštitutom Mihajlo Pu- pin iz Beograda. Elektromehanski del so razvili oni, računalniški del pa pri nas. Spet smo vzeli kot os- novo mikroračunalniški sistem Darta. Zanimiv pa je bil razvoj programske opreme, ki sva jo razvila Pavle Oblak in jaz. Navdušilo me je teamsko delo in modu- laren pristop. S Pavletom sva predvideno program- sko podporo razdelila v dva dela in vsak je delal svo- je. Vendar en del ni mogel delovati brez drugega. Če se prav spomnim, je eden prevzel gonilnike periferije (torej bodočega robota), drugi pa samo programiranje bodočega robota. Ker pa je delo potekalo vzporedno in vsak od naju še ni mogel imeti dela drugega, je bilo pomembno, da sva jasno definirala stične točke, danes bi temu rekli API (Application Programming Interface). Za (začasno) manjkajoče dele pa sva ses- tavila programski simulator (morda bolje emulator) in bila tako med seboj neodvisna. Verjetno pa je kljub temu pomagalo, da sva delala v istem prostoru. Ko je bil »najin« del razvit in v maksimalni možni meri preizkušen, je sledilo potovanje v Beograd. In v avtu sva imela naš računalnik. Po nekajurni vožnji je sledilo prvo srečanje z elektromehanskim delom ro- bota. In skoraj neverjeten čudež. Praktično takoj sta se »naš« in Pupinov del v celoti razumela, čemur je Slika 2: Spektrometer Spekol U P O R A B N A I N F O R M A T I K A104 2020 - πtevilka 2 - letnik XXVIII seveda sledila vesela novica v Ljubljano. V dolgolet- ni razvojni praksi se kaj takega redko zgodi. Striček Murphy (dobro znani Murphyjev zakon, da če kaj gre lahko narobe, se bo to zanesljivo zgodilo) se je očitno med dolgo vožnjo proti Beogradu utrudil in zaspal. Po prvem jugoslovanskem robotu so sledili pro- jekti robotizacije v sodelovanju z Gorenjem. Takrat je na IJS nastala zelo močna ekipa, ki je pokrivala praktično vse. Če se ne motim, je bilo skupaj s so- delavci Gorenja v razvoj tako ali drugače vključenih okrog 50 ljudi. V računalniškem smislu je spet slu- žil kot osnova mikroračunalnik Darta, ki pa je tedaj že bil dopolnjen z disketnim sistemom. Razvoj je bil popolnoma naš. Sam lahko nekaj besed več po- vem o programskem delu. Tudi za disketno enoto so moji sodelavci sami razvili krmilnik (aparaturni vmesnik), za katerega pa je bilo treba šele napisati programski gonilnik. Vse, kar smo imeli na voljo, so bile specifikacije integriranega vezja v krmilniku. To je bilo treba preštudirati in nato hoditi korak za korakom. Prvi uspeh je bil, da smo znali na disketo zapisati na absolutne naslove sledi s testnimi podat- ki in jih ponovno prebrati nazaj. To so seveda zelo nizkonivojske operacije. Pri popularnih računalnikih PC bi temu ustrezal BIOS. Sam sem pred tem že imel izkušnje z znanim Iskrinim računalnikom IskraDa- ta 1680. Tako je sledil razvoj višjenivojskih operacij in končno smo dobili svoj lasten diskovni operacij- ski sistem (neke vrste DOS). Luknjani trak je šel v zgodovino, programe smo lahko iz razvojnega ra- čunalnika (Digitalov PDP) prenašali na ciljnega pre- ko disket. A lastni razvoj ima tudi svojo ceno. »Naš« format disket je bil seveda drugačen od formata, ki ga je razumel PDP-jev operacijski sistem (takrat še RT11). Potrebna je bila pretvorba. Z nekaj spretnosti smo tudi pri našem sistemu uvedli isti format zapisa in stvar poenostavili. In nauk iz tega? Dobro se je dr- žati uveljavljenih standardov. Programiranje programske opreme robotov je do- kaj kompleksna zadeva. Ne pozabimo, da smo vse to še vedno delali na nivoju zbirnega jezika. Kompleksnost programske opreme seveda olajša modularno progra- miranje, ki predvsem omogoča testiranje posameznih, malo bolj enostavnih modulov. Nedvomno so pri tem pomagale izkušnje s prvim jugoslovanskim robotom. Naslednji korak je bil razvoj lastnega večopravilnega operacijskega sistema (multitasking). Po mojih zamis- lih in vodstvom ga je nato realiziral v okviru svoje diplome eden od mojih študentov. Še leta sem nato na fakulteti pri predmetu »Operacijski sistemi« pre- daval poglavje »Naredimo si sami lasten operacijski sistem«. Danes je to seveda zastarelo in operacijski sistemi so danes precej bolj dodelani. A je delovalo. Če bi danes korakal v tej smeri, bi uporabil popularni LINUX (a tega takrat še ni bilo). Slika 3: Prvi jugoslovanski računalniško krmiljeni robot UMS-2. Na sliki so tudi člani ekipe Jadran Lenarčič, Pavle Oblak, Uroš Stanič in Saša Divjak U P O R A B N A I N F O R M A T I K A 1052020 - πtevilka 2 - letnik XXVIII V bistvu je bila ta sistemska programska opre- ma jedro vseh takratnih robotov, ki smo jih razvili na Inštitutu Jožef Stefan. V letu 1979 sem sodeloval pri razvoju robota GORO 1 za Gorenje in v letu 1980 robota STEFAN 80, ki naj bi bil namenjen kovanju. Za robot GORO 101 je v letu 1983 ekipa v sestavi Pavle Oblak, Uroš Stanič, Jadran Lenarčič, Saša Di- vjak, Danijel Šlebinger, Anton Ružić, Alojz Žnidaršič, Viktor Vavpot, Boris Krevzel, Miomir Vukobratović, Dragan Hristić in Miroslav Štrubelj prejela nagrado Sklada Borisa Kidriča za izume in tehnične izboljšave. STEFAN 80 je bil zares impozanten robot, ki je s svojo roko imel delovni obseg nekaj metrov in je bil zmožen prenašati tudi malo težji tovor. Številka 80 v imenu robota pravzaprav pomeni, da je imel nosilnost kar 80 kg. Seveda so tudi pri razvoju programske opreme sodelovali tudi drugi. Spomnim se predvsem Antona Ružića, pa seveda Pavleta Oblaka. Prav na robot STEFAN 80 je navezana še zanimi- va anekdota. Robota naj bi razstavili na konferenci v Portorožu. In, ko je bil postavljen, ni delal. Kriza! Sledilo je ugotavljanje, zakaj robot miruje. Seveda človek, vsaj programer, najprej pomisli, da je napa- ka v njegovem programu. In sledilo je sistematično preverjanje modula za modulom. Ure so tekle in dan se je prevesil v pozno noč. In končno nenavadno od- kritje. Napaka ni bila programska, pač pa začuda v mikroprocesorju, v katerem se je – zelo čudno – po- kvaril en časovnik (timer), čeprav je sam mikroproce- sor navidezno deloval povsem v redu. Z malo iznaj- dljivosti smo okvarjeni časovnik programsko simuli- rali in robot je spet, še pravočasno, zaživel. Pa saj smo bili navajeni dolgotrajnega dela. Nič nenavadnega ni bilo, če smo na projektih delali tudi več kot 12 ur na dan. To so bili romantični časi, pre- pleteni z navdušenjem. V tistih časih se je ponekod že pojavil tudi termin inteligentne robotike. Vendar so tisti, ki so začeli s tako dejavnostjo, robote kupova- li in jih nadgrajevali v smislu umetne inteligence. Mi pa smo robote razvijali in sami delali. Hiše ne moreš zgraditi, če nimaš prej temeljev. Tudi inteligentnih robotov bi ne bilo, če ne bi nekdo najprej ustvaril ro- botov. Slika 4: Industrijski robot GORO1 Slika 5: Industrijski robot STEFAN 80