Robotas, balansuojantis ant kamuolio

Pabandžiau padaryt dar vieną robotą – balansuojantį ant kamuolio. Tai beveik tas pats, kas ir balansavimas ant dviejų ratų, tik vietoje ratų – kamuolys. Kamuolys ritasi bet kuria kryptimi, todėl išsilaikyti ant jo – užduotis ne pati paprasčiausia. Toks robotas nėra kažkas naujo, internete galima rast bent keletą panašių projektų.

Pirmas bandymas buvo maždaug prieš pusantrų metų, bet nieko gero iš to nesigavo. Priežastis – grynai  mechaninės problemos. Kad būtų galima balansuoti ant kamuolio, reikia, kad robotas galėtų sukinėti kamuolį bet kuria kryptimi. Atrodytų paprasta – šiuo atveju reikia dviejų ašių (pavadinkim X ir Y), kiekvienoje ašyje po du variklius, ant jų uždedam kokius nors nedidelius ratus ir galima būtų bandyt, tačiau čia atsiranda pirmoji problema. Juk kamuolio paviršių liečia visi ratai, reiškia sukantis vienos ašies varikliams, kiti du trukdys tai padaryt. Juk ašys 90 laipsnių kampu viena į kitą. Reiškia paprasti ratai netinka. Čia reikalingi taip vadinami omni ratai, kurie sukimosi kryptimi (X) elgiasi kaip paprastas ratas, o kita kryptimi (Y) neturi jokio pasipriešinimo. Tokių ratų yra pirkti, bet kaina nedžiugina, tuo labiau, kad jų reikia keturių. Štai poros tokių ratų nuotraukos.

omni_wheel1

Aš nenoriu tokiems projektams išleisti daug pinigų. Todėl bandžiau išsisukti pigiai. Bet kaip dažniausiai būna – pigu, tai nereiškia, kad bus gerai. Internetinėje parduotuvėje radau paprastus plastikinius ratus. Kaina nedidelė, palyginus su tais, kuriuos minėjau anksčiau.

omni_wheel2

Jei būtų galima prieš tai pačiupinėt – būčiau nepirkęs. Tai visiškas šlamštas. Padaryta labai jau kiniškai, kai kurie rolikai sukasi, kai kurie nelabai, be to viskas kliba, padaryta netiksliai. Klibėjimą sumažint pavyko sudėjus poveržles į tarpus. Būtų beveik pusė bėdos, tačiau nevykusi pati konstrukcija – kai ratas paviršių liečia būtent ta vieta, kur dviejų rolikų smaigaliai, jie visai nesisuka. Aš nesuprantu kokia buvo konstruktorių mintis, kai padarė tokias skyles. Ant ko jie turėtų būti uždėti? Man reikėjo uždėti ant 4mm ašių. O skylė 10mm. Rato storis 20mm. O mano variklių ašių ilgis – 9mm. Netinka visiškai. Netinka tai netinka, bet ant ko jie galėtų tikt? Susiradau tekintoją, kuris apsiėmė ištekinti perėjimus. Taip ratus pavyko uždėti ant variklių. Nors tie perėjimai pakankamai tikslūs, tačiau kaip juos pritvirtinti prie ratų? Reikėtų klijuot, bet tada būtų neįmanoma nuimt nuo variklių. Žodžiu vienas vargas. Variklius bandžiau naudot paprastus 12V su reduktoriais. Panašūs buvo anksčiau mano darytam robote. Naudot galima bet yra ta pati problema – reduktoriai gerokai kliba.

ball_robot1

Kad robotas teisingai stovėtų ant kamuolio, variklius reikia pritvirtinti tam tikru kampu. Pradžioje neaišku koks tas kampas turėtų būti. Todėl padariau paprastai, kad, reikalui esant, būtų galima bent jau palenkt.

Beje, ne mažiau svarbu koks bus kamuolys. Nuėjau į parduotuvę ir nusipirkau tinkamo dydžio (kaip man atrodė), kuo lygesnio paviršiaus kamuolį. Lygtai jis skirtas tinkliniui. :)

ball

