Autonoomne ratasjalg

Meeskond

  • Vladimir Kuts
  • Vladimir Zaplava
  • Andrei Porõvaev
  • Pent Laineste
  • Marek Laul

Nädalaaruanded

Ratasjalg

Tavaliselt on ratastega liikurrobotite kasutamise tingimuseks liikumine tasasel pinnal, takistustest üritatakse lihtsalt ringiga mööda minna. Paljudel juhtudel ei pruugi see aga võimalik olla ja nii jääb robotile etteantud ülesanne täitmata. On ka jalgadega roboteid, mis suudavad mõningaid takistusi ületada, kui nende puuduseks on väike kiirus ning tasasel pinnal jäävad nad seetõttu ratastele alla. Piisava kiiruse ja samas võime takistusi ületada on võimalik saavutada ratta ja jala kombineerimisega. Ideaalne oleks, kui robot suudab rataste kuju muuta vastavalt olukorrale. Lahenduseks on ratasjalg, mis kombineerib endas ratta kiiruslikud omadused ja jala hea läbivuse. Käesoleva projekti eesmärgiks on luua lihtne autonoomne demorobot, mis kasutab ratasjalga liikumiseks ja takistuste ületamiseks.

Ülesanne

Konstrueerida ja valmis ehitada autonoomne robot, mis suudab ületada väiksema kõrgusega takistusi. Takistuste ületamiseks kasutada olemasolevat ratasjalga, ehitades sellele juurde mehhaanismi ratta avamiseks. Robot peab suutma tuvastada enda ees oleva takistuse ja hinnata objekti ületatavust(kõrgust). Vajadusel avab robot ratasjalad ja ületab takistuse, pärast takistuse ületamist ratasjalad suletakse ja edasi toimub liikumine ratastel. Kui takistust ei õnnestu ületada, muudab robot suunda ja liigub edasi kuni järgmise takistuse tuvastamiseni.

Nõuded ja piirangud süsteemile

  • Peab suutma autonoomselt avada ja sulgeda ratasjalgasid
  • Koostatud peamiselt kodulabori komponentidest
  • Peab suutma tuvastada takistusi ja hinnata takistuste ületatavust
  • Suudab ületada takistusi kõrgusega kuni ca. 5,5 cm.
  • Liigub ruumis ringi autonoomselt, takistusi vältides või neid ületades
  • Liikumine sisetingimustes

Süsteemi üldine mudel

Järgnevalt on toodud süsteemi üldine struktuuri mudel, millel on näha süsteemi üldine ülesehitus ja hierarhiline järgnevus.

Invalid Link
Süsteemi struktuuri mudel

Ideelahendused

Põhiküsimuseks antud ülesande lahendamisel ja roboti konstrueerimisel kujunes ratta avamissüsteem. Ideaalne lahendus oleks lihtsa ehitusega, võtaks vähe ruumi ja töökindlus suur. Tõsisemalt kaalusime kahte võimalust, mis erinesid üksteisest avamissüdamiku peatamise viisi poolest.

Invalid Link
Avamissüsteem pidurdusvardaga

Avamissüdamiku peatamine varda abil

  • Varda sattumisel ketta avasse fikseeritakse avamissüdamik kindlalt
  • Avamismootori võimsus väike
  • Konstruktsioon lihtne
  • Võtab vähem ruumi, puudub vajadus käigumootori võlli pikendada
  • Probleemiks varda sobitumine/eemaldamine avast, kulumine
Invalid Link
Avamissüteem hõõrdpiduriga

Avamissüdamiku peatamine piduri (hõõrdumise) abil

  • Sujuvam ratta avamine, puudub oht kinnikiilumiseks
  • Konstruktsioon keerulisem
  • Vajab rohkem ruumi
  • Hõõrdejõud ei pruugi tagada piisavat pidurdusmomenti.

Esialgu valisime variandi, kus avamissüdamik peatatakse varda abil. Põhjusteks antud konstruktsiooni lihtsus ja kindlus, et varras suudab avamissüdamiku kindlalt fikseerida.

Teiseks probleemiks oli tagaratta valik. Eesmärgiks leida lahendus, mille puhul oleks välistatud tagaratta kinnijäämine takistuse ületamisel ja sujuv roboti pööramine.

