Elektroda.pl
Elektroda.pl
X
Elektroda.pl
IGE-XAOIGE-XAO
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Robot pajączek. Jakie silniki zastosować? Sprawdzanie aktualnej pozycji nóg.

19 Mar 2005 13:27 4323 21
  • Level 11  
    Witam wszystkich, wprawdzie elektrode przeglądam już dłuższy czas ale dopiero teraz pisze swojego pierwszego posta.

    Razem z kolegami wpadliśmy na pomysł zrobienia robocika podobnego do tego: http://www.lynxmotion.com/Category.aspx?CategoryID=65 i w związku z tym mam pare pytań do was. Pierwszym problem są silniki, które są dość drogie a ten robot ma mieć ich dwanaście, dwa na każdą z 6 nóg (jeden do ruchów góra-dół, drugi przód-tył). Niestety do dyspozycji na razie mamy tylko 400zł na same silniki co wychodzi 33zł na jeden.
    Doszliśmy do wniosku że można to zrobić na dwa sposoby.
    1. Zastosować silniki krokowe, np jeden z tych: http://www.wobit.com.pl/download/pdf/silniki/35by.pdf. Zaletą tego rozwiązanie jest że
    - ceny są znośne
    - wiemy jak czymś takim sterować
    Niestety jest też dość duża wada, te silniki są słabe więc trzeba by było zastosować jakieś przełożenie min 10x (które też pewnie będzie kosztować). Liczymy że robot będzie ważył mniej niż 5kg i że powinien utrzymać się na 3 nogach.
    2. Zastosować serwomechanizmy. Najtańszy znalazłem tutaj: http://www.arthobby.pl/cgibin/shop?info=h31311&sid=0c3f08a6. Zaletami tego rozwiązanie jest:
    - jest wystarczająco silny
    wadami natomiast
    - wyższa cena
    - musimy się nauczyć tym sterować. BTW: mógłby ktoś zarzucić jakimś dobrym artukułem opisującym sterowanie serw.

    Robot będzie sterowany najprawodobniej dwoma procesorami AVR. Jeden główny będzie decydował gdzie iść na podstawie informacji o odległości z czujników i będzie przesyłał komendy typu "idź do przodu", "skręć w prawo" do drugiego procesora, który będzie zajmował się tylko sterowaniem wszystkich silników.

    Kolejną sprawą jest sprawdzanie aktualnej pozycji nóg. Myśleliśmy aby po włączoniu robota wszystkie silniki były przesuwane maks w jedną strone i odczytywane było maksymalne wychylenie i od tego było liczone położone. Sterujący procesor pamiętałby o ile może wychylić noge w drugą strone. Chcemy także umożliwić chodzenie robotowi po nierównej powierzchni. Dlatego wpadliśmy na pomysł żeby na końcu każdej nogi zrobić włącznik/wyłącznik, który włączał by się gdy dana noga dotknęła by podłoża co byłoby informacją że procesor ma zakończyć opuszczanie nogi.


    Bardzo chętnie wysłuchamy jakiś propozycji, uwag do naszego projektu. Mam tylko nadzieje że nie porywamy się z motyką na słońce. Na szczęście kolega zrobił już kilka układów na AVRach a ja mam dość duże doświadczenie w programowaniu. Największym naszym problemem jest mała wiedza o robotyce.
  • IGE-XAOIGE-XAO
  • Helpful post
    Level 35  
    Jak uzywasz serw to nie masz problemu z pozycjonowaniem, bo one maja caly uklad pozycjonujacy. Ty tylko zadajesz im odpowiednie sygnaly i czekasz jakis ustalony czas, zeby serwo moglo uzyskac odpowiednia pozycje. (w opisie serwa masz czas obrotu o 60stopni, przewaznie jest to ok 0.2s)

    Serwa te najczesciej dzialaja na PWM , tzn ze masz sygnal o dlugosci bodajze 2ms i w zaleznosci od jego wypelnienia serwo ustawia sie na odpowiednia pozycje.. czyli dla wypelnienia 50% - 1ms "1" i 1ms "0" serwo ustawi sie na srodek.

    Poszukaj dokladnego opisu na www.google.com - najlepiej wg. nazwy producenta, bo niektore serwa troche sie roznia miedzy soba (czasami sygnalu PWM itp)

    Osobiscie nie polecalbym silnikow krokowych - duzo zabawy a jedyna potencjalna zaleta to nizszy koszt.. ale mysle, ze jak dobrze zagadasz to 12serw kupisz sporo taniej niz pojedyncze.

    Sprawdz tylko czy serwa beda mialy wystarczajacy moment, zeby zachowac swoja pozycje przy obciazeniu robotem.
  • Level 11  
    Dzięki za odpowiedź. Chyba jednak zdecydujemy się na serwa. Tylko zastanawiam się jak zrobić reagowanie na postawienie nogi na podłożu. Najprościej by było zrobić czujnik mówiący noga postawiona/nie postawiona. Tylko że w tym wypadku nie wiem co wysłać do serwa, bo nie wiem w jakiej odległości to podłoże jest. Czy jedynym wyjściem jest wtedy opuszczanie nogi po troche i sprawdzanie czy została już postawiona?

    UPDATE:
    znazłem info jak się steruje serwem Hitec HS 311 (bo to zamierzam użyć).
    http://www.hitecrcd.com/Support/Faqs/Faq_Genservo_.htm#1
    Pisze tam coś takiego:
    Quote:
    All Hitec servos require a 3-4V peak to peak square wave pulse. Pulse duration is from 0.9ms to 2.1ms with 1.5ms as center. The pulse refreshes at 50Hz (20ms).

    Czy to oznacza że "kolejne rozkazy" musze podawać z 20ms opóźnieniem?
  • Level 35  
    To zalezy po jakim podlozu sie poruszasz,
    jezeli po plaskim to nie ma problemu, bo robot zawsze stawia nogi na tej samej wysokosci.
    Jezeli chcesz go nauczyc chodzenia po nieregularnej powierzchni to jest gorzej.
    Najprosciej chyba byloby dostarczac sygnal do serwa zmieniajacy sie z predkoscia mniejsza niz maksymalna szybkosc serwa, w ten sposob serwo by podazalo moment za sygnalem. W momencie jak dostaniesz z czujnika informacje, ze dotknales ziemi, to do serwa wysylasz pozycje aktualna (czy nawet lekko sie wycofujesz)
    Jezeli nie zalezy ci na jakiejs wielkiej precyzji(a raczej nie widze powodu dla ktorego jeden czy dwa mm mialy by robic roznice), to powinno to dzialac dobrze.
  • IGE-XAOIGE-XAO
  • Level 11  
    Szukałem informacji o tych serwach ale chyba źle szukam bo nie znalazłem odpowiedź na trzy pytania. Poszukiwania zacząłem od strony producenta tego serwa. Niestety w manualu zawiele nie pisze - http://www.hitecrcd.com/Support/Manuals/ServoManual.pdf

    Pisze tam coś takiego:
    Quote:
    All Hitec servos require a 3-4V peak to peak square wave pulse. Pulse duration is from 0.9ms to 2.1ms with 1.5ms as center. The pulse refreshes at 50Hz (20ms).

    Nie rozumiem tego ostatnia zdania ("The pulse refreshes at 50Hz (20ms)"). Czy mógłbyś wytłumaczyć czego tyczy się te 20ms?

    Druga pytanie to czy serwo obraca się z taką samą prędkością w zależności od obciążenia. Jeżeli tak to np wiedząć ile czasu mineło od wysłania rozkazu i pozycji startowej wiedziałbym w jakiej pozycji serwo jest aktualnie.

    Trzecie pytanie. Pisałeś że serwo w zależności od sygnalu ustawia się na odpowiednią pozycja. Ale jak się dowiedzieć czytając opis na stronie jaki jest kąt pomiędzy położeniem maksymalnym w jedną strone a położeniem maksymalnym w drugą strone. Czy może ta wartość jest stała dla wszystkich serw. Bo np czytając opis tego serwa: http://www.hitecrcd.com/Servos/hs311.htm to ja nic nie wiem.
  • Helpful post
    Level 12  
    Witam
    Quote:
    Nie rozumiem tego ostatnia zdania ("The pulse refreshes at 50Hz (20ms)"). Czy mógłbyś wytłumaczyć czego tyczy się te 20ms?


    Serwo jest sterowane sygnalem prostokatnym o amplitudzie okoBo 4V i dlugosci od 1 do 2 msek, powtarzanym z czestotliwoscia 50 Hz, czyli co 20 msek.

    Quote:
    Druga pytanie to czy serwo obraca się z taką samą prędkością w zależności od obciążenia.


    Obciazenie ma wplyw na predkosc ruchu serwa, nie wiem czy jest to zaleznosc liniowa, ale wraz z obciazeniem predkosc rucho spada, az do zatrzymania, przy obciazeniu granicznym.

    Quote:
    Czy może ta wartość jest stała dla wszystkich serw.


    Te wielkosc jest zalezna od sygnalu sterujacego a nie serwa. Najczesciej w przypadku podanych wyzej dlugosci impulsu kat wychylenia dzwigni jest po okolo 60 stopni od punktu neutralnego. Nie dotyczy to serw specjalnych, np do chowania podwozia, gdzie zakres ruchu wynosi okolo 2 x 90 stopni, czy wind zaglowych, o zakresie ruchu nawet kilku obrotow. Jesli zwiekszysz dlugosc impulsow sterujacych, to mozesz zwiekszyc zakres wychylen serwa do okolo 330 stopni. To jest granica mechaniczna. w serwie jest potencjometr, ale nie wieloobrotowy, jako element sprzezenia zwrotnego, zwiazany z ostatnia zebatka. On limituje wielkosc obrotu. Najczesciej takze na statniej zebatce jest mechaniczny ogranicznik wielkosci obrotu.
    Jako punkt neutralny przyjalem polozenie, w ktorym slizgacz potencjometru jest na srodku sciezki oporowej.
    Mam nadzieje, ze te informacje rozwieja Twoje watpliwosci.
    Pozdrawiam
    Darek
  • Level 11  
    trenerek wrote:
    Witam
    Quote:
    Nie rozumiem tego ostatnia zdania ("The pulse refreshes at 50Hz (20ms)"). Czy mógłbyś wytłumaczyć czego tyczy się te 20ms?


    Serwo jest sterowane sygnalem prostokatnym o amplitudzie okoBo 4V i dlugosci od 1 do 2 msek, powtarzanym z czestotliwoscia 50 Hz, czyli co 20 msek.

    W zasadzie przetłumaczyłeś mi to co tam pisało a nie chodziło mi to. Nie rozumiem do końca o co chodzi z tym powtarzaniem.

    Może napisze jak ja to rozumiem a Ty mi powiesz czy dobrze myśle. Jeżeli chce aby serwo było ustawione po środku czyli dla tego serwa musze podać te 4V przez 1.5ms to robie tak
    przez 1.5ms puszczam 4V, później zostawiam 0V przez 18.5ms i znowu 1.5ms 4V i tak w kółko? A jeżeli np chce postawić na maksymalne wychylenie to puszczam wtedy 2.1ms 4V i 17.9ms 0V? Co się stanie gdy np puszcze 1.5ms 4V, 10ms 0V, 2ms 4V?
  • Level 12  
    Witam ponownie,
    Quote:
    Co się stanie gdy np puszcze 1.5ms 4V, 10ms 0V, 2ms 4V?


    przypuszczam, ze serwo zglupieje, ale nie wiem w jaki sposob. W serwie jest wewnetrzny generator impulsow prostokatnych, uruchamiany sygnalem przychodzacym z odbiornika. szerokosc impulsow generatora wewnetrznego regulowana jest wspomnianym potencjometrem sprzezenia zwrotnego. Impuls z odbiornika, przychodzacy ze wspomniana czestotliwoscia (w radiu modelarskim jest kilka, np. 7 takich kanalow i wszystkie musza sie zmiescic w tych 20 msek) jest porownywany z impulsami z wewnetrznego generatora serwa a z ich roznic wyciagane i wzmacniane sa impulsy do sterowania silnika serwa. Generator moze i zdazy wprodukowac nastepny impuls, ale na pewno nie zdozy silnik i przekladnia. Nie wiem, co sie wtedy stanie.
    Pozdrawiam
    Darek
  • Level 13  
    Megabyte wrote:
    Dzięki za odpowiedź. Chyba jednak zdecydujemy się na serwa. Tylko zastanawiam się jak zrobić reagowanie na postawienie nogi na podłożu. Najprościej by było zrobić czujnik mówiący noga postawiona/nie postawiona. Tylko że w tym wypadku nie wiem co wysłać do serwa, bo nie wiem w jakiej odległości to podłoże jest.


    Może by tak czujnik (wyłącznik) krańcowy na "stopie" zgłaszający przerwanie
    do mikrokontrolera a poprzez niego do serwa stop
  • Helpful post
    Level 20  
    Idealnym rozwiązaniem byłoby badanie siły nacisku, i sprawdzanie, czy robot pewnie stoi na danej nodze. Zwykły włącznik może się dwojako zachować: poda sygnał za wcześnie, gdy noga jeszcze nie stanowi solidnego oparcia, ale siła jest wystarczająca dla włącznika, lub też siła nacisku będzie za mała i noga będzie opuszczana dotąd, aż inne kończyny oderwą się od ziemi i siła bęzie inaczej rozłożona. Ponadto za każdym sygnałem postawienia nogi na ziemi trzeba utrzymać pozycje serva, lub też kontynuować jakiś czas ruch do momentu podniesienia robota na daną wysokość.

    Myślę, że można by się pobawić tochę potencjometrami suwakowymi i sprężynkami i wykombinować jakiś prosty tensometr - w końcu jakaś wielka dokładność chyba nie jest wymagana...

    Pozdrawiam
  • Level 29  
    Megabyte napisał :
    Zaletami tego rozwiązanie jest:
    - jest wystarczająco silny
    wadami natomiast
    - wyższa cena
    - musimy się nauczyć tym sterować. BTW: mógłby ktoś zarzucić jakimś dobrym artukułem opisującym sterowanie serw.

    Niewiem czy wyższa cena to zaleta .
  • Level 11  
    selser napisał:
    Może by tak czujnik (wyłącznik) krańcowy na "stopie" zgłaszający przerwanie do mikrokontrolera a poprzez niego do serwa stop

    Myślę że nie jest to najlepszy pomysł. Przerwanie generalnie przerywają program główny i wykonują swój wlasny podproces. Mogłoby to stwarzać problemy w przypadku ruchu paru serw w jednym momencie. Jedynym rozstadnym rozwiazniem w takim wypadku byłoby dorzucenie 3-AVRa. Ale to rozwiązanie też nie jest całkiem szczęśliwe, gdyż najczęściej praca ma byc przerywana dopiero po krótkiej chwili od postawienia nogi ( w przeciwnym wypadku robot położy sie na podłożu).

    Pozdrawiam
  • Helpful post
    Level 13  
    ptk22 wrote:
    Przerwanie generalnie przerywają program główny i wykonują swój wlasny podproces.


    chyba że program główny to właśnie sterowanie serwami

    Quote:

    najczęściej praca ma byc przerywana dopiero po krótkiej chwili od postawienia nogi ( w przeciwnym wypadku robot położy się na podłożu).


    a to jak uC zareaguje na przerwanie to kwestia programisty - np po int odlicz 100ms i stop/next servo erc...

    no i jeszcze kwestia sposobu zainstalowania czujnika(krańcówki) na stopie

    tak mi do głowy przyszło a'propo napędu - czy takie zwykłe (nie wyczynowe, na duże obciążenia) servo utrzyma roboto ~5kg na 3 nogach, może pomyśleć nad innym napędem (podobno wkrętak aku można dostać za ~20pln/sztuka - byłby silnik, akumulator i przekładnia o dużej mocy)
    Pozdrawiam
  • Level 11  
    selser wrote:
    Megabyte wrote:
    Dzięki za odpowiedź. Chyba jednak zdecydujemy się na serwa. Tylko zastanawiam się jak zrobić reagowanie na postawienie nogi na podłożu. Najprościej by było zrobić czujnik mówiący noga postawiona/nie postawiona. Tylko że w tym wypadku nie wiem co wysłać do serwa, bo nie wiem w jakiej odległości to podłoże jest.


    Może by tak czujnik (wyłącznik) krańcowy na "stopie" zgłaszający przerwanie
    do mikrokontrolera a poprzez niego do serwa stop

    No właśnie o tym pisałem. Tylko jak wiadomo do serwa podaje się położenie, ale nie wiadomo jak ta podłoga daleko jest więc trzeba opuszczać po trochu aż pojawi się to przerwanie. Bo raczej wysłanie położenia maksymalnego i później ewentualne cofnięcie w przypadku wystąpienia przerwania nie działało by zbyt dobrze.


    Coyote~ wrote:

    Idealnym rozwiązaniem byłoby badanie siły nacisku, i sprawdzanie, czy robot pewnie stoi na danej nodze. Zwykły włącznik może się dwojako zachować: poda sygnał za wcześnie, gdy noga jeszcze nie stanowi solidnego oparcia, ale siła jest wystarczająca dla włącznika, lub też siła nacisku będzie za mała i noga będzie opuszczana dotąd, aż inne kończyny oderwą się od ziemi i siła bęzie inaczej rozłożona. Ponadto za każdym sygnałem postawienia nogi na ziemi trzeba utrzymać pozycje serva, lub też kontynuować jakiś czas ruch do momentu podniesienia robota na daną wysokość.

    Myślę, że można by się pobawić tochę potencjometrami suwakowymi i sprężynkami i wykombinować jakiś prosty tensometr - w końcu jakaś wielka dokładność chyba nie jest wymagana...

    Pozdrawiam

    Pomysł bardzo ciekawy jednak zastanawiam się czy aby na pewno jest to konieczne. Robot ma chodzić przy nierównym ale twardym podłożu i myśle że zastosowanie zwykłych czujników wystarczy. W dodatku czas nas nagli i nie wiem czy zdążylibyśmy to zrobić. Jeżeli jednak czasu nam zostanie a chodzenie robota nie będzie nas zadowalało to spróbujemy to zrobić.


    daniel93 wrote:

    Megabyte napisał :
    Zaletami tego rozwiązanie jest:
    - jest wystarczająco silny
    wadami natomiast
    - wyższa cena
    - musimy się nauczyć tym sterować. BTW: mógłby ktoś zarzucić jakimś dobrym artukułem opisującym sterowanie serw.

    Niewiem czy wyższa cena to zaleta .

    Przeczytaj dokładnie to co napisałem. Tam pisze że wyższa cena to wada.

    ptk22 wrote:

    selser napisał:
    Może by tak czujnik (wyłącznik) krańcowy na "stopie" zgłaszający przerwanie do mikrokontrolera a poprzez niego do serwa stop

    Myślę że nie jest to najlepszy pomysł. Przerwanie generalnie przerywają program główny i wykonują swój wlasny podproces. Mogłoby to stwarzać problemy w przypadku ruchu paru serw w jednym momencie. Jedynym rozstadnym rozwiazniem w takim wypadku byłoby dorzucenie 3-AVRa. Ale to rozwiązanie też nie jest całkiem szczęśliwe, gdyż najczęściej praca ma byc przerywana dopiero po krótkiej chwili od postawienia nogi ( w przeciwnym wypadku robot położy się na podłożu).

    Pozdrawiam

    Szczerze mówiąc nie rozumiem po co 3 AVR. Nie widze powodu, dla którego jeden dla silników mógłby nie wystarczyć. Co więcej zasnawialiśmy się czy aby na pewno 2 są potrzebne.

    selser wrote:

    tak mi do głowy przyszło a'propo napędu - czy takie zwykłe (nie wyczynowe, na duże obciążenia) servo utrzyma roboto ~5kg na 3 nogach, może pomyśleć nad innym napędem (podobno wkrętak aku można dostać za ~20pln/sztuka - byłby silnik, akumulator i przekładnia o dużej mocy)
    Pozdrawiam

    Według naszych obliczeń nawet 3 najtańsze serwa w ofercie Hitec (HS-311) będą w stanie utrzymać robot. W dodatku w robocie na którym się wzorujemy są podobne serwa, wprawdzie troche mocniejsze ale tylko o 10%. Ciekawy pomysł z tym wkrętakiem ale tam jest chyba zwykły silnik prądu stałego co oznacza skomplikowane sterowanie.


    Dziękuje wszystkim za porady. Jakbyście mieli jeszcze jakieś pomysły to chętnie przeczytam. My w tej chwili już ostro pracujemy :) Serwa mam już w domu. Płytka jest już prawie zaprojektowana. Ja zaczynam pisać oprogramowanie. Oprócz tego kumple robią szkielet. Mam nadzieje że wyrobimy się do końca maja bo wtedy robot ma już chodzić. :D
  • Level 13  
    Witam
    Mam nadzieję że zamieścisz fotki - chętnie poznam twojego pupila :)

    Pozdrawiam i powodzenia
  • Level 11  
    Witam po krótkiej przerwie. Robocik już chodzi :), a o to zdjęcie robione tydzień temu http://www.mbapp.com/robot/robot.jpg Obecnie mamy problem z zasilaniem, tzn potrzebujemy w miare lekki akumulator (najlepiej <0.5kg), który byłby w stanie dostarczyć przez w miare długi czas prąd do 2A. Czy możecie coś polecić?

    UPDATE:
    Zapomniałem napisać że akumulator ma być na 6V
  • Helpful post
    Level 35  
    Co do akumulatorow to masz kilka mozliwosci, ustawione od gory do dolu w kolejnosci od najtanszego/najciezszego do najdrozszego/najlzejszego:

    -akumulatory zelowe (6V, od kilku do kilkunastu amper), 1200mAh to ok 0.3kg i cena 20zl

    -akumulatorki (typu baterie nimh/nicad uzywane w modelarstwie) - wystarcza nawet zwykle akumulatorki-paluszki z aparatu, mam paluszki gp 2100mAh (18zl za 2sztuki w sklepie), komplet 4 paluszkow to waga ok 120g. 5 paluszkow = 6V, ok.150g, 50zl i godzina dzialania przy srednim poborze pradu 2A. Jak dla mnie jest to zdecydowanie najlepsze rozwiazanie. Jak masz jakas ladowarke do paluszkow to koszty sa naprawde niskie... jak nie to mozesz kupic ladowarke gp z bateriami za rozsadne pieniadze.
    UWAGA! nie poleca laczyc sie tych akumulatorow rownolegle dla uzyskania wiekszej pojemnosci!

    -pakiety li-poly, kazda bateryjka ma 3.6V i do ok. 3000mAh (w zaleznosci od modelu/ciezaru). Ze wzgledu na wieksza cene i wieksze problemy z uzytkowaniem raczej bym polecal baterie ni-mh... za li-poly przemawia glownie nizsza waga przy tej samej pojemnosci. Jezeli chcialbys ich uzywac to poczytaj o nich na stronach o modelarstwie, bo wymagaja specjalnego traktowania.
    Pakiet zlozony z dwoch baterii 1500mAh ma 7.2V, 75g i kosztuje ok 130zl


    PS.Zapomnialem dodac :)

    Robot wyglada bardzo fajnie. Jak bedziesz mial mozliwosc to wrzuc moze na stronke jakis maly filmik z dzialania robota (filmik pokazujacy jak chodzi/skreca). Gratuluje ciekawej konstrukcji.
  • Level 11  
    Wczoraj nakręciliśmy to: http://www.mbapp.com/robot/Henryk.avi Jakość nie jest najlepsza ale da się oglądać. W przyszłym tygodniu powinno być więcej filmików i w lepszej jakości. Co do robota to widać że musi się jeszcze dużo nauczyć :)
  • Level 11  
    Od jakiegoś czasu dostępna jest strona o naszym robocie:
    http://www.henryk.mbapp.com Są zdjęcia, filmiki, pare schematów :) Niestety serwer nie jest zbyt szybki więc bądźcie cierpliwi ;)

    Co do samego robocika to aktualnie mamy przerwe ale po wakacjach zamierzamy zrobić w końcu wykrywanie przeszkód i komunikacje z komputerem. Tak więc pewnie znowu was zasypie jakimiś pytaniami. :)
  • Level 29  
    Strone możesz umieścićna darmowym chostingu żeby się szybciej otwierała .
  • Level 11  
    Niestety trudno znaleźć dobry darmowy serwer z przestrzenią minimum 100MB, PHP i SQL. Ale przeniesienie przynajmniej części filmów i zdjęć to dobry pomysł. Postaram się to niedługo zrobić.
  • Helpful post
    Level 29  
    Sprubuj na www.CBA.PL masz 100mb jedyne ograniczenie to max wielkość pliku : 3mb .