Kontrolerį pasirinkau atmega128, bet ne todėl, kad tokio reikia, o todėl, kad buvo pas mane tokia plokštė. Įrašiau bootloaderį, kad galėčiau naudoti kaip Arduino. Tiesa, šiaip jau Arduino IDE nepalaiko atmega128. Bet jei nepalaiko, tai dar nereiškia, kad negalima priverst. :) Surinkau viską kaip visada ant montažinės plokštės.

ball_robot3

Varikliams valdyt panaudojau dvi plokštes su L298N. Dar ten matosi įtampos stabilizatoriai, kad mažėjant akumuliatoriaus įtampai vis tiek turėčiau 12V.

ball_robot2

Daviklis MPU6050. Programa nedaug skiriasi nuo paprasto balansuojančio roboto, tik čia dvi ašys. Bandymai parodė, kad veikia tai viskas teisingai, bet su tokiais ratais bent kiek priimtino balansavimo pasiekt neįmanoma. Didžiausia problema, kad ratai vietomis kliuvinėja (kai kamuolį liečia ta vieta, kur dviejų rolikų smaigaliai).

ball_robot4

Reikėjo kitokių ratų. Dar abejonių kėlė reduktorių klibėjimas. Ar pavyktų kažką geriau pasiekt su geresniais ratais? Todėl robotas buvo numestas ir sėkmingai pragulėjo beveik metus.

Dar kartą robotą prisiminiau kai susirinkau 3D spausdintuvą. Juk omni ratus galima atspausdint. Tai nėra paprasta, bet įmanoma. Ilgokai galvojau kaip tai geriau padaryt. Štai kas iš to gavosi:

omni_wheel3

Tokia konstrukcija veikia neblogai. Rolikai truputį kliba, bet visai nežymiai. Sukasi gerai, nepriklausomai nuo padėties. Ir ant variklio ašies užsideda be jokių problemų.

Čia galima pamatyt daugiau nuotraukų.

Spausdinau juos tada, kai derinau spausdintuvą, patirties dar buvo mažai, todėl spausdinimo kokybė ne pati geriausia. Reikėjo ašių ant ko užmauti rolikus, tačiau iš ko jas padaryt? Plieninių tokių turiu, bet pjaustyti neįmanoma. Nusipirkau 3mm storio vinių. Jų storis pakankamai tikslus, iš jų ir pripjausčiau ašių. :) Vargo buvo daug, bet rezultatas neblogas.

ball_robot5

Su šiais ratais kamuolys sukinėjosi jau visai gerai, tačiau balansavimas buvo blogas. Geriausia ką pasiekiau, tai robotas išsilaiko keletą sekundžių. Reduktorių klibėjimas neleidžia pasiekti geresnių rezultatų. Jei paprastas robotas su tokiais varikliais gali balansuot, tai ant kamuolio reikia didesnio tikslumo. Robotas vėl nukeliavo ilsėtis…

Praėjo dar pusė metų. Per tą laiką iš vis prisimindavau šį robotą, ir nutariau, kad reikėtų daryti rimčiau. O rimčiau galima padaryt su žingsniniais varikliais. Be to nebūtina naudot keturis, užtektų ir trijų, tiesa tokiu atveju šiek tiek sudėtingesnis variklių valdymas, nes norint kamuolį pasukti atitinkama kryptimi reikėtų naudoti visus, tačiau kiekvienas turi suktis atitinkamu greičiu, kad bendrai gautųsi reikalinga kryptis. Naudojant žingsninius variklius nereikia reduktorių – reiškia nėra ir klibėjimo. Pas juos 5mm pakankamai ilgos ašys, ant kurių patogu uždėti plačius ratus.

O ką daryt su ratais? Peržiūrėjęs daugybę visokių konstrukcijų, pabandžiau atspausdinti dar kartą. Pavyko daug geriau. Svarbiausia – niekas nekliba.

omni_wheel4

Daugiau nuotraukų, kad galima būtų matyti konstrukciją.

Variklių laikikliai irgi atspausdinti. Iš dviejų dalių, kad galima būtų reguliuoti pasvirimo kampą.

ball_robot6

Iš ankstesnio roboto neliko nieko, viskas iš naujo.

ball_robot7

Kontroleris – atmega328. Kodėl ne koks nors ARM? Tai kad nereikia, užtenka ir atmegos. Variklių draiveriai DRV8825. Ten dar nRF24L01 matosi. Jis vėliau atsirado, kad galima būtų valdyt robotą.