Tagaratta variandid

  • Omniwheel ratas. Ratta telje saab paigutada alusega ühte tasapinda. Puudub vajadus ratta pööramiseks. Probleemiks sobiva ratta kättesaadavus.
  • Pöörduv tagaratas. Keerulisem rattakinnitus, võib kergemini jääda ületatava takistuse taha kinni.
  • Kolmas võimalus on kasutada eelmise roboti olemasolevaid kahte ratast, seda juhul, kui eelmised kaks varianti ei õnnestu realiseerida. Näiteks sobilike parameetritega omniwheel'i ei ole võimalik hankida.

Mehaanika

Roboti komponendid on paigutatud alusraamile, mis on valmistatud 3 mm paksusest alumiiniumist. Käigumootorite kinnitused olid juba mootoriga koos olemas, seega alusraami oli lihtsalt tarvis avad puurida ja kruvidega mootorid kinnitada. Ratta avamiseks kasutame standardset servomootorit kodulabori komplektist. Servomootori külge on kinnitatud kaks varrast, mis mootori nurga muutudes liiguvad erinevas suunas. Ultrahelianduri kinnitamiseks kasutasime plekki, mille painutasime õige nurga alla. Oluline oli see, et anduri nurka maa suhtes saaks pleki painutamisega mõningal määral muuta. Mikrokontroller jaoks on alusesse puuritud avad, mis distantspukside abiga võimaldavad selle alusele kinnitada. Mootorite kontroller on asetatud mikrokontrolleri peale. Järgneval pildil on roboti 3D-mudelil näha komponentide paigutus alusraamil.

Algne 3D-mudel

Ratasjalg oli meil ülesannet alustades olemas, vaja oli juurde ehitada avamissüteem, mille abil robot saaks autonoomselt minna ratastelt üle jalgadele. Ratasjala enda kontruktsioonis põhimõtteliselt muutusi ei ole. Ainuke lisandunud detail on avadega ketas, mis on kruvidega jäigalt kinnitatud avamissüdamiku külge. Seetõttu muutus ka ratasjala kokkupanemine võrdlemisi ebamugavamaks, kuna ketas on mootori ja ratta vahel, kus on vähe ruumi kruvikeeraja ja mutrivõtmega opereerimiseks. Servomootoriga ühendatud varraste juhtimiseks ratta küljes oleva ketta avadesse on alusraamile paigutatud vastavad detailid.

Ratta detailid

Ratta detailid on omavahel ühendatud kruvide ja mutritega. Ratas on mootori võlli külge kinnitatud seadekruviga. Kuna aga ratas kippus pärast mõningast pöörlemist mootori võlli küljest lahti tulema, siis puurisime võllile koonilise ava, kuhu seadekruvi kindlamini sobitub. Olemasoleva mootori kinnitust täiustasime samuti, tulemusena on mootorid tugevamini alusraamiga ühendatud.

Järgnev animatsioon näitab ratta avamissüteemi põhimõtet.

Nagu näha, siis avamissüsteem on konstruktsioonilt üsna lihtne ja koosneb vähestest detailidest. Selle juures on omad plussid ja miinused. Vaja on ainult ühte servomootorit ning see ei pea arendama kuigi suurt momenti. Avamise jaoks on oluline käigumootorite suutlikkus. Algul kartsime, et antud lahenduse puhul võivad servomootorile mõjuda suured jõud. Tegelikkuses seda ohtu ei ole, sest varda juhik on rattale väga lähedal. See tähendab, et ratta avamisel/sulgemisel varrast pöörav moment on tühine, sest jõu õlg on väike. Ideelahenduste analüüsil sai arvatud, et kõige suuremaks probleemiks avamissüsteemi juures võib kujuneda varda sobitumine avamissketta avadega. Valmisehitatud süsteemi katsetamine kinnitas seda puudust. Kui varras ei satu ketta avasse, siis ta avaldab kogu rattale ühest küljest survet ning mõnel juhul kiilub terve ratas kinni ning avamine ei õnnestu. Mõningal määral õnnestus probleemi vältida sel moel, et servomootor liigutab varda avamisketta poole mõni aeg pärast käigumootorite rakendumist. Nii õnnestub rattal inertsi tõttu vältida kinnikiilumist. Antud süsteemi puhul on eeldatud, et ratas suudab oma lahtist asendit hoida ise hõõrdejõu abil. Selleks oli tarvis leida kinnituskruvide optimaalne pingutus, mille puhul käigumootorid suudavad ratast avamissüdamiku puhul liigutada ja samas ei lähe avanenud ratas ise kinni.

