Skocz do zawartości

[Micromouse] Razor - worklog


Pomocna odpowiedź

Dziękuję za odpowiedź.

mog123

1) Mam ok. 10 imp./mm z enkoderów, ale z czujników optycznych sytuacja już nie jest taka liniowa. Zrobię chyba w miarę dokładną tablicę z gotowymi wynikami, gdzie elementami będą różnice wartości ADC (różnica pomiędzy wynikiem z wł. i wył. diodą) a indeksami odległości i wyszukiwanie binary searchem.

2)Wiem o liczbach ze stałym przecinkiem, nawet je wykorzystuję, chodziło mi o to, że Π jest niewymierne, więc gdzieś to zaokrąglenie musi być

4)Ruchy z zatrzymywaniem się co jedną komórkę tak sobie wychodzą mojemu robotowi. Mam aktualnie regulator PD, a pasowałoby dać PID, bo przy zatrzymywaniu może wejść w pętlę nieskończoną, bo nie będzie idealnie na oczekiwanej pozycji, a PID by go poprawiło po pewnym czasie. Jak jednak próbuję wpleść I do kodu, to albo po niewielkim odchyleniu koła zaczyna szarpać po kilka obrotów w jedną stronę, albo powoli niweluje błąd, i jak postawię spokojnie robota, to on cały czas się lekko się kręci, nie mogąc ustawić się w zerowej pozycji. Mam coś źle z kodem, czy muszę dokładniej dobrać współczynniki?

Kod:

void PD(void)
{
static int sE_tr=0, sE_rot=0;
rot();
trans();
enkTr = enkL+enkR;
enkRot = enkL-enkR;
regCurrErrTr = zadSTr - enkTr;
regCurrErrRot = zadSRot - enkRot;
sE_tr+=regCurrErrTr;
sE_rot+=regCurrErrRot;

PWML = REG_P_TR * regCurrErrTr
	 + (sE_tr * REG_I_TR)
	 + REG_D_TR * (regCurrErrTr - regPrevErrTr)

	 + REG_P_ROT * regCurrErrRot
	 + (sE_rot * REG_I_ROT)
	 + REG_D_ROT * (regCurrErrRot - regPrevErrRot);

PWMR = REG_P_TR * regCurrErrTr
	 + (sE_tr * REG_I_TR)
	 + REG_D_TR * (regCurrErrTr - regPrevErrTr)

	 - REG_P_ROT * regCurrErrRot
	 - (sE_rot * REG_I_ROT)
	 - REG_D_ROT * (regCurrErrRot - regPrevErrRot);

regPrevErrTr = regCurrErrTr;
regPrevErrRot = regCurrErrRot;

/*ustawienie PWM*/
}

Macio

1)Czyli jeśli według enkoderów jestem na środku, to mam zmienić wartość, jaką pokazują na taką, żeby dobrze pokazywały mi dalmierze? Np. jeśli według enkoderów jestem na środku, a według dalmierzy brakuje mi jeszcze 1cm, to zmieniam sobie wartość jaką pokazują enkodery, że przejechałem, w moim przypadku o 100 i czekam aż sobie dojadą do tego miejsca? Orientację według bocznych ścianek ogarniam.

2)Tak jak napisał mog123, pobawię się jeszcze tym, co mam, ale zaprojektuję sobie na przyszłość płytkę. Dzięki za propozycję buzzera. Dodam jeszcze czujniki, które będą patrzyły równo na bok, bo teraz mam na skosie i będę musiał robić odczyty trochę wcześniej, niż na środku komórki.

Dziękuję jeszcze raz za odpowiedzi.

Link do komentarza
Share on other sites

Przy sterowaniu pozycją robota, całka nie jest Ci potrzebna - regulator PD wystarczy

Aha i zamiast liczyć podwójnie PWM, najpierw oblicz wartości sygnału sterującego odp za ruch liniowy i obrotowy, a dopiero potem polacz je w calosc, w ten sposob co masz teraz, liczysz wszystko podwójnie.

ss_liniowy= ...

ss_obrotowy = ...

PWML=(abs(ss_liniowy+ss_obrotowy)>4095) ? sgn(ss_liniowy+ss_obrotowy)*4095 : ss_liniowy+ss_obrotowy;

PWMR=(abs(ss_liniowy-ss_obrotowy)>4095) ? sgn(ss_liniowy-ss_obrotowy)*4095 : ss_liniowy-ss_obrotowy;

nie wiem ile masz bitowy PWM, ale ja używałem 12 bitowego - pamiętaj by go ograniczyć do maksymalnego zakresu bo to też generuje kwiatki

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Wojcik98, dokładanie I działało tak jak powinno. Błąd nigdy nie zmaleje do 0. Człon I powoduje narastanie sygnału PWM. Gdy PWM osiągnie odpowiednio dużą wartość silniki ruszają i niestety powodują, że robot przesunie się o zbyt duży dystans. Wtedy człon I powoduje narastanie sygnału PWM, ale z ujemnym znakiem. Robot znowu rusza, tym razem w przeciwną stronę i ponownie o zbyt duży dystans. Ta sytuacja powtarza się w nieskończoność. Regulator PD powinien wystarczać do prędkości liniowej. Jeśli błąd jest zbyt duży to próbuj zwiększyć parametr P.

