Skocz do zawartości

lubniewicz

Użytkownicy
  • Zawartość

    27
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

lubniewicz wygrał w ostatnim dniu 2 sierpnia 2016

lubniewicz ma najbardziej lubianą zawartość!

Reputacja

6 Neutralna

O lubniewicz

  • Ranga
    3/10

Informacje

  • Płeć
    Mężczyzna
  1. Dziękuję za ciepłe słowa. Ja mam silniki z tego co pamiętam to chyba 29:1 lub 30:1 pololu. Obecnie jeden z nich odmówił współpracy (zwarcie - wywaliło bezpiecznik ale nic się nie stało, mostek caly) kwalifikuje się raczej na wymianę. Mogę polecić te silniki, ale nie mowie ze to jedyny wybór, fajne są też roboty z krokowcami. Dobierz tak silniki aby łącznie z kołami dały robotowi jakaś sensowna prędkość.
  2. Obsługa przerwania musi być bardzo krótka. Jeżeli w przerwaniu będzie robił jeszcze obliczenia to drugie się nie wykona, tzn normalnie nie możesz wywoływać przerwania w przerwaniu. Ponadto delay 5 ms blokuje Tobie wykonywanie programu, tak że zamiast 8 MHz masz rzeczywiste taktowanie 200 Hz!! Rozumiesz! Unikaj delaya jak ognia dosłownie. Tak jak nie stosujesz goto tak nie stosuj delay. Są inne metody programistyczne na uzyskanie opóźnienia a co najważniejsze nie blokują procka. U siebie mam 20MHz i ani jednego delaya. W tym czasie "jednocześnie" robię pomiary i obl kąta, obróbka czujnika IR do pilota, obróbka Bt, sterowanie mostakami, obsługa wyświetlacza, obsługa buzzera, onsluga 3 czujników odległości, obsługa autodiagnozy z kodami błędów, odczyt 2 enkoderow z kół. Wybraz sobie ze wale delaya 5 ms. W tym czasie robot jest ślepy i głuchy, dosłownie nic mie robi. Zamiast 20 MHz mamy 200Hz. Ponadto rozjezdza się krytyczny wątek f. Komplementarnego który musi się wykonywać o czas dt. W swojej konstrukcji mam nawet odpowiedni mechanizm który sprawdza czy ten wątek f. Komplementarnego wykonuje się co 10 ms, jak będzie 11 i więcej od razu mam komunikat przeciążenie . Ps. Sorry za literówki pisze z telefonu.
  3. Polecam się, napiszę potem jak poszło. Doradze Tobie w kwestii oprogramowania. W przerwaniu nie rób tych odczytów i obliczeń. Powołaj sobie zmienna globalna uint8_t. W przerwaniu zmieniaj ta zmiena na 1 to będzie Twoja flaga. W pętli główne daj warunek if sprawdzający flagę. Jak będzie jeden to wykonaj odczyt i obliczenia i ustaw flagę na 0. Zrób drugi warunek if w pętli głównej już z inną częstotliwością aby wysyłać po Uart. Nie wysyłaj za dużo danych bo bedzie Tobie blokowac ten krytyczny wątek z pierwszego if. Ten pierwszy if ma się wykonywać jak w szwajcarskim zegarku. Wywal delay.
  4. Super, że mogłem trochę pomóc. Dt jest to częstotliwość odczytu z czujnika, a w zasadzie częstotliwość wykonywania f. Komplementarnego. Ja w jednym wątku który jest wykonywany z częstotliwością 100Hz odczytuje dane i od razy wrzucam do f. Komplementarnego. Jak mogę coś poradzić wywal wszystkie delay. Zrób to na timerach.
  5. Ok. No to jedziemy. "Data rate configuration" - ustawiamy w czujniku z jaką częstotliwością ma dokonywać pomiarów i odkładać wyniki do swojej pamięci, abyśmy my mogli potem do niej sięgnąć. Jeżeli on dokonuje odczytów co 50Hz to nie ma sensu pobierać z jego pamięci z większą częstotliwością. Ja mam tak ustawione że odczytuje 100 razy na sekundę z czujnika, a czujnik dokonuje pomiaru 200 razy na sekundę, mogę się trochę mylić bo mówię z pamięci ale bynajmniej taka jest zasada. Więc nie ma sensu odczytywać z niego z częstotliwością 800Hz skoro on może dokonywać tylko pomiarów z częstotliwością 20Hz. Druga sprawa mówiłeś coś o prędkości UART. Ja mam komunikację po i2c. Odczytujesz położenie po UART? Wytłumacz mi to będę mógł Tobie więcej powiedzieć. Wspominałeś, ze jak masz podłączony kabel to lepiej działa, ale co to za kabel właśnie do UART czy jakiś zasilający. Jeżeli Uart to coś z tego kabla odczytujesz? Może stabilność jest lepsza ograniczasz w ten sposób przepustowość. Zgaduje, musisz mi więcej powiedzieć o budowie robota, podzespołach, komunikacji itp. Wzór wydaje się na pierwszy rzut oka ok, ale jak zwykle problem tkwi w szczegółach. Rozumiem, że wartość 0.00125 to inaczej pomniejszenie prędkości kątowej o DELTA_t? Aż z tak dużą częstotliwością wykonujesz pomiary? wystarczy na początek 100 hz czyli 0.01. Potem pytanie jak rozwiązałeś kat_acc. Ja zrobiłem to tak że biorę aktualny i 3 poprzednie wartości kąta z akcelerometru (nie już obliczoną wartość po komplementarnym) i dziele to przez 4 tak aby uzyskać wartość średnią.
  6. Tak robiłem.... dziwne. Napisz jaki masz wzór komplementarnego. [ Dodano: 06-11-2016, 22:50 ] Ty odczytujesz accela i gyro z 800Hz? A jakie masz "data rate configuration"? PS. Stała x mam na 0.01.
  7. Jasne że miałem taki problem ;D. Odczyt akcelerometru i żyroskopu odbywa się co 10 ms. Pobieram przyspieszenia, prędkość kątową i wrzucam do komplementarnego. Wartość współczynnika "x" - który określa czy pomiar jest bardziej wrażliwy na accel czy też żyro mam ustawione na x=0.03. UWAGA: Pamiętaj że pomiar przyspieszenia mamy w stopniach na sekundę. Jeżeli pomiar masz co 10ms to musisz pomnożyć odczytaną wartość z 0.01. Wtedy otrzymasz prędkość kątową stopnie na 10 ms. [ Dodano: 06-11-2016, 20:18 ] EDIT: Ja musiałem jeszcze zmienić znak prędkości kątowej. Uważaj na to!
  8. Czy masz jakieś enkodery? Jeżeli tak to jakie mają zadanie?
  9. Segregator strasznie się uginał, też myślałem, że zaraz nie wytrzyma i będzie gleba .Gorąco mi się zrobiło kiedy robot z pochylni jechał na aparat to były milimetry, wątpię aby aparat to konfrontację wytrzymał. Cała konstrukcja jest ciężka, waży chyba około 1,5 kg . W czasie przejazdów za mocno nie deptałem "gazu" , bez problemu mogłem go w każdej chwili wywalić. Czujniki odległości nie były drogie, około 7 zł za sztukę. Najlepiej mierzą odległość jak są skierowane prostopadle do przeszkody, kiedy tak nie jest ultradźwięki są po porostu rozpraszane i nie powracają do czujnika w formie echa. Jestem ciekawy jakby się spisywały optyczne czujniki odległości np Sharp. Wstawiam kolejny film, był nakręcony około 1 roku temu . Były to jedne z pierwszych testów. Robot nie miał jeszcze zaimplementowanych w kodzie enkoderów, a nastawy regulatorów były bardzo "ostre", agresywne i nieprzewidywalne, w każdej chwili mógł wystartować w jakaś stronę, aby kogoś trafić . Aha wtedy nawet nie napisałem sterowania, zresztą brakowało też aplikacji na adnka.
  10. Modyfikacji było bardzo dużo, głównie w oprogramowaniu, chociaż hardware też trochę zmieniłem a najbardziej widoczne to ułożenie bocznych czujników odległości, wcześniej były pod kątem prostym, ale niestety nie widziały ścian jak robot jechał pod kątem ostrym do ich powierzchni. Obecnie ustawiłem je pod katem 45 stopni i to jest taki kompromis, chociaż zdarza się, że czujniki czasami "gubią" ściany aby za chwile ponownie się pojawiły. Musiałem to uwzględnić w kodzie, aby za bardzo nie wariował . Na ostatnim filmie robot był w trybie autonomicznym, a co do tych wahnięć przy czarnym pudle to właśnie gubił ściany i ciągle cofał się aby ponownie obadać teren. Sam sobie taką ostrą jazdę tył-przód zapodał. Może rzeczywiści mogłem to w kodzie jakoś wygładzić. W sumie sam byłem zaskoczony tym zachowaniem, na wyświetlaczu miałem podgląd na odległości z prawe, lewej, prosto i rzeczywiście lewy czujnik raz widział ścianę - pudło, a po chwili wolną przestrzeń i zafiksował się. W kodzie jest tam prosty warunek jak jest dosyć mała odległość i nagle po kilku centymetrach jazdy pojawia się odległość 210 cm (taka odległość w moim projekcie wskazuje, że echo nie powróciło do czujnika i zadziałał timeout) to znaczy że jest błąd odczyty. Z tego co pamiętam to ma ignorować te 210 cm i wziąć ostatnią "mniejszą" wartość odległości, jeżeli kolejny pomiar jest 210 cm to ma już przyjąć że rzeczywiści jest 210 cm. Można to jeszcze dopracować, ale w sumie tryb autonomiczny nie był priorytetem . [ Dodano: 03-11-2016, 19:19 ] Wrzucam kolejny film. Przygotowałem dla robota przeszkodę w postaci leżącego segregatora który pełni funkcje równi pochyłej . Pierwszy część filmu przedstawia szybki przejazd, a druga wolny. Oczywiście robot dostał zestaw ochraniaczy jako że z założenia taka konstrukcja nie jest stabilna, a tym bardziej przy takich zabawach . Na koniec powiem, że robot przeżył
  11. Kolejny film, tym razem z robot w trybie autonomicznym pokonuje małą "przeszkodę"
  12. Jakbyś chciał coś podobnego wykonać to śmiało pomogę [ Dodano: 21-10-2016, 20:57 ] Wrzucam kolejny filmik. Tym razem robot holuje zabawkowy samochód . PS. Przepraszam za słabą jakość nagrania, nic nie miałem lepszego pod ręką.
  13. Dodatkowo w tego typu konstrukcji enkodery potrzebne są do stabilizacji toru jazdy. Początkowo bez oprogramowania korekty po enkoderach po przejechaniu 1 metra robot sam zakręcał w jedną stronę. Różnice w oporach na przekładniach praktycznie nie były wyczuwalne, lecz miały ogromny wpływ na jazdę. Kolejnym problemem było to, że jak robot jednym kołem wjechał np na dywan to nagle zakręcał. Obecnie prędkość każdego z kół odczytywana jest 50 razy na sekundę i z tą częstotliwością wprowadzane są korekty Pwm na każde koło aby utrzymać kierunek jazdy. Moim zdanie enkodery są bardzo pomocne i nie wyobrażam sobie takiej konstrukcji bez nich.
  14. Jak tylko ma stać to od biedy może być bez enkoderow, jak jeździć to już niekoniecznie. Zadaj sobie pytanie jak będziesz zadawał mu prędkość, kątem nachylenia? I tylko kątem? A co jeśli będzie jakieś nachylenie powierzchni. Nawet jadąc po płaskiej powierzchni to jak ma utrzymać stała prędkość, chcesz ręcznie regulować nachylenie? Ale tak jak mowisz wszystko zależy od założeń i oczekiwań.
×
×
  • Utwórz nowe...