Järgnevalt on toodud paari detaili lihtsustatud joonised.

Servomootori kronstein

Antud detail valmistamisel lõigtakse sobivate mõõtmetega L-kujulisest profiilist välja vastava pikkusega tükk. Seejärel puuritakse kinnitusavad ja freesitakse servomootori sobitamiseks ava. Detaili materjaliks on alumiinium.

Avamissüsteemi ketas

Detail valmistatakse CNC-freespingis 3 millimeetri paksusest alumiiniumplaadist.

Elektroonika

Roboti juhtimiseks kasutame kodulabori komplektis olevat kontrollermoodulit, millele on paigaldatud mikrokontroller ATmega128. Mootorite juhtimiseks kasutame kontrollermooduli peale paigaldatavat mootorite moodulit. Roboti testimisel oli abi ka kodulabori komplekti kasutajaliidese moodulist. Roboti elektroonika üldine struktuur on järgneval plokkskeemil.

Elektroonikakomponentide plokkskeem
Mootorite ja andurite elektrilised ühendused
Hüpoteetiline mootorite driver

Mootorid

Rataste avamissüsteemi juures kasutasime standardset RC servomootorit. Avamissüsteemi mootori valikul on oluline positsioneerimise täpsus, arendatav moment ei pea olema kuigi suur. Seetõttu saigi valitud servomootor.

Rattaid/jalgu ringi ajavad alalisvoolumootorid täidavad tinglikult kahte ülesannet: esiteks võimaldavad robotil edasi liikuda, teiseks avavad koostöös servomootoriga rattad jalgadeks. Jalgadel edasiliikumine, eriti takistuste ületamine nõuab mootoritelt oluliselt rohkem jõudu/momenti kui lihtsalt ratastel sõitmine. Rataste avamisel peavad mootorid suutma ületada avamissüdamiku ja kodarate vahelist hõõrdejõudu ning tõstma roboti jalgade võrra kõrgemale. Otsustasime kasutada alalisvoolumootoreid, mis olid juba ülesannet saades ratasjalgadega koos olemas. Katsetamisel selgus, et mootorid suudavad oma tööga toime tulla juhul, kui aku pakutav pinge on piisavalt kõrge.

Tootja tüübinumber: 919D501

Tüüp: Ironcore Motor/ Spur Gearhead

Toitepinge: 4.5 → 15Vdc

Võimsus: 21,2 W

Pöörlemiskiirus: 316 p/min

Moment: 0,294 Nm

Ülekandetegur: 50:1

Aku

11.1 voldine LiPo

Juhtimine

Algoritm

Esialgne juhtimisalgoritmi flowchart

Lähtekood

Järgnevalt on toodud osa programmikoodist. Kogu lähtekood: ratasjalg.c.

