In [1]:
# Import Librarys
import numpy as np
import matplotlib.pyplot as plt

Vehicle Data

Data1.txt

Dies sind die Werte aus der Datei "data1.txt". Hierbei hatten wir einen folgende Startwerte:

- MotorTorque : 100
- maxSpeed : 10

Nach jeder einzelnen Runde wurden diese beiden Werte um 10% erhöht. Die Listen sind hierbei die Endzeiten der Runden sowie der MotorTorque. Ich beachte hierbei nur eine der beiden Variablen, da diese direkt zueinander proportional sind. Zu beachten ist hier bei, dass die Werte für Torgue, maxSpeed und SteerAngle nach den Wertereihen kommen.


In [2]:
#Create Lists
time = [233.32,198.92,184.7,168.18,148.22,138.88,151.76,127.48,119.12,115.24,110.7,104.28,105.52,109.2,120.7401,147.027]
motorTorque = [100,110,121,133.1,146.41,161.051,161.051,177.1561,194.8717,214.3589,235.7948,259.3743,285.3117,313.8429,345.2272,379.74992]
print(time)
print('elements in time: '+str(len(time)))
print(motorTorque)
print('elements in motorTorque: '+str(len(motorTorque)))


[233.32, 198.92, 184.7, 168.18, 148.22, 138.88, 151.76, 127.48, 119.12, 115.24, 110.7, 104.28, 105.52, 109.2, 120.7401, 147.027]
elements in time: 16
[100, 110, 121, 133.1, 146.41, 161.051, 161.051, 177.1561, 194.8717, 214.3589, 235.7948, 259.3743, 285.3117, 313.8429, 345.2272, 379.74992]
elements in motorTorque: 16

Da wir nun die entsprechenden Werte in numpy importiert haben, können wir diese nun erkunden und auswerten. Schauen wir nun erst einmal nach ein Paar Plots, welche die Datensätze beschreiben kö


In [3]:
np_time = np.array(time)
np_torque = np.array(motorTorque)
np_2d=np.array([np_time,np_torque])
np_2d


Out[3]:
array([[ 233.32   ,  198.92   ,  184.7    ,  168.18   ,  148.22   ,
         138.88   ,  151.76   ,  127.48   ,  119.12   ,  115.24   ,
         110.7    ,  104.28   ,  105.52   ,  109.2    ,  120.7401 ,
         147.027  ],
       [ 100.     ,  110.     ,  121.     ,  133.1    ,  146.41   ,
         161.051  ,  161.051  ,  177.1561 ,  194.8717 ,  214.3589 ,
         235.7948 ,  259.3743 ,  285.3117 ,  313.8429 ,  345.2272 ,
         379.74992]])

In [4]:
np_2d.shape


Out[4]:
(2, 16)

In [5]:
plot = plt.plot(np_torque,np_time)
plt.xlabel('MotorTorque')
plt.ylabel('Zeit in s/Runde')
plt.title('Messwerte von data1.txt')
plt.show()


Wie wir sehen ist der Graph in etwa parabelförmig. Es gibt einen ungewöhnlichen Wert bei ca 160 MotorTorque. Betrachten wir diesen genauer mit den benachbarten Werten. Es handelt sich dabei um den 7. Wert.


In [6]:
print(np_2d[:,5:8])


[[ 138.88    151.76    127.48  ]
 [ 161.051   161.051   177.1561]]

Hierbei ist zu beachten, dass sich der Wert vom MotorTorque nicht verändert. Dies ist eine Abweichung, welche durch mich verursacht wurde, da ich dort aus Versehen das Programm gestoppt hatte, und durch das neue Starten das Fahrzeug aus den Stand startet musste. Interessant ist hierbei jedoch, das es einen erheblichen Unterschied machte, ob ein Fahrzeug bereit Geschwindigkeit aufgenommen hat, oder aus den Stand startete. Betrachten wir diesen Unterschied einmal genauer.


In [7]:
plot = plt.plot(np_torque[4:8],np_time[4:8])
plt.xlabel('MotorTorque')
plt.ylabel('Zeit in s/Runde')
plt.title('Messwerte um Wert 7')
plt.show()


So erhalten wir an dieser Stelle eine Verschiebung um


In [8]:
print(np_time[6]-np_time[7])


24.28

24.28 Sekunden. Dies scheint allerding recht ungewöhnlich, da die entsprechenden Anfangswerte selbst bei den langsamen Werten deutlich schneller sind. Betrachten wir daher einmal die Verteilung der Zeit auf den einzelnen Gates. Da laut Messwerten die Geschwindigkeit die gleich ist, betrachten wir diese an den einzelnen Gates. Dafür fügen wir die entsprechenden Werte in eine Liste ein. Wichtig sind für uns die Indizen 5 und 6. Dabei nutzen wir ein 2D Array mit dem ersten Wert für das Gate und den zweiten Wert für die entsprechende Zeit. Dies erledigen wir für die ersten 20 Werte, da dies eine ausreichende Beispielmenge sein sollte.


