Generowanie danych testowych dla jazdy samochodem

2

Cześć,
Dostałem taki problem w robocie:
Wygenerowanie danych testowych w których musi się zawierać:
Czas - pomiary są co 1s od startu samochodu,
Rpm - aktualne obroty silnika,
t.oleju - temperatura oleju, trzeba to jakoś uzależnić od czasu i prędkości aby rosła w miarę rzeczywisty sposób,
Prędkość - aktualna prędkość samochodu,
Bieg - aktualny bieg samochodu.
gps_x, gps_y - położenie, tutaj jest wymóg uzależnienia tego od prędkości aby co sekundę aktualizować swoją pozycję na podstawię wcześniejszej prędkości (50km/h*1s~14m).

Danych ma być 1000 ~ 15min jazdy samochodem

Wygenerowanie danych losowych nie było problemem, ale uzależnienie wszystkiego aby generując dane mógł wyjść rzeczywisty przejazd samochodem to już problem. Siedzę nad tym od tygodnia i brak pomysłów.

Do tej pory generowałem biegi losowo, a prędkość uzależniłem od biegu, generuję losowo liczbę z odpowiedniego przedziału dla danego biegu, a dla rpm ułożyłem wzór działający na podstawie biegu, prędkości oraz odpowiedniego przełożenia dla danego biegu. Sprawdzałem z kalkulatorami w necie i tutaj obroty wychodzą rzeczywiste do generowanych danych.

Będę wdzięczny za wskazówki

1

Ja bym nie losował v / RPM, a coś jak "manewr"

  • intensywne przyśpieszanie
  • lekkie przyśpieszanie
  • równa jazda
  • ...

I całkował do biegu+rpm i prędkości (całkował to łatwo mi się mówi, na miarę wrzuconego biegu dynamika się zmienia, przy intensywnym rozpędzaniu koniec jedynki się osiąga po np sekundzie)

Losowanie jakie proponujesz jest strasznie nierealistyczne

0

@AnyKtokolwiek: Rozumiem to tak, że muszę z góry założyć dynamikę jazdy oraz dostosować to do generowania danych?

0
ProgramistaAmatorrr napisał(a):

@AnyKtokolwiek: Rozumiem to tak, że muszę z góry założyć dynamikę jazdy oraz dostosować to do generowania danych?

tzn zakładasz teoretyczną dynamikę na 1,2,3,4,5
Przyśpieszanie full używa 100%, lekkie używa 30,50% (ile poziomów byś przewidział)
hamowanie też ma kilka poziomów, od "wrzucę luz bo dojeżdzam do skrzyżowania z czerwonym" po hamowanie ratunkowe

A co kierowca robi, to losujesz ... może nawet pary (1,3) -> pierwszy poziom przyśpieszania, przez 3 sekundy, potem kierowca może zrobić coś następnego, np (5,10) -> spokojna jazda przez 10 sek

Jesli szalona dokładność nie jest ważna, bym założył ze moment obrotowy jest stały. Ze zmiennym momentem robi się matematyka wyższa.

Aha, jak bym to gryzł językiem programowania, a nie excelem. I wiem, ze umiałbym to zrobić, trcohe by zeszło

1

t.oleju - temperatura oleju, trzeba to jakoś uzależnić od czasu i prędkości aby rosła w miarę rzeczywisty sposób,

Nie tylko od tego. Liczy się też temperatura na zewnątrz. W zimie dłużej trwa osiągnięcie docelowej temperatury pracy niż w lecie.

Prędkość - aktualna prędkość samochodu,
Bieg - aktualny bieg samochodu.

Obroty są uzależnione od prędkości oraz biegu. Im wyższa prędkość i mniejszy bieg, tym większe obroty.

gps_x, gps_y - położenie, tutaj jest wymóg uzależnienia tego od prędkości aby co sekundę aktualizować swoją pozycję na podstawię wcześniejszej prędkości (50km/h*1s~14m).

Ale musisz bazować na rzeczywistych drogach, czy może to być prosta przez np. pola? :D Bo jak trzeba bazować na rzeczywistych drogach, to zaczyna się to robić trochę skomplikowane.