int main()
{
    //taimeri seadistamine
    TCCR0|=(1<<COM01)|(1<<WGM00)|(1<<WGM01)|0x05;
    OCR0=255;
 
	//lcd ekraani initsialiseerimine
    lcd_alpha_init(LCD_ALPHA_DISP_ON);
    lcd_alpha_clear();
    char text[16];
 
    vertdist=ultrasonic_measure(pin_trigger, pin_echo);    
    horzdist=ultrasonic_measure(pin_trigger1, pin_echo1);
 
    unsigned short mindist=500;
    unsigned short maxdist=0;
    unsigned short openmindist=500;
    unsigned short openmaxdist=0;
 
	//Viikude seadistamine
    DDRC|=0x38;
    PORTC |=(0x38);
    DDRE|=(1<<PE4)|(1<<PE5);
    PORTE|=(1<<PE5);
    PORTE &= ~(1<<PE4);
    TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
    TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11);
    ICR1=36864;
    OCR1A=1843;
    OCR1B=1843;
 
    pin_setup_output(pin_trigger);
    pin_setup_input_with_pullup(pin_echo);
    pin_setup_output(pin_trigger1);
    pin_setup_input_with_pullup(pin_echo1);
 
    TCCR2|=(1<<WGM21)|(1<<CS20)|(1<<CS22);
    OCR2=144;
    TIMSK|=(1<<OCIE2);
 
    dcmotor_init(0);
    dcmotor_init(1);
    servomotor_init(0);
    servomotor_init(1);
    sei();
 
    bool flag2=true;
    bool flag1=true;
    bool flag0=true;
    bool roaming=false;
    bool potncollision=false;
    bool collided=false;
 
    unsigned short t0=clock;
    unsigned short t1=clock;
    unsigned short t2;
 
    Stop();
    sw_delay_ms(2000);
 
    //põhiline programmitsükkel
	while(1)
    {
        if(t0<clock)
        {           
 
            vertdist=filter(vertdist,pin_trigger, pin_echo);
            sw_delay_ms(100);
            horzdist=filter(horzdist,pin_trigger1, pin_echo1);
            if(!legsOpen)
            {
                if(vertdist>maxdist)
                    maxdist=vertdist;
                else if(vertdist<mindist)
                    mindist=vertdist;
            }
            else
            {
                if(vertdist>openmaxdist)
                    openmaxdist=vertdist;
                else if(vertdist<openmindist)
                    openmindist=vertdist;
            }
            t0=clock+10;
        }
        if(bit_is_clear(PINC,2)&&flag2)//punase led juures
        {
            flag2=false;
            OpenLegs();
        }
        else if(bit_is_set(PINC,2))
            flag2=true;
        if(bit_is_clear(PINC,1)&&flag1)//kollane
        {
            flag1=false;
            CloseLegs();
        }
        else if(bit_is_set(PINC,1))
            flag1=true;
        if(bit_is_clear(PINC,0)&&flag0)//roheline
        {
            flag0=false;
            static char count=1;
 
            mindist=500;
            maxdist=0;
            openmindist=500;
            openmaxdist=0;
            if(count&0x01)
            {
                roaming=true;//ürita autonoomslet töötada
                count++;
            }
            else
            {
                roaming=false;
                count++;
            }
        }
         else if(bit_is_set(PINC,0))
            flag0=true;
 
        if(roaming)
        {
            if(horzdist<50)//kui 50 cm midagi paistab
            {                
                potncollision=true;
            }
 
            if(horzdist<20)//kui kõrge takistus (20 cm)
            {
                PORTC &= ~(0x10);
                Stop();
                sw_delay_ms(50);
                BackWard();
                sw_delay_ms(1250);
                OCR0=255;
 
                TurnLeft();
                sw_delay_ms(1500);
                Stop();
 
                potncollision=false;
                PORTC |= 0x10;
            }
 
            else if(!legsOpen&&vertdist<8)//90?   kui rattad kinni ja näeb takistus
            {
                PORTC &= ~(0x20);
                OCR0=255;
                OpenLegs();                ;
                PORTC |= (0x20);
            }
 
            else if(!collided&&legsOpen&&vertdist<10)//kui põrkub kokku takistusega peale ratatste avamist
                collided=true;//abi flag
 
            else if(collided&&legsOpen&&vertdist>12)//120? kui ületanud takistuse
            {  
                PORTC &= ~(0x08);
                potncollision=false;
 
                OCR0=255;
                collided=false;
                CloseLegs();                
                PORTC |= (0x08);
            }
            else
            {                
                if(legsOpen)
                    OCR0=255;
                else
                    OCR0=100;
                ForWard();
            }            
        }
 
        else
        {
            Stop();
            OCR0=255;
        }
 
        sprintf(text,"l%dc%dp%dr%d %d",legsOpen,collided,potncollision,roaming,OCR0);
        lcd_alpha_goto_xy(0, 0);
        lcd_alpha_write_string(text);
        sprintf(text,"v%d h%d  ",vertdist,horzdist);
        lcd_alpha_goto_xy(0, 1);
        lcd_alpha_write_string(text);
     }
    return 0;
}

Valmislahendus

Pärast 9 nädalat rasket tööd valmis robot “Ratasjalg”. Kuigi robot vajaks veel natuke katsetamist, siis tuleb rahul olla sellega mis tehtud sai. Rataste avamissüsteem, mis meie ülesande juures oli põhiprobleem, toimib üldjuhul hästi. Samuti suudab robot eristada kõrget takistust madalast ning otsustada, kas rattad avada või suunda muuta. Järgnevalt on toodud pilt valmis robotist.

