This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:projects:tudengid11:ratasjalg [2011/04/02 09:44] – MAHB082783 | et:projects:tudengid11:ratasjalg [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== 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, | ||
| + | * 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. | ||
| + | [{{ http:// | ||
| + | |||
| + | ===== 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. | ||
| + | [{{http:// | ||
| + | **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/ | ||
| + | |||
| + | ~~CL~~ | ||
| + | |||
| + | [{{http:// | ||
| + | **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. | ||
| + | |||
| + | ~~CL~~ | ||
| + | |||
| + | 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, | ||
| + | * Kolmas võimalus on kasutada eelmise roboti olemasolevaid kahte ratast, seda juhul, kui eelmised kaks varianti ei õnnestu realiseerida. Näiteks sobilike parameetritega omniwheel' | ||
| + | |||
| + | ===== Mehaanika ===== | ||
| + | |||
| + | Roboti komponendid on paigutatud alusraamile, | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Ratasjalg oli meil ülesannet alustades olemas, vaja oli juurde ehitada avamissüteem, | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | 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. | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | ~~CL~~ | ||
| + | |||
| + | |||
| + | 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/ | ||
| + | |||
| + | Järgnevalt on toodud paari detaili lihtsustatud joonised. | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | 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. | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Detail valmistatakse CNC-freespingis 3 millimeetri paksusest alumiiniumplaadist. | ||
| + | |||
| + | ===== Elektroonika ===== | ||
| + | |||
| + | Roboti juhtimiseks kasutame kodulabori komplektis olevat kontrollermoodulit, | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | [{{: | ||
| + | |||
| + | [{{: | ||
| + | |||
| + | === Mootorid === | ||
| + | |||
| + | Rataste avamissüsteemi juures kasutasime [[http:// | ||
| + | {{: | ||
| + | |||
| + | Rattaid/ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ~~CL~~ | ||
| + | |||
| + | Tootja tüübinumber: | ||
| + | |||
| + | Tüüp: Ironcore Motor/ Spur Gearhead | ||
| + | |||
| + | Toitepinge: 4.5 → 15Vdc | ||
| + | |||
| + | Võimsus: 21,2 W | ||
| + | |||
| + | Pöörlemiskiirus: | ||
| + | |||
| + | Moment: 0,294 Nm | ||
| + | |||
| + | Ülekandetegur: | ||
| + | |||
| + | |||
| + | === Aku === | ||
| + | |||
| + | 11.1 voldine LiPo | ||
| + | |||
| + | ===== Juhtimine ===== | ||
| + | |||
| + | ==== Algoritm ==== | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | ==== Lähtekood ==== | ||
| + | |||
| + | Järgnevalt on toodud osa programmikoodist. Kogu lähtekood: | ||
| + | |||
| + | <code java> | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | //taimeri seadistamine | ||
| + | TCCR0|=(1<< | ||
| + | OCR0=255; | ||
| + | | ||
| + | //lcd ekraani initsialiseerimine | ||
| + | lcd_alpha_init(LCD_ALPHA_DISP_ON); | ||
| + | lcd_alpha_clear(); | ||
| + | char text[16]; | ||
| + | |||
| + | vertdist=ultrasonic_measure(pin_trigger, | ||
| + | horzdist=ultrasonic_measure(pin_trigger1, | ||
| + | |||
| + | unsigned short mindist=500; | ||
| + | unsigned short maxdist=0; | ||
| + | unsigned short openmindist=500; | ||
| + | unsigned short openmaxdist=0; | ||
| + | | ||
| + | //Viikude seadistamine | ||
| + | DDRC|=0x38; | ||
| + | PORTC |=(0x38); | ||
| + | DDRE|=(1<< | ||
| + | PORTE|=(1<< | ||
| + | PORTE &= ~(1<< | ||
| + | TCCR1A|=(1<< | ||
| + | TCCR1B|=(1<< | ||
| + | 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<< | ||
| + | OCR2=144; | ||
| + | TIMSK|=(1<< | ||
| + | |||
| + | 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< | ||
| + | { | ||
| + | | ||
| + | vertdist=filter(vertdist, | ||
| + | sw_delay_ms(100); | ||
| + | horzdist=filter(horzdist, | ||
| + | if(!legsOpen) | ||
| + | { | ||
| + | if(vertdist> | ||
| + | maxdist=vertdist; | ||
| + | else if(vertdist< | ||
| + | mindist=vertdist; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | if(vertdist> | ||
| + | openmaxdist=vertdist; | ||
| + | else if(vertdist< | ||
| + | openmindist=vertdist; | ||
| + | } | ||
| + | t0=clock+10; | ||
| + | } | ||
| + | if(bit_is_clear(PINC, | ||
| + | { | ||
| + | flag2=false; | ||
| + | OpenLegs(); | ||
| + | } | ||
| + | else if(bit_is_set(PINC, | ||
| + | flag2=true; | ||
| + | if(bit_is_clear(PINC, | ||
| + | { | ||
| + | flag1=false; | ||
| + | CloseLegs(); | ||
| + | } | ||
| + | else if(bit_is_set(PINC, | ||
| + | flag1=true; | ||
| + | if(bit_is_clear(PINC, | ||
| + | { | ||
| + | flag0=false; | ||
| + | static char count=1; | ||
| + | | ||
| + | mindist=500; | ||
| + | maxdist=0; | ||
| + | openmindist=500; | ||
| + | openmaxdist=0; | ||
| + | if(count& | ||
| + | { | ||
| + | roaming=true;// | ||
| + | count++; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | roaming=false; | ||
| + | count++; | ||
| + | } | ||
| + | } | ||
| + | else if(bit_is_set(PINC, | ||
| + | flag0=true; | ||
| + | | ||
| + | if(roaming) | ||
| + | { | ||
| + | if(horzdist< | ||
| + | { | ||
| + | potncollision=true; | ||
| + | } | ||
| + | | ||
| + | if(horzdist< | ||
| + | { | ||
| + | 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&& | ||
| + | { | ||
| + | PORTC &= ~(0x20); | ||
| + | OCR0=255; | ||
| + | OpenLegs(); | ||
| + | PORTC |= (0x20); | ||
| + | } | ||
| + | |||
| + | else if(!collided&& | ||
| + | collided=true;// | ||
| + | |||
| + | else if(collided&& | ||
| + | { | ||
| + | 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," | ||
| + | lcd_alpha_goto_xy(0, | ||
| + | lcd_alpha_write_string(text); | ||
| + | sprintf(text," | ||
| + | lcd_alpha_goto_xy(0, | ||
| + | lcd_alpha_write_string(text); | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Valmislahendus ===== | ||
| + | |||
| + | Pärast 9 nädalat rasket tööd valmis robot " | ||
| + | |||
| + | [{{: | ||
| + | |||
| + | Ja siin väike video | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | ===== Majanduskalkulatsioon ===== | ||
| + | |||
| + | Komponentide puhul,mille konkreetset hinda ei suudetud või ei olnud võimalik kindlaks teha,on maksumust hinnatud umbkaudselt. | ||
| + | |||
| + | ^Komponent^Mark^Kogus^Hind, | ||
| + | |DC mootor|919D501| 2|28, | ||
| + | |Ultraheliandur|SRF05|2|16, | ||
| + | |Aku|LiPo 11,1 V|1|40|40| | ||
| + | |Mikrokontroller arendusplaadiga|ATMega128|1|80, | ||
| + | |Standard RC servo|DG S03NFSTD|1|15, | ||
| + | |Mootorite moodul| |1|58, | ||
| + | |Alusplaatide materjal| |2|5|10| | ||
| + | |Anduri- ja mootorikinnitused| |4|3|12| | ||
| + | |Rattad/ | ||
| + | |Kruvid, poldid ja mutrid| | | |10| | ||
| + | |Kleepsud| | | |5| | ||
| + | ^Kokku^ ^ ^ ^356^ | ||
| + | |||
| + | Tehtud tööd: | ||
| + | |||
| + | ^Töö^Aeg, h^Hind^Maksumus, | ||
| + | |Projekteerimine|80|2|160| | ||
| + | |Roboti testimine|50|2|100| | ||
| + | |Detailide freesimine|4|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, | ||
| + | |||
| + | ===== 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, | ||
| + | |||
| + | 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:// | ||
| + | - Komponentide hinnad http:// | ||
| + | - Ratasjala kirjeldus [[http:// | ||
| + | - Mikrokontrolleri andmeleht [[http:// | ||