0

Takie bardziej symulacyjne gry wyścigowe mają często funkcję telemetrii, czyli możliwość dobrania się do takich danych. Jedynie może temperatura oleju może być rzadziej dostępna, ale do tego można sobie wymyślić własny prosty model generujący ją w miarę wiarygodnie z innych danych.

0
xy napisał(a):

.. Jedynie może temperatura oleju może być rzadziej dostępna, ale do tego można sobie wymyślić własny prosty model generujący ją w miarę wiarygodnie z innych danych.

W samochodzie który nie jedzie w wyścigu to proste zagadnienie, wzrost w 2-5 minut i stały poziom

@ProgramistaAmatorrr
W jakim kontekście to tkwi?
Wyścig, ciężarówka w górach, osobówka w normalnej eksploatacji, gra?
Jaki poziom dokładności / realizmu? Ma nie razić wielkimi wtopami, czy bardzo bliski realiom?

@.andy
O ile kolega nie ma podstawowych intuicji mechanicznych i fizycznych, to w ogóle porażka. Ale miejmy nadzieję, że ma.

0

A może by do problemu podejść od d**y strony?

Czyli najpierw wyznaczyć współrzędne bazując na rzeczywistej drodze z ograniczeniami itp.

Mając to i zaczynając od prędkości bazowej czyli 0km/h, dodając przyśpieszenie jesteś w stanie obliczać resztę parametrów.

--- EDYTKA ---

Dostałem taki problem w robocie:
Wygenerowanie danych testowych w których musi się zawierać:

Ja tak jeszcze wrócę do samego problemu. Od strony analizy. Co wygenerowanie tych danych testowych ma rozwiązać? W sensie co dalej z nimi będzie robione? Będzie porównanie z rzeczywistymi robione w celu weryfikacji czy coś? Sztuka dla sztuki?

0

@.andy: Tutaj realizm ma być tylko pozorny, w sensie można założyć odpowiedni model i go wygenerować. Załóżmy, że jest to lato do generowania t.oleju
Nie muszę bazować na realnych drogach, położenie może się zmieniać dowolnie, ale musi być uzależnione od prędkości poprzedniego wiersza

To będą tak zwane dane prawidłowe, później będę je modyfikować o nowe dane tzw. niepoprawne i na ich podstawie będę określać stan silnika. Tam gdzie będą zachodzić jakieś anomalie będę mógł prognozować potencjalne uszkodzenia, wady. Coś z pokroju big-data, machine_learning oraz BI bo na końcu będą z tego generowane raporty.

0

@AnyKtokolwiek:
To jest w kontekście zwykłej eksploatacji samochodu.
Realizm nie musi być przesadny. Chodzi raczej żeby całość stanowiło logiczną całość, ale jeśli temperatura będzie się zmieniać w stałych okresach czasu załóżmy, że nie uwzględniamy pogody oraz innych czynników zewnętrznych to nie ma problemu

0

@xy:
Kojarzysz może jakie tytuły mają takie możliwości? Z ciekawości to sprawdzę nawet jeśli mi się to nie przyda, ale może jakaś inspiracja zawsze wpadnie dzięki takiemu modelowi

0

Dla większości tytułów, które mają fora tam coś się zapewne da uzyskać i znaleźć narzędzia do tego: https://www.racedepartment.com/forums/#sim-racing-games.359
Przykładowo: Assetto Corsa, rFactor, Automobilista, Live for Speed

0

Ja bym właściwie cały problem sprowadził do jednego - przyśpieszenia. Ewentualnie jeszcze warunki brzegowe (czy samochód stał na początku czy jechał).

Mając przyśpieszenie (dodatnie lub ujemne) możesz policzyć prędkość i położenie.
Mając prędkość, ustalasz bieg.
Mając bieg i prędkość - masz obroty.

Najtrudniej chyba z olejem, zależy jak to ma być dokładne.

Pochodną przyśpieszenia jest temperatura oleju, silnik najmocniej pracuje przy wysokim przyśpieszeniu, mniej przy zerowym, a prawie w ogóle przy ujemnym. Zakładasz temperaturę docelową proporcjonalną do obrotów i zakładasz, że temperatura będzie dążyć do tego punktu liniowo w czasie.

No i trzeba jakoś symulować rozkład przyśpieszeń. Ale tu rozstrzał może być ogromny (czy samochód jedzie w mieście, czy na autostradzie...).

2

Edit:
Dopiero zauważyłem że to dział baz danych :D No ale data fixtures i tak lepiej jakimś kodem generować, a nie w SQL ;p

Podszedł bym do tego trochę inaczej podzieliłbym sobie problem na działy np:

  • Samochód (różne rodzaje) każde auto ma inny vmax, inne przyśpieszenie, spalanie, areodynamike, inaczej spowalnia go / przyśpiesza droga etc.
  • Kierowca (różnie zachowujący się podczas jazdy, jeden wolniej zmienia biegi, drugi szybciej, tolerancja stosowania się do przepisów itp.)
  • Pogoda (wiatr, deszcz, słońce) każda wpływa inaczej na końcowe wyniki (temperature oleju na początku, opony, przyczepność itp.)
  • Jakość pomiaru GPS (satelita, po masztach) to by wprowadzało "realne" zakłócenia w gps'ie
  • Trasa (zwykły graf otwarty) gdzie każde powiązanie pomiędzy punktami ma swój dystans, maksymalną prędkość, opóźnienie wynikające ze świateł, rodzaj nawierzchni itp.

Wychodzi mi (tobie może wyjść więcej) 5 czynników które co każde np 200 ms mają wpływ na to jak zachowuje się pojazd w danym momencie (np kierowca dodaje gazu, ale auto ma inne przyśpieszenie, pogoda deszczowa odejmuje mu 5 km z vmax'a itp.)

Po zbudowaniu obiektu doświadczalnego (łączy by wszystkie 5 czynników ze sobą) przepuściłbym go przez pętle która co każdy obieg prosiła by "obiekt" o zaaktualizowanie swojego stanu i podanie aktualnych wyników.

Linki które mogą Ci się przydać:
https://refactoring.guru/pl/design-patterns/builder -- Do stworzenia obiektu
https://refactoring.guru/pl/design-patterns/decorator -- Do dodania pogody dla np oleju
https://refactoring.guru/pl/design-patterns/mediator -- Żeby jakiś porządek zrobić sobie w kodzie
https://refactoring.guru/pl/design-patterns/state -- Inne zachowanie w zależności od biegu (vmax, przyśpieszenie, spalanie etc.)

0
m31 napisał(a):

Ja bym właściwie cały problem sprowadził do jednego - przyśpieszenia. Ewentualnie jeszcze warunki brzegowe (czy samochód stał na początku czy jechał).

Mając przyśpieszenie (dodatnie lub ujemne) możesz policzyć prędkość i położenie.
> Mając prędkość, ustalasz bieg.
Mając bieg i prędkość - masz obroty.

Z tym biegiem to nie bardzo.
O wiele większe znaczenie ma realizowany plan jazdy. Przy 50 km/h można mieć 2,3,4,5, zależy jaki cel realziujesz (a w niektórych jedynkę, przynajmniej w szybkich motocyklach)

0

Opis uwagę trzeba brać jeszcze wykres momentu obrotowego.
Np. w silnikach śmierdziuszkach wysoki moment ma się z tego co wiem praktycznie od razu, natomiast w benzynowych dopiero przy X obrotach.

0

ja bym to zrobil na klawiszach strzalkach i wszystka generacje uzaleznil od tego jaka strzalka jest przytrzymana i jak dlugo

4

A może wystarczy pozbierać trochę danych przez ELM327? W Google Play są aplikacje, które to potrafią. https://www.carscanner.info/records/
Problem będzie z temperaturą oleju - w zwykłych samochodach może nie być takiego czujnika.

1

Zależy jaką jakość tych danych chcesz uzyskać. Jeżeli wysoką, to "generowanie danych" NIE MA sensu. Trzeba by je pobrać z rzeczywistego użytkowania, wtedy replikować i lekko zmieniać. Jak nie ma takiej potrzeby, to możesz sobie stworzyć model samochodu z przyśpieszaniem i hamowaniem, napisać kilka schematów zachowania (przyśpieszanie, utrzymanie prędkości i zwalnianie) i składać je w losowej kolejności. To jak szczegółowy ma być model samochodu to już znowu kwestia wymagań. Można dołożyć różne krzywe wzrostu temperatury, preferencje "kierowców" w sprawie dynamiki jazdy i przedziału obrotów silnika i pewnie
Kiedyś spotkałem się z przypadkiem ML wytresowanego na wygenerowanych danych i efekt był dość żałosny.

0

@Potat0x: Korzystałeś może kiedyś z takich urządzeń? Bo szukam jakie dane to wypluwa i nie widzę żadnych sensownych logów tylko pokazuje zegary itp w czasie rzeczywistym. Możliwe, że nie dokopałem się jeszcze do wszystkich funkcji.

Może ktoś się orientuje gdzie można znaleźć takie dane z tych aplikacji i urządzeń? Czy takie coś jest możliwe do znalezienia? Ktoś to udostępnia czy jedyna opcja to samemu przeprowadzenie całej operacji?

2

Mam na telefonie Car Scanner. Jutro podrzucę przykładowy CSV z prędkością i obrotami.
Żeby skorzystać z aplikacji potrzebujesz czegoś takiego https://allegro.pl/kategoria/diagnostyka-i-pomiary-testery-i-interfejsy-diagnostyczne-28413?string=ELM327 - podłączasz to do samochodu i łączysz się telefonem (na którym jest zainstalowana aplikacja) przez Bluetooth.

Może ktoś się orientuje gdzie można znaleźć takie dane z tych aplikacji i urządzeń?

Niczego takiego nie znam.

Edit:
W załączniku wrzuciłem dane z ok. 10 minut jazdy, podgląd:

"73295.633374";"Obroty silnika";"2464";"rpm"
"73295.824374";"Chwilowe zużycie paliwa (l/100 km)";"0";"L/100km"
"73295.824374";"Pokonany dystans";"0.398526087027778";"km"
"73295.824374";"Pokonany dystans (całkowity)";"0.398526087027778";"km"
"73295.824374";"Prędkość samochodu";"51";"km/h"
"73295.824374";"Przyśpieszenie pojazdu";"0.102820430686421";"g"
"73295.824374";"Średnia prędkość";"11.4165770943257";"km/h"
"73296.017374";"Obroty silnika";"2485";"rpm"
"73296.218374";"Chwilowe zużycie paliwa (l/100 km)";"0";"L/100km"
"73296.218374";"Pokonany dystans";"0.404099694277778";"km"
"73296.218374";"Pokonany dystans (całkowity)";"0.404099694277778";"km"
"73296.218374";"Prędkość samochodu";"51";"km/h"
"73296.218374";"Przyśpieszenie pojazdu";"0.0677925606009736";"g"
"73296.218374";"Średnia prędkość";"11.540114612552";"km/h"
"73296.418374";"Obroty silnika";"2520";"rpm"
"73296.617374";"Chwilowe zużycie paliwa (l/100 km)";"0";"L/100km"
"73296.617374";"Pokonany dystans";"0.409867428833333";"km"
"73296.617374";"Pokonany dystans (całkowity)";"0.409867428833333";"km"
"73296.617374";"Prędkość samochodu";"52";"km/h"
"73296.617374";"Przyśpieszenie pojazdu";"0.0678932202488712";"g"
"73296.617374";"Średnia prędkość";"11.6678691659035";"km/h"

nie ma np. temperatury płynu chłodniczego, mimo że aplikacja potrafi ją odczytać. Trochę chaos jest w tym pliku.

carscanner.csv

1 użytkowników online, w tym zalogowanych: 0, gości: 1