Ratasjalg

Ja siin väike video

Majanduskalkulatsioon

Komponentide puhul,mille konkreetset hinda ei suudetud või ei olnud võimalik kindlaks teha,on maksumust hinnatud umbkaudselt.

KomponentMarkKogusHind, EURMaksumus, EUR
DC mootor919D501 228,0956,18
UltraheliandurSRF05216,8033,60
AkuLiPo 11,1 V14040
Mikrokontroller arendusplaadigaATMega128180,4080,40
Standard RC servoDG S03NFSTD115,6015,60
Mootorite moodul 158,8058,80
Alusplaatide materjal 2510
Anduri- ja mootorikinnitused 4312
Rattad/ratasjalad 35
Kruvid, poldid ja mutrid 10
Kleepsud 5
Kokku 356

Tehtud tööd:

TööAeg, hHindMaksumus, EUR
Projekteerimine802160
Roboti testimine502100
Detailide freesimine46,4025,6
Detailide mehaaniline töötlemine15230
Roboti koostamine10220
Programmeerimine413123
Kokku200 450

Projektijuhtimine

Aja planeerimisel lähtusime peamiselt antud aine õppekorralduses toodud ajakavast. Täpsemalt on erinevatel ajaperioodidel tehtud tööd kirjas nädalaaruannetes, samuti võib sealt ka leida vastavale aruandele järgnevate nädalate plaanid. Roboti valmimine venis lõpuks päris palju, kuna mitmeid esialgseid lahendusi tuli modifitseerida ja see kulutas oluliselt aega. Tulemusena ei saanud kuigi pikalt tegeleda roboti testimisega. Oluliselt aitasid projekti valmimisele kaasa ettekanded, mis motiveerisid etteantud tähtajaks midagi valmis tegema ja samas võimaldasid saada tagasisidet juhendajatelt ja teistelt meeskondadelt. Meeskonnatöö sujus rahuldavalt, mõnel juhul oli probleeme kõigile meeskonnaliikmetele sobivate aegade leidmisega. Meeskonnas väga ranget tööjaotust ei olnud, erandina programmeerimisega tegeles peamiselt üks inimene. Aruannete koostamise ja töö dokumenteerimisega tegeles peamiselt meeskonna juht, kuid materjali dokumentatsiooni jaoks kogusid ka teised liikmed. Komponentide ja materjalide hankimine käis läbi juhendajate, roboti vastava osaga tegelev meeskonnaliige andis juhendajale teada mingi komponendi või materjali vajadusest.

Kokkuvõte ja järeldused

Kokkuvõttes sai projekteeritud ja valmis ehitatud enam-vähem töötav autonoomne robot. Kõige olulisem viga, mille me projekti käigus tegime, oli liiga vähese aja jätmine roboti katsetamiseks. Katsetamise käigus tulid esile mitmed probleemid, mida me projekteerimise käigus ei osanud karta. Samuti oleks olnud mõistlik natuke rohkem aega kulutada ideelaheduste analüüsile. Valisime kasutatava lahenduse kiiresti välja, et asi saaks kiiremini realiseeritud, kuid paremini läbimõeldud valiku tegemine võinuks roboti valmimist hoopis kiirendada.

Roboti konstrueerimine andis meile hea ettekujutuse mehhatroonikasüsteemi ülesehitusest. Tõdesime, kui oluline on süsteemi mehaanika-, elektroonika ja programmiosa omavaheline sobivus. Projekti käigus oli meil võimalus rakendada varem omandatud teoreetilisi teadmisi, lisaks arendasime ka meeskonnatöö ja aja planeerimise oskust. Oluline asi, mis meie tööd projekti käigus aeglustas, oli mõningate roboti osade ebamugav koostamine. Seega tulevikus üritame konstrueerida süsteemid niiviisi, et neid oleks võimalik kiiresti kokku panna ja komponentide vahetamiseks lahti võtta.

Viited ja kasutatud materjalid

  1. Kodulabori juhendmaterjal http://home.roboticlab.eu
  2. Komponentide hinnad http://www.ittgroup.ee
  3. Ratasjala kirjeldus http://inseneeria.eas.ee
  4. Mikrokontrolleri andmeleht ATMega128
et/projects/tudengid11/ratasjalg.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0