Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:projects:tudengid11:ratasjalg [2011/03/26 11:59] MAHB082783et:projects:tudengid11:ratasjalg [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 11: Line 11:
   - {{:et:projects:tudengid11:ratasjalg:ratasjalg_aruanne2.pdf|Nädal 2}}   - {{:et:projects:tudengid11:ratasjalg:ratasjalg_aruanne2.pdf|Nädal 2}}
   - {{:et:projects:tudengid11:ratasjalg:ratasjalg_aruanne3.pdf|Nädal 3}}   - {{:et:projects:tudengid11:ratasjalg:ratasjalg_aruanne3.pdf|Nädal 3}}
 +
 +===== 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 ===== ===== Ü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. 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 ===== ===== Süsteemi üldine mudel =====
Line 85: Line 97:
  
 [{{ :et:projects:tudengid11:ratasjalg:elektroonika.png?500 |Elektroonikakomponentide plokkskeem}}] [{{ :et:projects:tudengid11:ratasjalg:elektroonika.png?500 |Elektroonikakomponentide plokkskeem}}]
 +
 +[{{:et:projects:tudengid11:ratasjalg:elektriskeem.png?600|Mootorite ja andurite elektrilised ühendused}}]
 +
 +[{{:et:projects:tudengid11:ratasjalg:skeem2.png?550|Hüpoteetiline mootorite driver}}]
  
 === Mootorid === === 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.+Rataste avamissüsteemi juures kasutasime [[http://www.ittgroup.ee/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=91&category_id=15&option=com_virtuemart&Itemid=12&lang=en|standardset RC servomootorit]]. Avamissüsteemi mootori valikul on oluline positsioneerimise täpsus, arendatav moment ei pea olema kuigi suur. Seetõttu saigi valitud servomootor.
 {{:et:projects:tudengid11:ratasjalg:rcservo.png|}} {{:et:projects:tudengid11:ratasjalg:rcservo.png|}}
  
 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. 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.
 +
 +{{:et:projects:tudengid11:ratasjalg:mootor.png|}}
 +
 +~~CL~~
 +
 +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 === === Aku ===
 +
 +11.1 voldine LiPo
  
 ===== Juhtimine ===== ===== Juhtimine =====
 +
 +==== Algoritm ====
  
 [{{ :et:projects:tudengid11:ratasjalg:flowchart.png | Esialgne juhtimisalgoritmi flowchart}}] [{{ :et:projects:tudengid11:ratasjalg:flowchart.png | Esialgne juhtimisalgoritmi flowchart}}]
 +
 +==== Lähtekood ====
 +
 +Järgnevalt on toodud osa programmikoodist. Kogu lähtekood:  {{:et:projects:tudengid11:ratasjalg:ratasjalg.c}}.
 +
 +<code java>
 +
 +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;
 +}
 +
 +</code>
 +
 +===== 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.
 +
 +[{{:et:projects:tudengid11:ratasjalg:valma.jpg?600|Ratasjalg}}]
 +
 +Ja siin väike video
 +
 +{{youtube>large:j8UShJ8e4qc }}
 +
 +===== Majanduskalkulatsioon =====
 +
 +Komponentide puhul,mille konkreetset hinda ei suudetud või ei olnud võimalik kindlaks teha,on maksumust hinnatud umbkaudselt.
 +
 +^Komponent^Mark^Kogus^Hind, EUR^Maksumus, EUR^
 +|DC mootor|919D501| 2|28,09|56,18|
 +|Ultraheliandur|SRF05|2|16,80|33,60|
 +|Aku|LiPo 11,1 V|1|40|40|
 +|Mikrokontroller arendusplaadiga|ATMega128|1|80,40|80,40|
 +|Standard RC servo|DG S03NFSTD|1|15,60|15,60|
 +|Mootorite moodul| |1|58,80|58,80|
 +|Alusplaatide materjal| |2|5|10|
 +|Anduri- ja mootorikinnitused| |4|3|12|
 +|Rattad/ratasjalad| | | |35|
 +|Kruvid, poldid ja mutrid| | | |10|
 +|Kleepsud| | | |5|
 +^Kokku^ ^ ^ ^356^
 +
 +Tehtud tööd:
 +
 +^Töö^Aeg, h^Hind^Maksumus, EUR^
 +|Projekteerimine|80|2|160|
 +|Roboti testimine|50|2|100|
 +|Detailide freesimine|4|6,40|25,6|
 +|Detailide mehaaniline töötlemine|15|2|30|
 +|Roboti koostamine|10|2|20|
 +|Programmeerimine|41|3|123|
 +^Kokku^200^ ^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 =====
 +
 +  - Kodulabori juhendmaterjal http://home.roboticlab.eu
 +  - Komponentide hinnad http://www.ittgroup.ee
 +  - Ratasjala kirjeldus [[http://inseneeria.eas.ee/index.php?option=com_content&view=article&id=336%3Aleiutis-ratasjalg&catid=62%3Ajuuni-2010&Itemid=27|http://inseneeria.eas.ee]]
 +  - Mikrokontrolleri andmeleht [[http://www.atmel.com/dyn/resources/prod_documents/doc2467.pdf|ATMega128]]
et/projects/tudengid11/ratasjalg.1301140743.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
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