W przypadku stablicowania wartości ADC czujników odległości pozostaje problem kalibracji. Mysz nie zawsze będzie poruszać się w tym samym labiryncie i tym samym oświetleniu. Do kalibracji czujników polecam artykuł http://www.micromouseonline.com/2010/07/07/calibrating-reflective-sensors/. Z drugiej strony widziałem myszy które nie konwertowały wartości z przetwornika ADC na dystans tylko używały ich bezpośrednio. Działało to całkiem nieźle. W takim przypadku ustala się tylko wartość ADC z danego czujnika która mówi nam o tym, że robot znajduje się w środku pola. Różnica między wartością idealną (na środku pola) a wartością aktualną wchodzi jako błąd do regulatora P lub PD. Oczywiście jest to inny regulator niż ten który steruje silnikami, z innymi nastawami.

1)Czyli jeśli według enkoderów jestem na środku, to mam zmienić wartość, jaką pokazują na taką, żeby dobrze pokazywały mi dalmierze? Np. jeśli według enkoderów jestem na środku, a według dalmierzy brakuje mi jeszcze 1cm, to zmieniam sobie wartość jaką pokazują enkodery, że przejechałem, w moim przypadku o 100 i czekam aż sobie dojadą do tego miejsca? Orientację według bocznych ścianek ogarniam.
Możesz zrobić tak lub tak. Zobacz co lepiej zadziała, albo co jest wygodniejsze w implementacji.
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Poczytaj o liczbach ze stałym przecinkiem. W skrócie: liczba 8 bitowa pozwala Ci dojechac do 255, liczba 16 bitowa pozwala Ci dojechac do 65535. A wyobraz sobie ze pierwsze 8 bitów z liczby 16 bitowej to czesc calkowita, a nastepne 8 bitow to czesc ulamkowa. W ten sposob masz precyzje co do 1/256, czyli maksymalny zakres liczby 16 bitowej do 255,996

Takie podejście jest opisane w artykule batona: https://www.forbot.pl/forum/topics20/programowanie-sterowanie-robotem-mobilnym-klasy-20-vt7787.htm

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

Dziękuję za odpowiedzi.

Nie odpisywałem dosyć długo, bo najpierw czytam odpowiedzi, potem modyfikuję program i jak mam się z czym pokazać to dopiero wtedy piszę. A z racji tego, że jutro piszę test gimnazjalny postanowiłem popracować nad robotem 😃 . Działa mu teraz kalibracja, jednak zamiast obliczać odległość od ścianek biorę wartość bezpośrednio z czujników. Ze względu na jakość labiryntu kalibracja działa tak sobie i dopiero na zawodach będę musiał ją doszlifować. Działa również mapowanie i fast run, jednak właśnie przez labirynt nie zawsze kończy się to sukcesem, bo wystarczy przesunąć trochę jedną ścianę i robot już inaczej jedzie. Będę musiał chyba zainwestować w jakiś porządny labirynt. Robot jest już zdatny do zawodów i jadę z nim do Rzeszowa. Potem spróbuję dodać mapowanie bez zatrzymywania (na prostych) a później płynne zakręcanie. I jeszcze filmik:

Link do komentarza
Share on other sites

Nie jest źle! 🙂 Robot zapamiętał labirynt, pojechał najkrótszą ścieżką i ładnie (przynajmniej dla mnie 😉 ) trzymał się ścian, co w porównaniu do tego, co miałem rok temu jest dużym postępem. Na początku przy mapowaniu coś się gubił, ale wystarczyło wyprostować diody i pojechał dobrze. Przy następnej konstrukcji położę diodę obok fototranzystora i będzie OK. Patrząc na inne konstrukcje będę musiał też dać mniejszy akumulator i trochę zwęzić robota. Gdybym troszkę wcześniej wznowił prace, to może bym również dorobił jakieś płynne skręcanie, przynajmniej w fast/speed runie. No ale cóż, może na następne zawody (które jeszcze nie wiem kiedy będą) zrobię 😉 . Jeszcze co do zawodów, to były bardzo fajnie zorganizowane. Labirynt w strefie serwisowej do świetny pomysł, dzięki niemu mogłem sobie idealnie skalibrować robota, choć wydaje mi się, że labirynt konkursowy miał nieco ciemniejsze ścianki. Labirynt mógłby mieć również kilka możliwych dróg do środka, żeby robot wybrał optymalną dla siebie.

Filmik z zawodów:

I dla porównania z Robocomp 2013 z robotem Speedy:

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.