Kasutaja tarvikud

Lehe tööriistad


projektid:voistlusrobotid:robotex:2012:voistkonnad:siil

Siil

Ilusaima hingega roboti auhind Proeksperdilt:

Tegijad

Arhitektuur

Robot Siil põhineb ühiselt arendatud ja ehitatud prototüüprobotil.

Tarkvara

PC

PC tarkvara arendati ühiselt DarthMäger, Nugise ja Siili võistkonna vahel. Kood baseerus eelmise aasta DartMäger projektil.

Üldine

Siili tarkvara üldine arhitektuur on ära toodud alljärgneval pildid.

Kuna Mägra, Nugise ja Siili roboti vahel kasutati ühtset tarkvara platvormi, siis on arendusel kasutatud põhimõtet, et on olemas baasklassid ning iga robot pärib nendest oma roboti spetsiifilised klassid. Siili roboti puhul on loodud RobotBase klassist klass Siil, kus luuakse Siili spetsiifilised objektid (AlgorithmSiil, ImageProcGigESiil, FrameFromGigE, CANWorkerThread). Baasklasside ja nendest pärinevate klasside põhiülesanded on:

  1. FrameSource abil saadakse kaamera pilt
  2. ImageProcessor on mõeldud pildi töötlemiseks
  3. Algorithm teostab roboti loogikat palli mängimiseks
  4. WorkerThread seob omavahel pilditöötluse, roboti andurid ja algoritmi ehk kui on uusi andmeid pilditöötlusest või roboti anduritelt, siis need edastatakse algoritmile ning kui algoritm on arvutanud uued juhtkäsud siis need edastatakse roboti riistvarale.
Kommunikatsioon

Kommunikatsioon roboti riistvaraga tehakse üle jadapordi, sinna kirjutamiseks ja sealt lugemiseks kasutatakse CSerial klassi. SpineComm klass pärineb CSerial klassist ja on põhiliselt abstraktseks klassiks, et iga robot saaks luua COMM klassi, kus teostatakse oma robotile spetsiifilise andmepakettide analüüsi ja loomist. Sõltumata andmepaketi formaadist, sissetulevad andmed salvestatakse lõpuks SpineData objekti, mis WorkerThreadi abil jõuavad hiljem algoritmini. Samas algoritmis loodud uued käsud jõuavad workerThread abil SpineCmd objekti, mis edastatakse juba SpineComm klassile. Laiendatud CANWorkerThread võimaldab teostada vajadusel oma roboti spetsiifilise tegevusi, kui sisse on tulnud uusi andmeid või uusi andmeid saadetakse välja. (Nt. roboti riistvarast tulnud värava valiku nupu vajutuse peale saadetakse riistvara ekraanile kiri vastavast väravast sõltumata algoritmi hetkeolukorrast).

Pilditöötlus

Roboti pilditöötluseks on eraldi lõim ImageProcessor, kus loodud VisionFrameData objekti kasutatakse pildilt tuvastatud asjade edastamiseks läbi WorkerThreadi algoritmile. Siili puhul tuvastatavad objektid olid pallid, kollane ja sinise värav ning roheline väljak. Iga pildi piksli kohta oli 4 baidine andmehulk (RGBA), kus R, G ja B omasid RGB värviruumi värvuste väärtusi. Pildi kalibreerimiseks kasutati „Look Up Table (LUT)“, kus iga võimalik värvikombinatsioon tähistas kas palli, mõnda väravatest või mõnda muud eelnevalt piltide abil kalibreeritud objekti.

Algoritm

Algoritmi puhul on tegu baasklassiga, kust Siili algoritm pärineb (AlgorithmSiil). Viimane loob olekud (State) ja seob üleminekud olekute vahel. Siili puhul on kasutusel kolm olekut:

  1. StateGo: väga lihtne olek, mis käivitub esimesena ning eesmärk on robotit sõidutada mingi kindla aja jooksul otse suunas edasi. Kuna pilditöötluse ebatäiuse tõttu ei olnud stardiolekust rünnatavat väravat näha, siis kasutati seda olekut, et robot sõidaks alguses poole väljakuni ning alles siis hakkaks palle otsima.
  2. StateApproch: kõige keerulisem olek, kus toimub palli otsimine. Siin kasutatakse Pid klassi pallini sujuvaks lähenemiseks.
  3. StateKickBall: siia olekusse tullakse kui palli sensor on rulli all tuvastatud palli. Siin toimub rünnatava värava otsimine ja värava leidmisel selle sihtimine ja sinna löömine.

StateSignalObject klassi kasutatakse olekute vahel signaalide (andmete) vahetamiseks. Antud juhul StateKickBall edastas StateApproch olekule, et kas palli löömine õnnestus või juhtus hoopis palli kaotus.

Kommunikatsioonimoodul