In [9]:
np_gateSpeed6 = np.array([[1,3.28],[2,7.60],[3,13.70],[4,1.74],[5,5.78],[6,3.58],[7,0.40],[8,-1.8],[9,-1.2],[10,11.53],[11,-0.95],[12,11.71],[13,3.34],[14,10.09],[15,5.95],[16,4.99],[17,4.11],[18,6.74],[19,6.30],[20,8.4]])
np_gateSpeed5 = np.array([[1,2.55],[2,5.41],[3,9.66],[4,4.04],[5,5.44],[6,10.01],[7,8.86],[8,4.41],[9,5.7],[10,9.68],[11,-2.45],[12,12.71],[13,5.9],[14,9.44],[15,5.84],[16,-0.18],[17,2.05],[18,7.73],[19,2.93],[20,4.48]])

In [10]:
np_gate = np_gateSpeed6[:,0]
np_speed6 = np_gateSpeed6[:,1]
np_speed5 = np_gateSpeed5[:,1]
print(np_gate) ; print(np_speed6) ; print(np_speed5)


[  1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.  15.
  16.  17.  18.  19.  20.]
[  3.28   7.6   13.7    1.74   5.78   3.58   0.4   -1.8   -1.2   11.53
  -0.95  11.71   3.34  10.09   5.95   4.99   4.11   6.74   6.3    8.4 ]
[  2.55   5.41   9.66   4.04   5.44  10.01   8.86   4.41   5.7    9.68
  -2.45  12.71   5.9    9.44   5.84  -0.18   2.05   7.73   2.93   4.48]

In [11]:
plt.plot(np_gate,np_speed5)
plt.plot(np_gate,np_speed6)
plt.xlabel('Gates')
plt.ylabel('Speed')
plt.title('Comparison of Value 5 and 6')
plt.show()


Selbst wenn beide Graphen sehr starke Spitzen besitzen, in welchen sie sich stark voneinander unterscheiden, haben sie auch Strecken, in welchen sie die gleiche Geschwindigkeit hatten. Daher nutzen wir die Durschnittsgeschwindigkeit um eine endgültiges Urteil zu fassen.


In [12]:
avgGS6 = np.mean(np_gateSpeed6)
avgGS5 = np.mean(np_gateSpeed5)

print('Abweichung = '+str(100-(avgGS6 / avgGS5 *100))+'%')


Abweichung = 2.7513031677%

Hier sehen wir, dass die Durchschnittsgeschwindigkeit recht nahe liegt. Die Abweichung könnte durch eine ungünstige Wahl des Messbereiches liegen. Da nur jede Sekunde gemessen wurde, kann es sein, dass an bestimmten Gates das Fahrzeug bereits schon weiter war als in der Letzten Reihe. Von daher sollte der Zeitpunkt der Messung abgepasst werden. Dies ist entweder durch eine Erhöhung der Datenauflösung möglich, also durch eine Messung in kleineren Abständen, oder durch feste Messpunkte. Diese könnten zum Beispiel beim erreichen der einzelnen Wegpunkte ausgegeben werden. Eine dritte Möglichkeit besteht in einer Kombination beider Methoden. Hierfür wäre es für die einfache lesbarkeit hilfreich 2 Dateien anzulegen. Auf der einen Seite werden die Werte ausgegeben, sobald ein Wegpunkt erreicht wurde, und in der anderen Datei werden die Daten alle 0.5s ausgegeben. Dabei würden auch in der ersten Datei in Information zu der Position wegfallen, da die Wegpunkte stets an der gleichen Stelle sind.

weitere Betrachtungen

Relation zwischen Torque und Time

Eine weitere interessante Beobachtung, wäre die Erkundung des Verhältnisses zwischen Torque und Zeit. Hierfür nutzen wir diese Gleichung.


In [13]:
np_coeff = (np_time/np_torque)

x = np.linspace(0,16,16)

plt.xlabel('rounds')
plt.ylabel('$seconds / Torque$')
coeff_plt =  plt.plot(x,np_coeff)
plt.show()



In [14]:
print('lowest time: '+str(min(time)))
print('torque: '+str(motorTorque[time.index(104.28)]))
print('Index: '+str(time.index(104.28)))


lowest time: 104.28
torque: 259.3743
Index: 11

Abschließende Bewertung

Der Datensatz data1.txt gibt bereits wichtige Einsichten für die Optimierung der Fahrzeugsteuerung. Er zeigt, dass ab einer bestimmten Geschwindigkeit die benötigte Zeit verlängert wird, dies hängt mit dem Schleudern in Kurven zusammen, und änlichen Faktoren zusammen. Das die schnellste Zeit von 104.28 Sekunden bei einen MotorTorque von 259.3743 erreicht wurde. Da Auflösung der Messungen recht niedrig ist, sollte der Versuch im Bereich $Torque= 259.3743\pm5$ erfolgen. Die Veränderung des Torques sollte nun aber reduziert werden. Ein guter Wert wäre hierbei eine Veränderung von ca. 2%.


In [ ]: