Skocz do zawartości

Błąd pomiaru przejechanej drogi podczas skrętu Arduino Uno - Robot LineFollower


Pomocna odpowiedź

Napisano

Dzień dobry,

zbudowałem robota linefollower, na Arduino Uno, robot ma napęd na 2 koła, pozycje zliczam czujnik szczelinowy + tarcza enkoderowa

Generalnie robot jeździ wzdłuż linii poprawnie, zliczanie impulsów dla koła lewy i prawy jest ok.

Chciałem dodać funkcję aby po przejechaniu np. 1metra, robot się zatrzymał i tutaj pojawia się problem, ponieważ jak podczas jazdy prosto w idealnych warunkach zliczone impulsy na kole lewym i prawym powinny być takie same, jednak podczas skręcania, te odczyty (zliczone impulsy na lewym i prawym kole) się różnią od siebie - co jest logiczne.

 

Moje pytanie/prośba:

  • Jak zliczać przebytą drogę podczas skrętu w prawo lub lewo?
  • Prośba o kawałek kodu / poradę / artykuł. (znalazłem artykuł zagranicznych wykładowców, tamte macierze, wzory są dla mnie skomplikowane)

 

PS. Prosba o przeniesienie zapytania jeśli nieodpowiedni dział.

PS2. obejrzałem mase filmików / artykułów, jednak nie znalazłem odpowiedzi na moje pytanie.

 

Z góry dziękuję,

Adrian.🙂

 

  • Lubię! 1
1 godzinę temu, arek5195 napisał:

Czy jest ktoś w stanie mi pomóc? 

Cierpliwości - naprawdę myślisz, że wszyscy tutaj mają włączone powiadomienia, czekają aż zadasz pytanie i natychmiast rzucą wszystko i siądą do odpowiedzi???

Dnia 24.04.2022 o 18:42, arek5195 napisał:

Jak zliczać przebytą drogę podczas skrętu w prawo lub lewo?

Możesz przyjąć, że droga to średnia dróg przejechanych przez koła, a więc...

Dnia 24.04.2022 o 18:42, arek5195 napisał:

Prośba o kawałek kodu

Ależ proszę 🙂

Nimpulsy = (Nlewy + Nprawy) / 2;

Niestety - jeśli chcesz się bawić robotami to bez znajomości geometrii może być raczej ciężko.

 

  • Lubię! 1
  • Pomogłeś! 1

Należy zauważyć,że skręcając, pojazd porusza się po okręgu.Koło wewnętrzne porusza się po okręgu o promieniu r1 a koło zewnętrzne po okręgu r2.Ten promień r2 jest większy od promienia r1 o rozstaw kół. Koło poruszając się po okręgu  pokonuje drogę zgodnie ze wzorem s= α*2πr/360 czyli koło wewnętrzne s1= α*2πr1/360 a zewnętrzne s2= α*2πr2/360.I w tym miejscu dochodzimy do sedna problemu czyli do definicji przebytej drogi przez pojazd dwuśladowy w ruchu po okręgu.Proponuję by ta droga była mierzona względem środka pojazdu  promieniem  r1+ rozstaw kół/2 lub (r1+r2)/2.Przepraszam za te nawiasy ale inaczej zapisać nie mogę a zdaję sobie sprawę z tego,że nie jest to zgodne z ogólnie przyjętym językiem w matematyce .Pojazd skręca raz w lewo raz w prawo.W związku z tym w zależności od tego w którą stronę skręca pojazd koła r są kołami wewnętrznymi a a innym razem zewnętrznymi.A zatem mierzona droga względem środka pojazdu Sśroka pojazdu=(s1+s2)/2.Warunek jest jeden - muszą być dwa identyczne jakieś enkodery współpracujące z  kołami.Te wzory a szczególnie ten ostatni to kawałek kodu.W Twoim przypadku  wzory s1,s2 masz wyznaczone już w istniejącym kodzie.Wystarczy zastosować wzór.Oczywiście z wartości s1,s2 wynika dużo więcej informacji ale nie jest to przedmiotem rozważań.

Dziękuję Wam za odpowiedź, była mega pomocna!🙂

Idąc dalej zderzyłem się z kolejną ścianą. Chciałbym aby robot jadąc po linii aktualizował swoją pozycję w układzie współrzędnych (pozycja X, pozycja Y). 

Jednak nie wiem jak określić kierunek jazdy, a dokładniej kąt skrętu.

Natknąłem się na poniższe wzory (najbardziej przystępne, do przełożenia na kod arduino):

image.png.8e285a6bf30d953d706ee51df12d4bc3.png

Rozumiem że:

PozX'= PozX + Droga robota * cos ∅

PozY'= PozY + Droga robota * sin ∅

 

  • Ale obliczenie ∅' = ∅ + (DrogaPraweKolo - DrogaLeweKolo / L) jest na pewno prawidłowe?
  • L rozumiem to odległość między kołami?
  • ∅ powinno zmieniać się w zakresie od 0 do 360 stopni? 
  • Prośba o pomoc jak wyznaczać kierunek jazdy.

 

Dziękuję,

Adrian 🙂

Może czas sobie narysować?

rycinka.thumb.png.83e1826786ff7f0e03b5e0f0dd8eb6bf.png

Obliczenia na obrazku to informacja, skąd bierze się wyliczenie kąta. Dokończ sam, by odpowiedzieć sobie na wątpliwości odnośnie poprawności cytowanych wzorów. Dodam, że ∅ to symbol średnicy, a kąt w równaniach z Twojego posta oznaczony jest grecką literą fi - Φ. Jest on wyrażony w obliczeniach w radianach. A może śmiało sięgać w każdą stronę w nieskończoność, jak i zresztą również mógłby, gdyby był wyrażony w stopniach. Najlepiej będzie, jeżeli całą resztę też przemyślisz, wyprowadzisz czy narysujesz sobie ze zrozumieniem.

  • Lubię! 1

Arek5195 przeczytaj ostatnie zdanie z mojego poniedziałkowego posta.Musisz dokonać analizy wzoru Sśroka pojazdu=(s1+s2)/2 .W dalszych rozważaniach to zastosowanie będzie mieć geometria analityczna,której musisz poświęcić trochę czasu.Podpowiem - musisz odpowiedzieć sobie na pytanie co będzie jeśli s1=s2,s1>s2,s1<s2. Te wartości s1 i s2 są wprost proporcjonalne do ilości zliczeń związanych z enkoderami . Jak już wyciągniesz  wnioski to będziesz gotowy do  dokonania modyfikacji kodu.A później jeszcze jeden krok i powstanie zagadnienie pojazdu autonomicznego.

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...