Allpool on toodud kommunikatsioonimooduli main väljakutsutavate funktsioonidega. See on hea pilt, näitamaks millised osad moodulil on.

  1. CAN - tagab suhtluse CAN siini peal. Sõnumite vastuvõtmine ja saatmine.
  2. GPIO - käsitleb mikrokontrolleri sisendeid ja väljundeid, siia alla käib LED-ide ja pieso juhtimine, nuppude asendite lugemine.
  3. OLED - tegu on OLED LCD ekraani juhtimise osaga. Kommunikatsioonimooduli ekraanile kirjutatakse rünnatav värav (kollane või sinine) ning „start“ ja „stop“.
  4. USART - kommunikatsioon PC-ga üle jadaliidese. Sõnumite vastuvõtmine ja saatmine.
  5. DataHandler - teostab andmete pidevat konrolli ning vajadusel seab andmeolekuid ümber (nt. kui andmeid ei ole piisavalt tihti uuendatud, siis märgib andmed kui mitte usaldatavad.)
  6. TaskHandler - keskne osa moodulis. vt. eraldi peatükki ülesannete käivitamine.

Pallimoodul

Mootorikontroller

Ülesannete käivitamine (TaskHandler)

TaskHandler on sarnane kõikides CAN sõlmedes (kommunikatsioonimoodul, pallimoodul, mootorikontrollerid). See kontrollib pidevalt jooksvat aega ning ülesannete tabeli („table Of Tasks“) alusel käivitab eelnevalt defineeritud ülesandeid (_TASK). TaskHandleri ajaresolutsioon on 1m, mis tähendab, et iga 1 ms möödumisel saab TaskHandler aru, et ajamuutus on toimunud. Ülesannete defineerimisel on oluline jälgida, et ülesanded ei tohi kaua kesta, kuna vastasel korral järgmine ülesanne jäetakse vahele. Igal ülesandel on oma defineeritud periood ja nihe. Nihe on vajalik selleks, et kõik ülesaded teatud ajahetkel korraga ei sooviks käivitumist. Järgnevalt on toodud üks näitetabel kommunikatsioonimooduli alusel. Siin käivitatakse CAN ja UART ülesanded iga 5 ms tagant, kusjuures UART-l on nihe 2 ms, mis tähendab, et UART ülesanne käivitatakse ajahetkedel 2, 7, 12, 17 jne. kui CAN omad 0, 5, 10, 15 jne.
const TASK_STRUCT TaskHandler_tableOfTasks[] = {

{TASK_CAN, 5, 0, CAN_TASK },
{TASK_LED, 400, 4, GPIO_TASK_blinkLED },
{TASK_CONTROL, 10, 4, GPIO_TASK_readButtons },
{TASK_UART, 5, 2, USART_TASK },
{TASK_DATA, 10, 4, DataHandler_TASK },
{TASK_LCD, 200, 0, OLED_LCD_TASK }
};

Sõnumiandmete käsitlemine

UART ja CAN sõnumid on kirjeldatud eraldi dokumendis http://www.robotiklubi.ee/svn/robotex2012/ITKiller/Documentation/Communication.docx Allpool kirjeldatud sõnumiandmete käsitlemine on realiseeritud PC tarkvaras, kommunikatsioonimoodulis ja pallimoodulis. Koodi kirjutamisel on kasutatud CaseCatcher tööriista, mille abil saab igale roboti sõlmele (PC, pallimoodul jne.) defineerida signaalid ja sõnumid ning tööriist genereerib igale sõlmele eraldi DataLayerConfig ja PacketConfig .h ja .c failid. Tegu on siis andmekihiga, kus DataLayerConfig sisaldab andmemassiivi hoidmaks signaalide väärtusi ja PacketConfig defineerib sõnumite formaadid. Et loogika saaks neid andmeid kasutada on loodud eraldi DataLayer osa, mis sisaldab andmekihist lugemise ja sinna kirjutamise funktsioone. Allpool on toodud näide, kus nuppude asend salvestatakse andmekihti kasutades DataLayer'i funktsiooni DL_setData.

Lisaks DataLayer osale on andmekihti toetamas ka DataHandler ja PacketHandler. DataHandler teostab andmete pidevat konrolli ning vajadusel seab andmeolekuid ümber (nt. kui andmeid ei ole piisavalt tihti uuendatud, siis märgib andmed kui mitte usaldatavad). PacketHandler aga sisaldab funktsioone toetamaks sõnumipakettide ülesehitamist ja sõnumitest andmete lugemist. PacketHandler, DataLayer, DataHandler funktsioonid on universaalsed selles mõttes, et uute PacketConfig ja DataConfig genereerimisel ei ole vajadust nendes sisalduvaid funktsioone muuta. Allpool on toodud pilt, kuidas andmekihi erinevad osad omavahel seotud on:

Mehaanika

Roboti kere koosneb moodulitest, mis kinnituvad raami külge. Raam ja moodulid on valmistatud 3mm alumiinumist ja kokku joodetud Durafix jootevardaga. Mooduliteks on:

