Skocz do zawartości

Sterowanie robotami LineFollower


Xweldog

Pomocna odpowiedź

No to czekajmy na odpowiedzi.

Mi na logikę wyszło, że przy zakrętach musi być jakieś optimum. Teraz jazdę na wprost widzę jako składową X pokrywającą się z linią = full a Y = 0 ( lub -Y ). A jak lina zmieni kierunek o 90° i pokryje się z Y ? Wtedy każde, najmniejsze przemieszczenie po X będzie oddalać czujkę od linii, pożądane jest ruch tylko w kierunku Y. Czyli, trzeba całkiem wyeliminować składową X. Tu optymalne są dwie możliwości obrócenia: jedno nadal jedzie na full a hamowane będzie drugie - wtedy ono będzie wyznaczać środek okręgu zataczanego przez pierwsze. Albo nadanie drugiemu obrotów przeciwnych - wtedy środek okręgu wypadnie między kołami, zataczany okrąg będzie najmniejszy a za tym najkrótszy czas ustawienia robota do jazdy na full po Y.

PS. odpowiedź przyszła gdy to pisałem.

Link do komentarza
Share on other sites

To ja się podepnę do dyskusji, bo widzę ciekawy zalążek. Myślał ktoś o korzystaniu z informacji o linii pod robotem jako informacji o niezgodności kątów robota i linii? Chodzi mi o to, że tak naprawdę, nie chodzi o to, żeby utrzymywać linię pod środkowymi czujnikami, ale o to, by robot jechał równolegle do linii (notabene chyba dlatego czujniki wygięte w łuk są nieco lepsze od ułożonych na prostej). Prawdopodobnie należałoby zastosować drugą linijkę czujników i na podstawie różnicy odczytu na linijkach obliczać kąt, który należałoby regulować prędkością obrotową silników. Oczywiście takie coś ma też swoje minusy - wagi czujników musiałyby się dynamicznie zmieniać i jeśli jechalibyśmy po linii tak, że tylko skrajne czujniki z lewej strony widziałyby ją, to nawet delikatne zakrzywienie trasy tak, że czujniki straciłyby ją powodowałoby ostry skręt w jej stronę. A co Wy sądzicie na temat takiego rozwiązania?

Link do komentarza
Share on other sites

Bobby, ciężko tutaj teoretyzować bez testów praktycznych. Jednak wydaje mi się to ciężkie do realizowania biorąc pod uwagę różnorodność tras (a właściwie ich elementów). Po drugie czasami są tak dziwne trasy, że między linijkami czujników mógłbyś mieć jakiś szybki zakręt/skok i byś się na tym chyba zgubił.

Zresztą mając jedną linijkę i znając długość robota też możesz wyliczyć brakujący kąt, tylko nie wiem czy nie byłby to krok wstecz do programu na if'ach, który sztywno reguluję reakcję robota zależnie od aktualnego stanu z czujników. Brak takiej sztywnej zależności pozwala używając PID'a jeździć dość płynnie.

Link do komentarza
Share on other sites

Myślałem o drugiej linijce ale jako wsparcie pierwszej w sytuacjach, gdy po 90° tracimy kontakt. Wtedy druga, odpowiednio cofnięta np. o 15cm prowadziłaby już lekko wyhamowanego robota bez dużych przerzutów przesterowanego i oślepionego brakiem sygnału PIDa.

Pomysł jazdy równległej jest fajny - wtedy już raczej zaniechałbym algorytmów z ważonymi czujnikami na rzecz wyznaczania przebiegu linii na podstawie dwóch punktów interpolowanych z intensywności oświetlenia kilku czujników - przydałaby się większa rozdzielczość. Szczerze mówiąc i tak pewnie wyjdzie, że na pokręconych trasach najbardziej optymalnym położeniem będzie "środek", ale propozycja godna rozważenia.