ball_robot8

Gerai, kad padariau reguliuojamą variklių tvirtinimą. Tokie ratai būtinai turi būti stačiu kampu į kamuolį.

ball_robot9

Programą perdarinėjau iš to, kas iki šiol buvo geriausiai pavykę. T.y. iš šio roboto. Čia beveik viskas tas pats, išskyrus tai, kad reikia balansuoti dviejose ašyse. Yra dar vienas skirtumas – bet kokią kryptį reikia išgauti sukant tris variklius. Reiškia reikia padaryti variklių miksą. Kitaip sakant reikėjo padaryti procedūrą, kad galėčiau paduoti poveikius X ir Y ašyse, o varikliai sukasi atitinkamais santykiais. Čia reikėjo nemažai paeksperimentuot, bet lygtai veikia normaliai.

Kad varikliai suktųsi švelniai, naudoju mikro žingsnius 1/16. Beje, šie varikliai šiek tiek kitokie, nei naudojau anksčiau (buvo 12V 0,4A). Šie yra 3,75V 1,5A. Tokie geriau kai maitinimas iš akumuliatoriaus. Kai įtampa 9-12V skirtumo veikime beveik nėra. Srovę reguliuoja draiveriai, tik reikia nustatyti kuo tiksliau.

ball_robot10

Rezultatas visai neblogas. Balansuoja puikiai. Kaip veikia matosi video. Matosi nedidelis drebėjimas, jis yra dėl dviejų priežasčių. Pirma – kamuolio paviršius ne visai lygus. Antra – mano omni ratai ne visai idealūs.

T.y. rato paviršius yra ne visai lygus jei žiūrėt į jį kaip į paprastą ratą. Deja, aš to nenumačiau kurdamas 3D maketą. Dabar, pagalvojęs geriau, galėčiau atspausdinti taip, kad ir to nebūtų. Iš klaidų mokomės, gal kada pabandysiu atspausdinti naujus ratus.

Valdymas toks pat, kaip ir anksčiau aprašytam robote. Visai neblogai važinėja, turint omenyje, kad nukristi nuo kamuolio daug paprasčiau nei ant jo išsilaikyti. :) Bet net derinant jis krito tik vieną kartą. Robotas gana sunkus (1,7 kg), todėl kritimas tiesiai ant rato gali jį ir sulaužyti…

Yra viena problema, kurią nežinau kaip išspręst. Kiek pavažinėjus, robotas labai įsielektrina, prikišus ranką gana stipriai trinkteli per nagus. Aišku elektronikai tai nelabai patinka, vienas variklio draiveris jau numirė. Guminis kamuolys matomai geras izoliatorius, tarp pačio roboto ir grindų susidaro kažkokie laukai nuo kurių taip įsielektrina. Gal kas turit minčių kaip tai panaikint?

This entry was posted in Elektronika, Programavimas, Robotai. Bookmark the permalink.

2 Responses to Robotas, balansuojantis ant kamuolio

  1. Gintaras says:

    Šaunuolis Remigijau! Eilinį kartą nustebinai. Įsielektrinimui sumažinti siūlau kamuolį grafitu padengti. Žinoma, viskas labai “mozosis”, na bet įsielektrinimas turėtų sumažėti.

  2. Dgs says:

    O jei kamuolį apjuosus vieną folijos juosetele. Ridinėjantis vistiek ratai sukontaktuos laikas nuo laiko su grindim per tą juostą ir taip būtų atsikratomas krūvis. Pigiausiai tai lipni aliuminio juosta. Norint galima ir raštus išklijuot ant kamuolio su ja ir nereiks terštis su grafitu.
    Kitas greitas variantas ūsai ant roboto, kurie liečia žemę, vinas ar daugiau. Koks nors laido gabaliukas. Panašiai matęs ant benzovežių tie ir įsielektrina ir statika ten blogai.., tai kai sustoja jis specialus ūsas paliečia žemę ir taip nutekina krūvi, važiuojant jis pakyla ir nesitrina į asfaltą.. Dar ant žiguliukų lyg gale prie bamperio panašaus būdavo, vaikas neuprasdavau kam ta uodega bereikaligna į asfaltą besitrinanti.

Leave a Reply

Your email address will not be published. Required fields are marked *