Skocz do zawartości

Zagadnienie parkowania samochodu


Puchaczov

Pomocna odpowiedź

Cześć, potrzebuję napisać algorytm oparty o logikę rozmytą który będzie parkował samochód (taki teoretyczny). Nie mogę dociec dlaczego mi to nie działa, może ktoś podpowiedzieć czy mam poprawne dane wejściowe?

Moimi zmiennymi wejściowymi są: kąt do osi X oraz odległość ciężarówki od osi X

Wyjściem jest kąt skrętu kół.

Oto moje funkcje zbiory rozmyte

           //kat do osi miejsca parkingowego
           left = new TrapezoidFunction(-180, 0, -180, -10);
           straight = new TrapezoidFunction(-20, 20, 0.0, 0.0);
           right = new TrapezoidFunction(0, 180, 10, 180);

           //odleglosc ciezarowki os osi x
           distVLeft = new TrapezoidFunction(-1000, -40, -1000, -60);
           distLeft = new TrapezoidFunction(-60, 0, -30, -30);
           distCenter = new TrapezoidFunction(-30, 30, 0, 0);
           distRight = new TrapezoidFunction(0, 60, 30, 30);
           distVRight = new TrapezoidFunction(40, 1000, 60, 1000);

           //kat o jaki maja zostac skrecone kola
           leftAngle = new TrapezoidFunction(-40, 0.0, -40, -10);
           centerAngle = new TrapezoidFunction(-10, 10, 0.0, 0.0);
           rightAngle = new TrapezoidFunction(0.0, 40, 10, 40);
           steeringAngle = new FuzzyFrame(-40, 40, new List<Function>() { leftAngle, centerAngle, rightAngle });

Od razu nasuwa mi się pytanie czy otrzymaną wartością z kontrolera powienien być przyrost kąta skrętu kół czy nowy kąt ustawienia kół?

WheelAngle = updateWheelAngle(biezacyKatUstawieniaDoOsiX, xMiejscaParkingowego - xBiezacejPozycji);

w taki sposob generuje nowy kąt pod którym skręcone są koła. Czy biezacyKatUstawieniaDoOsiX nie powinien być różnicą poprzedniego kąta i tego nowego tak jak w przypadku pozycji?

                
              var radians = DegToRad(WheelAngle);
               x = x + Velocity * Time * Math.Cos(radians);
               y = y + Velocity * Time * (Math.Sin(radians));
               currAngle = currAngle + (Velocity * Time) / (Length * Math.Tan(radians));

w taki sposób próbuję wygenerować współrzędne nowego punktu. Jednak te punkty są niepoprawne. Kolejne iteracje nie powodują nawet zbliżania się do jakiegokolwiek sensownego wyniku. Zastanawiam się czy dobrze to próbuję policzyć. Velocity i Time przyjmuje jako 1 (stała prędkość)

Link do komentarza
Share on other sites

Możesz udostępnić zbiory rozmyte w jakieś wizualnej wersji (wykres)? Skąd wzięły się konkretne wartości? Wyklucz błąd wynikający z tych zbiorów?

Próbowałeś wspierać się Matalbem? Toolbox od sieci rozmytych jest całkiem przyjemny.

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!

Gość
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.