Rewolucją będzie wg mnie dopiero zapamiętywanie parametrów kolejnych segementów trasy i jazda trochę na pamięć - wg. zoptymalizowanej trajektorii wyliczonej na spokojnie po dojechaniu na metę jazdy "treningowej". Niedawno dowiedziałem się od Was, że tak można. Wtedy rzeczywiście można jechać bardziej z lewej lub z prawej, wcześniej wchodzić w normalne zakręty a 90° pokonywać driftem z minimalną stratą prędkości. Zamiast jechać "środkiem" powinno się policzyć gdzie "powinna być" linia na danym odcinku trasy i tam ją trzymać czujnikami. Taki wbudowany kompilator trasy powinien uwzględniać dynamikę robota i złożyć optymalny przejazd z łagodnych łuków i prostych "ścinających" większość artystycznie wyklejonych zakrętów.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wtedy rzeczywiście można jechać bardziej z lewej lub z prawej, wcześniej wchodzić w normalne zakręty a 90° pokonywać driftem z minimalną stratą prędkości.

Na początku wystarczy wykorzystywać to tylko do zwalniania przed "trudnymi" elementami trasy. Jest to na pewno jeden z kolejnych ważnych kroków jaki będzie trzeba wykonać. Tak samo jak regulowanie prędkości przez osobny PD.

Link do komentarza
Share on other sites

To, że robot odczytał, że linia jest pod bocznymi czujnikami, a nie środkowymi może oznaczać dwie rzeczy. Po pierwsze, że robot ma błąd kątowy, który w kolejnych iteracjach powinien się zmieniać, jeśli jedzie przed siebie a linia jest prosta, albo błąd offsetu, wtedy błąd w kolejnych iteracjach powinien zostawać taki sam. Właśnie dlatego w linefollowerach sprawdza się regulacja PD. Człon P eliminuje offset, a człon D dodatkowo wspomaga korekcję błędu kątowego. Dodanie drugiej linijki w tylnej części robota wydaje się zdublowaniem zadania członu D. Natomiast kiedy mamy do czynienia z na tyle ostrymi zakrętami, że robot gubi linię, i tak trzeba wprowadzać jakieś specjalne zabiegi programowe jak dawanie na sztywno maksymalnego uchybu w daną stronę. Wtedy robot zaczyna skręcać zanim druga linijka dotrze do tego zakrętu i robią się na niej jakieś dziwne odczyty, które trudno wykorzystać do sterowania. Skuteczność takiego rozwiązania pewnie będzie zależała od danej trasy, a nawet od konkretnego fragmentu. Oczywiście najlepiej by to było przetestować zamiast bawić się w teoretyzowanie.

Link do komentarza
Share on other sites

Dlaczego nikt nie bierze pod uwagę najlepszego znanego mi rozwiązania? Zamiast hamować jakiekolwiek koło po wewnętrznej zakrętu wystarczy przyspieszyć koło po zewnętrznej. Pewnie odpowiem sobie sam na to pytanie, dlaczego aktualnie nikt tego nie używa. Obecnie najszybsze lfry z turbinkami mają silniki 10:1 HP. Przy tego typu konstrukcjach ta przekładnia to już jest jakiś limit, nie da się założyć do robota silnika z przekładnią 5:1 HP (tak, jest taki w pololu) bo silnik ten będzie miał już zbyt mały moment i zbyt małe obroty aby umożliwić to co napisałem w drugim zdaniu. O ile się nie mylę to w idealnej sytuacji koło zewnętrzne na kącie prostym powinno obracać się 3x szybciej niż koło wewnętrzne aby utrzymać robota na idealnym łuku. Spójrzmy teraz na silniki, 10:1 HP ma 3000obr/m, roboty z tego co wiem, jeżdżą w zasadzie na nich na max PWMu przy zasilaniu z 6V, lub są nawet przewoltowywane lekko, zakładając maksymalne obroty dla koła wewnętrznego w okolicach 3000obr/m to koło zewnętrzne musiałoby się obracać z prędkością około 9000obr/m (silnik 5:1 HP ma "tylko" 6000obr/m).