Löögimehanism

Löögimehanism koondab endasse kõik golfipalliga manipuleerimiseks vajaliku:

„Dribbler“ ehk rull, mis paneb palli roboti poole pöörlema. Seekord on rull ühtlase läbimõõduga ja palli tsentreerimiseks kasutatakse „V“ kujulist sahka, mis asub löögimehanismi alaosas. Rull saab parema haarde tagamiseks üles-alla liikuda.

„Kicker“ ehk solenoid koos lineaarjuhikutel liikuva sahaga lööb palli väravasse. Solenoidi löögitugevust saab määrata kondensaatori laadimispingega.

Kõige peale kinnitub elektroonikaplaat, millel olev mikrokontroller saab juhtida nii rulli kiirust kui ka löögi aega. Palliandur on lahendatud optokatkestiga.Signaal saadakse siis, kui pall on rull all ja rull on tänu pallile tõusnud kõrgemale ja rulli kinnituse külge kinnitatud „keel“ on kiire katkestanud.

Toitemoodul

„Power“ ehk toitemoodul peidab endas kahte LiPo akut ja toiteplaate: üks kaamerale ja arvutile step-up/ step-down konverteriga ja teine ülejäänud moodulitele. Mõlemal plaadil on alapinge alarm ja tumbler lüliti roboti toite sisse ja välja lülitamiseks.

Toitemoodul ühendatakse toiterõngaga ja ka otse kaamera ja arvutiga.

Toiterõngas

Koostatud kahest poolest ja trükplaadist, millel jooksevad toite ja CAN rajad.

Arvutimoodul

Arvuti mooduli külge on kinnitatud FitPC arvuti.

Kaamera

Basleri kaamera kinnitub vaheraami ja -rõngaga roboti raami külge. Kaamera asendit külgsuunas reguleerida ei saa. küll aga nurka, asetades seibe nelja kinnituspoldi alla.

Peeglikinnitus

Peeglikinnitus on valmisatud ka 3mm alumiinimist. Peegel ise kinnitub M5 poldiga vaheraami külge ja see omakorda nelja M3 poldiga suurema plaadi külge. Plaat on püstiste postidega ünedatud 10×10 alumiinim latiga. Selline konstruktsioon lubab peegli kõrgust ja nurka muuta postide piludes polte liigutades. Külgsuunaline reguleermine toimub Peegli nihutamisel vaheplaadi piklikus avas ja vaheplaadi liigutamisel pealmise plaadi suhtes.

Raami külge kinnituvad postid kuue M4 poldiga.

Peegel oleks ideaaljuhul parabooli kujuline, aga Siili puhul on tegu parabooli lähedase käsitsi viili ja puurpingi abil valmistatuga.

Mootorimoodul

Mootori moodul koosneb mootorist, mootorikontrollerist, enkoodrist ja omnirattast. Mootor kinnitub raamile alt poolt nelja M5 poldiga. Toiterõnga külge ühendatakse Toitejuhtmed ja CAN pistik. Mootorikontrolleri parema jahutuse ja isoleerituse tagamiseks kinnitatakse see termoteibiga alumiiniumist alusplaadi külge.

Omnirattad on uued ja suurema läbimõõduga kui eelmisel aastal kasutatud. Eelnevalt oli ühe ratta küljes 15 väikest ratast, nüüd on 19. See võimaldab mootoreid kinnitada põhjaplaadi peale.

Kommunikatsioonimoodul

Kommunikatsiooni moodul asub standardses plastikkarbis ja see omakorda kinnitub roboti raamile alusplaadi abil. COM-moodul ühendub arvutiga RS232 andmesiiniga ja robotiga CAN siini pidi.

Galerii

Hinnang

Positiivne

  • kogu robotiklubi suutis kokku võtta ning ühtse meeskkonnaga ühine platvorm luua, mis tõid Nugisele mehaanika auhinna ning Siilile parima koodi auhinna
  • Siil suutis mängida ja isegi ühe võidu koju tuua
  • varasemate aegadega võrreldes suudeti robot palli mängima panna juba mõni päev enne võistlust

Negatiivne

  • peegli kumerus oli natuke kehv selles osas, et kaugemal asuvad objektid muutusid väga väikesteks ning raske oli neid eristada müra seast. Sellest tingituna ei näinud robot vastase väravat üle poole väljaku, mis tegi mängimise raskeks kui robot leidis palli oma väljaku poole pealt.
  • ühtse platvormi ehitus venis ning alles kuu enne võistlust sai robotiga alles sõitma hakatud
  • ühtse platvormi venimisega jäi testimise ja algoritmi arenduse aeg lühikeseks
projektid/voistlusrobotid/robotex/2012/voistkonnad/siil.txt · Viimati muutnud: 2016/09/03 15:44 persoon raivo.riiel