Jako przykład tego o czym wyżej już pisał Treker i ownya:

Film nagrany z prędkością 240fps.

Dla porównania tak to wygląda normalnie:

Kolejny przykład, tym razem już na dłuższej trasie:

Dzięki takim nagraniom można na zawodach poprawić błędy w kodzie, bo widać je od razu.

Link do komentarza
Share on other sites

Hmm, to może dołożenie jednego ogniwa do lipola i zostawienie silników 10:1? I używanie trzeciej celi jako takiego "turbo" (normalnie PWM niższy) na kątach prostych, o czym pisał Sabre. Pozostaje kwestia, czy szybsze pokonywanie ciasnych zakrętów zniweluje spowolnienie spowodowane większą masą lipola. Można ewentualnie spróbować pobawić się przetwornicami step-up, ale uzyskanie dobrej wydajności prądowej (co najmniej 2A/silnik) może być ciężkie do wykonania, lecz odpada wtedy kwestia przetwornicy do zasilania silników, wystarczy zastosować stabilizowanego step-upa.

ED1. Mam jeszcze jedno pytanie, co do samej konstrukcji mechanicznej robota. Jeśli projektował ktoś z czołówki projektował LFRa w CADzie, mógłby wyzdradzić gdzie dokładnie wypada środek masy (jakiś skrin najlepiej)?

ED2. Jeszcze jedna rzecz wpadła mi do głowy - przez zmniejszenie odległości między kołami robot też byłby w stanie szybciej się obracać, może należy pójść w tym kierunku? Niestety skutkowałoby to też zmniejszeniem momentu obrotowego całego robota (patrząc na obroty w osi Z, nie na moment na kołach), co przy zbyt małej odległości między kołami mogłoby wręcz skutkować wolniejszym obrotem (za małe przyspieszenie kątowe).

Link do komentarza
Share on other sites

W modelarstwie lotniczym, w czasach "przedtrójfazowych" na porządku dziennym były przekładnie o podziale 3:1 do 5:1. Dziś wciąż są używane w tańszych modelach, wciąż są do kupienia, szczególnie do silniczków klasy 280, 300. Sa lekkie, mają metalowe tryby, czasem też łożyska kulkowe zamiast panewek no i silnik jest przyzwoity. Może by tak rozszerzyć swój horyzont poza uświęcone (zasłużoną) sławą Pololu?

Mniejszy moment bezwładności w osi Z a więc szybszą rerakcję w zakrętach można by osiągnąć także poprzez skupienie masy w środku. Być może bardziej opłaca się np. przysunięcie silników do siebie kosztem dłuższej półosi koła, a LiPol tuż nad nimi przez przekładkę z izolacji termicznej. Po bokach i z przodu tylko lekkie elementy.

"Turbo" można też zrobić metodą ładowania kondensatora. Być może będzie lżejszy niż duża cewa policzona dla kilku Amperów prądu. Można go ładować z istniejącego LiPola np. do kilku woltów poprzez proste ograniczenie prądowe a potem, gdy trzeba, komutować go dwama MOSFETami "na szczyt" baterii i dostawać przez np. 1 sekundę górkę napięcia. Taka jednorazowa pompa ładunkowa albo raczej FLASH z aparatu strzelający dodatkowym napięciem. Procesor byłby na bieżąco informowany o możliwości skorzystania z "turbo" poprzez pomiar prądu ładowania. Chyba to sobie zaraz narysuję 🙂

Link do komentarza
Share on other sites

Tylko jak ogromny musiałby być ten kondensator by być w stanie oddać około 4A przez powiedzmy 1s? C=(I*t)/U, więc wychodzi 1F dla dodatkowych 4V, w dodatku zmniejszających się wraz z upływem czasu jeśli dobrze rozumuję. Trza znaleźć superkondensator o napięciu min 4V i pojemności 1F, myślę, że jednak chyba taniej (i lżej) wyjdzie zastosowanie step-upa 😋

ED. Dobra, zwracam honor: Kondensator Gold Cap 1F/5.5V [digi-led], 2209978692, digi-led 3,50zł, 1F, 5,5V i wymiary podobne do baterii guzikowej, nie jest źle chyba, tylko ciekawe jaki opór wewnętrzny ma to cudo.

Link do komentarza
Share on other sites

Nie, takie kompletnie się nie nadają, mają prądy rozładowania rzędu mA i podtrzymują RAM itp. Są natomiast takie fajne płaskie, używałem ich kiedyś w projektach GSM. Podchodzą pod 1F i rezystancje wewnętrzne w okolicach kilkudziesięciu miliomów:

http://www.cap-xx.com

One są projektowane do zasilania modułów GSM a te mają paskudne wymagania na prąd w impulsie i stałość napięcia. Normalnie trzeba by projektować zasilacz na 2A a tak możesz odpalić GSM a nawet 2-slotowy EDGE na prawie pełnej mocy z 0.5A USB. Taki kondzioł ładuje się podczas przerwy między impulsami i oddaje 2A w czasie impulsu GSM. Mam jeszcze kilka w szufladzie, zrobię jakieś próby w wolnej chwili.

Ponieważ z definicji tylko jeden silnik by przyśpieszał przed zakrętem, wystarczy prąd dwa razy mniejszy. Choć szczerze mówiąc nie myślałem o takim wypasie. Być może pół sekundy też by robiło 🙄 bo jednak robocik jest szybki i czasy operacji typu wejście w zakręt są dość krótkie.

I tak pewnie skończy się na LiPolach 3S i pracy mostka/drivera na 60% PWM a "w potrzebie" to i na 100% - najpewniejsze i najmniej wydziwionych rozwiązań.

Link do komentarza
Share on other sites

Dlaczego nikt nie bierze pod uwagę najlepszego znanego mi rozwiązania? Zamiast hamować jakiekolwiek koło po wewnętrznej zakrętu wystarczy przyspieszyć koło po zewnętrznej.
ale to oznaczałoby, że na zakrętach jedziesz szybciej niż na prostej, a na zakrętach i tak trzeba zwalniać żeby nie wypaść z trasy. No i nie wykorzystujesz pełnej prędkości na prostej, wtedy kiedy właśnie można się rozpędzić.
Link do komentarza
Share on other sites

Może wyręczę Sabre i wrzucę filmik Tsubame, to z tego co mi się wydaje to tam właśnie stosował to o czym pisze, nie jest to turbinkowy FTL ale i tak bardzo szybki (filmik slow motion):

Link do komentarza
Share on other sites

KD93, niestety nie, choć bardzo bym chciał. Tsubame na tym filmie jeździ na zwykłym PIDzie, chciałbym przyspieszać koło zewnętrzne, ale do tego potrzebny jest co najmniej enkoder, który mierzyłby obroty koła wewnętrznego i zwiększał obroty koła zewnętrznego. U mnie koło zwalnia, nie jest hamowane, po prostu zwalnia do niskiego PWMa.

Link do komentarza
Share on other sites

Na powyższym filmiku b.ładnie widać to, o czym wspomniałem przy kątach prostych ( nie w dolnym, prawym rogu ale tu po prostu tak wyszło ). Że imo najszybsze odszukanie linii zapewni zatrzymanie jednego koła by od momentu jej zgubienia, nie przyrastała składowa X. Bo co z tego że LF wciąż jest "mobilny po X" skoro za chwilę praktycznie "wrócić do tyłu". Załamanie ma 90° a LF robi obrót aż o ≈130°.

Można by rozważyć inne aspekty:

- czy, co wynika i jak to ew. wykorzystać że LF zawsze jeżdżą zgodnie ze wskazówkami zegara i dominują zakręty w prawo

- czy jest jakaś optymalna odległość między czujnikami a "środkiem obrotu"

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.