Mechlab @ Cooper University NYC

Cooper University NYC

Im Rahmen von NIVES bestand die Möglichkeit, unsere Aktivitäten mit der Cooper University in New York zu diskutieren und zukünftige gemeinsame Projekte zu besprechen. Als Ziel wurde die Entwicklung eines Mobilitätskonzeptes vereinbart, welches über den gemeinsamen Austausch von Studenten und Lehrkräften beider Hochschulen bearbeitet werden soll. Im Hinblick der Automatisierung wurden Testfelder in NYC, wie beispielsweise Gouverment Island besichtigt.

Untersuchung von neuen Fahrspurmarkierungen

Am 26.04.2019 starteten die Tests der retroreflektierenden und kontrastverstärkten Fahrspurmarkierungen der Firma 3M im 2-Wochen Rhythmus. Zuerst werden Messungen der ungereinigten Markierung mit einem Laserscanner durchgeführt. Nach einer Reinigung mit der bereitgestellten Kehrmaschine aus dem Projekt EBALD wird eine weitere Messung durchgeführt. Außerdem gab es bisher eine Vergleichsmessung unter leichtem Regen als Zusatzmessung.

Die Farbe spiegelt die Intensität der Datenpunkte des Laserscanners dar, von blau für weniger intensiv bis orange für intensiver. Das Koordinatensystem ist auf dem Testfeld angelegt. Die Positionierung über die die gewonnen Laserdaten aufgetragen werden erfolgt über eine Sensordatenfusion mit extended Kalman-Filter. Daher kommen auch Ungenauigkeiten in der Transformation der Punkte auf das Testfeld. Die verbesserte äußere Fahrspur ist im Vergleich zur inneren deutlich gelber zu erkennen. Die zweite blaue Punktlinie am äußeren Rand stammt von den Banden rund um das Prüffeld (2).

Untersuchte Einflüsse

Verschmutzung

Im Laufe des Frühlings kam es vor allem zu starken Blütenanlagerungen durch die Bäume auf und in der Nähe der Markierungen (5-8). Dabei ist besonders anzumerken, dass durch die Anrauhung eine erhöhte Verschmutzung auf den neuen Markierungen festzustellen ist. Auch wenn hier die Schrägung des Testfeldes berücksichtigt werden sollte, die den Effekt verstärkt. Die Säuberung wird mit einer einmaligen Fahrt vorgenommen, um nicht zu sehr von Realbedingungen abzuweichen. Beide Markierungen können gleich gut gereinigt werden.

Bei der vollständigen Überdeckung ist die Intensität logischerweise stark verringert (3), außerdem sind die Punkte zerstreut. Nach der Reinigung stellt sich der Normalzustand ein (4). Bei der leichten Verschmutzung sind die gleichen Effekte, allerdings in deutlich geringerem Ausmaß, zu beobachten (10). Trotz der stärkeren Verschmutzung liefert hier die neue Markierung immer noch bessere Daten als die herkömmliche.

Regen

Der Einfluss durch Regen ist die größte Stärke im Vergleich zu herkömmlichen Fahrspurmarkierungen.

Im Bild ist deutlich zu sehen, dass trotz eines verringerten Intensitätsfilters bei leichter Feuchte die innere Markierung kaum zu sehen ist (11). Auch die Intensität der speziellen Markierung ist verringert, aber noch deutlich auszumachen. Hierbei bewältigt die neue Fahrspurtechnologie das Problem von Lidar mit feuchter Straße sehr gut.

Beschädigung

Der bis jetzt am geringsten zu spürende Einfluss, ist die Verminderung der Reflektivität durch die regelmäßige Belastung auf die Markierungen durch die Metallborsten der Kehrmaschine. Nach 4 Reinigungen ist kein Unterschied zu erkennen. (Vgl. 14 und 15)

Allerdings kam es bereits zu leichten Ablösungen und Fadenziehen an den Übergangsstellen. (16-20)

Hierbei ist anzumerken, dass die Anbringung der Markierungen nicht ideal erfolgte. Sie wurden mit nicht optimalem Kleber über den herkömmlichen Markierungen angebracht, wie es normalerweise nicht vorgesehen ist.

Bisheriges Fazit

Die retroreflektierenden Fahrspurmarkierungen erfüllen ihren Zweck gut und halten den Belastungen im Allgemeinen stand. Sie verbessern die wahrgenommene Intensität durch Lidar deutlich. Allerdings sind die Probleme mit dem bisherigen Einzelfall der sehr starken Verschmutzung und der Beschädigung weiter im Auge zu behalten.

Nach der Testphase auf dem Prüffeld werden die Tests auf der B170 fortgesetzt.

MdB Stephan Kühn zu Besuch bei Mechlab

Der Bundestagsabgeordnete Stephan Kühn (Bündnis90 / Die Grünen) informierte sich auf seiner ElektromobilTour 2019 über aktuelle Entwicklungen im Bereich automatisierter Fahrfunktionen. Das Mechlab-Team konnte hier detaillierte Informationen zur Umfeldsensorik und zu Test- und Freigabeverfahren liefern. Die bestehenden Probleme bei der genauen Lokalisierung im urbanen Bereich wurden dann auf einer Fahrt im automatisierten Testfahrzeug demonstriert. Prinzipiell ist die Technik aber in der Lage, automatisierte Fahrdienste im unteren Geschwindigkeitsbereich zu ermöglichen. Damit könnte bereits jetzt für das Thema Car-Sharing in Verbindung mit einer zentralen Ladeinfrastruktur ein attraktives Angebot zur Verringerung der Gesamtzahl an Fahrzeugen OHNE persönliche Mobilitätseinschränkungen geschaffen werden.

Herr Kühn (rechts) und Frau Schubert werden vom Rektor der HTW Dresden, Prof. Roland Stenzel, begrüßt.
M. Sc. Marcus Degenkolbe erläutert den technischen Aufbau auf dem HTW-Prüffeld.
M. Sc. Patrick Richter erläutert die Technik in Versuchsträger.
MdB Stephan Kühn auf Testfahrt mit dem Mechlab-Versuchsträger.

Mechlab@LNDW2019 – Resümee

In diesem Jahr konnte das Mechlab-Team mit der automatisierten Fahrt das zahlreich erschienene Publikum begeistern. Insbesondere die gut aufbereitete Darstellung der Umfeldsensorik fand großes Interesse bei den Zuschauern. Viele Fragen zum Potential und zur Einführung automatisierter Fahrzeug konnten so anschaulich erklärt werden. Das Video zeigt die Perspektive aus dem Leitstand.

Mechlab@LNDW2019 – Visualisierung

Auf diesem Video sieht man sehr gut, wie Personen durch einen Laserscanner delektiert werden.

Mechlab@LNDW2019 – Personendetektion

Hier noch einige Impressionen des Abends.

Mechlab@LNDW

In diesem Jahr kann das Mechlab-Team erstmals für Besucher eine automatisierte Fahrt auf dem HTW-Prüffeld anbieten. Dank intensiver Vorbereitung ist es gelungen, den BMW i3 entlang einer GPS-Trajektorie fahren zu lassen. Das ist zwar etwas ungenau, zeigt aber zumindest das Potential einer solchen Routenführung auf. Nicht immer sind Fahrspurinformationen oder vorausfahrende Fahrzeuge vorhanden, so dass die Ortung an GPS-Koooerinaten oder anderen Landmarken ein wichtiger Beitrag für die Fahrzeugautomatisierung ist. Auf einem Prüfstand werden zudem der technische Umbau des Renault-Twizy und die Funktionsweise einer optischen Spurführung erläutert.

Testfahrt für die LNDW 2019

Mechlab@China – Tag 4

Der heutige Tag stand ganz im Zeichen der fachlichen Beratungen. Los ging es am Vormittag in der Universität mit der Vorstellung der Arbeitsgruppe für das automatisierte Fahren. Dabei zeigten sich sehr gute Möglichkeiten für eine Zusammenarbeit, insbesondere auf dem gebiet der Radarsensorik. Dr.-Ing. Kann Liu und Jiang Bin stellten ihre Forschungen sowie ihre deutsche Firma Einstein E-Tech GmbH vor.

Dr.-Ing. Kann Liu erläutert die Live-Messung mit dem Radar-Sensor

Am Nachmittag fand bei der Wirtschaftsförderung eine weitere Beratung mit der Vorstellung von zwei weiteren Unternehmen statt. Danach klang der Abend in etwas kleiner Runde bei leckeren Sushi aus. Dabei wurden mit Liu und Bian konkrete Arbeitspunkte für die kommenden Monate besprochen.

Beratung in der Wirtschaftsförderung
Projektberatung in entspannterer Atmosphäre

Mechlab@China – Tag 3

Nachdem der gestrige Tag der Fahrt nach Hangzhou gewidmet war, ging es heute an die Jiliang-Universität. Diese Spezialhochschule für Metrologie soll künftiger Kooperationspartner der HTW Dresden werden. Zunächst gab es eine Campusführung sowie einen Besuch im Metrologie-Museum.

Verabschiedung der Absolventen vor dem Bibliotheksgebäude.
Erläuterung der Historie der Zeitmessung in China.

Am Nachmittag erfolgte ein Besuch in der Firma „Hangzhou Wolei Intelligent Sci-tech Co. Ltd“, einem Hersteller von Prüfgeräten für die Automobilindustrie. Hier gibt es schon Kooperationsbeziehungen zu Dresdner Firmen, die künftig noch ausgebaut werden sollen. Beim Rundgang erhielt man einen guten Überblick über die Produktpalette.

Maschinen für die automatische Prüfung von Bremsenkomponenten.

Mechlab@China – Tag 1

Heute begann der offizielle Teil des China-Besuchs zum Aufbau neuer Kooperationen in Lehr und Forschung mit einem Besuch der Shanghai Polytechnical University. Nach einer offiziellen Beratung erläuterte Prof. HE YAFEI das „Smart Manufacturing Factory Lab“. Die Studierenden lernen hier alle Aspekte einer automatisierten Produktion kennen. Das beginnt bei der Organisation der externen Lieferteile und endet mit der Verpackung des Produkts. Dabei handelt es sich nicht um ein angepasstes Modellprodukt, sondern ein an der Universität entworfenes Fahrrad. Die beiden Bilder zeigen Prof. HE YAFEI sowie einen Blick in die Produktionsanlage. Zufälligerweise arbeiteten an diesem tag auch zwei schwedische Austauschstudenten, die sehr zufrieden mit den Möglichkeiten und der Unterstützung waren.

Prof. HE YAFEI stellt die Produktionsanlage vor.
Blick in die Produktionsanlage.

Im Anschluss blieb dann auch noch Zeit für einen Ausflug in die Innenstadt. Der ursprünglich geplante „Turmaufstieg“ wurde mangels Sicht aber abgesagt.

Predict Steering Angles using DNNs [Part 1]

The prediction of steering angles for a vehicle depending on its environment is a general problem for which some approaches already exist. The classic approach is based on the recognition and tracking of lanes with the aid of image processing. With this method, the images are captured, processed and the detected lanes are then represented by polynomials, on the basis of which the necessary steering angle is calculated. Another way to determine the steering angle based on the environment of the vehicle is to use a neural network. According to the Nvidia paper (https://arxiv.org/pdf/1604.07316v1.pdf), this approach shall be examined in the following.

The aim is to design a neural network and to train it with data from the laboratory test track in order to be able to make predictions regarding the necessary steering angle. So the first step is to record as much data (as possible) from the track.

1. Generate the Dataset

Only 2 informations are important: Images of the track out of the position of the vehicle and the corresponding steering angle at the time of recording. In the best case there are several images from different positions available but in our case we only use a centrally positioned Raspberry Pi camera at first. After driving 5 laps in one direction you should drive another 5 laps in the other direction to help the neural network to generalise. The test vehicle for the measurements is a modified Renault Twizy, which is currently used in the project Platooning (http://www.htw-mechlab.de/index.php/forschung/platooning/projektfortschritt-timeline/). Camera frames and steering angles are merged, processed and stored via a ROS node. In parallel, pandas creates a CSV file containing the names of the camera frames and the corresponding steering angle.
After this process, a dataset should be created whose length depends on the recording time. For this example about 10.000 images were taken. The following lines represent 7 random lines from this dataset:

       timestamp         filename  steering_angle
2440  243.939088  frame002440.jpg        0.007333
7036  703.538947  frame007036.jpg       -0.226222
6922  692.139068  frame006922.jpg        0.012889
8715  871.439109  frame008715.jpg       -0.223333
5700  569.939100  frame005700.jpg       -0.033333
6960  695.939064  frame006960.jpg       -0.182222
8326  832.539025  frame008326.jpg        0.010667

2. Prepare the Dataset

The next step contains preparing the data. For this it is helpful to plot the distribution of steering angles from recorded data:

It can be seen that considerably more steering angles were recorded in the 0 degree range. This also makes sense, because the test track consists mainly of straight tracks. For the model, this is problematic, because the car is biased to drive straight all the time. One solution could be to record more data just from curves. This results automatically in a larger dataset, which is to be examined later. For now, it’s easier to reduce the datatset with redundant steering angles. Additionally the data of the turning maneuver for the direction change can be removed here. The normalized steering angle distribution (with about 7.000 remaining images) now look like this:

3. Split the Datatset

In the next step the dataset can be split into a training dataset, a validation datatset and optionally a test datatset. The training datatset is the largest part and is used to train the model. The neural network learns from this dataset and updates its weights and biases. The validation dataset is used to tune the hyperparameters (e.g. learning rate and number of hidden units) of the network with new images to avoid overfitting (occurs when the capacity of a network is to high and the model can not be generalised).
After training the network sucessfully the test dataset can be used to determine what predictions the network makes for new data. This part is not necessary because the network is to be tested directly with new measurement data on the test track and we therefore only need a division between training and validation:

4. Augment the Dataset

In order to counteract the fact of the small number of data, new data is to be generated in the following by image augmentation. During this process we create new data by modifying the existing dataset for our model to use by the training process. For now we will use 5 different augmentation techniques:

  • random shadow
  • random brightness
  • random flipping
  • random zooming
  • random shifting

The following plot shows 6 random images with a corresponding augmentation technique:

5. Preprocess the Images

Now its time to edit the images so that they can be processed by the network. At first we need to determine a region of interest (ROI). This region should contain all the informations which are necessary for the steering angle prediction (e.g the lanes). Afterwards we change the colorspace from RGB to YUV, resize the image according to the input size of the network (200×66) and apply a Gaussian blur:

6. Generate Batches

The last step before generating and training our model is the creation of a batch generator. The batch generator is used to generate a defined number of preprocessed images with associated labels from the input data. The number of samples that will be fed during one forward/backward pass trough the network is called batch size. The following figure shows a training and validation image randomly generated by the generator:

7. Create the Model

As mentioned above we will use a popular architecture from Nvidia to create the model. This type of model consists of several Convolutional Layers (CNN) followed by several Fully Connected Layers (Dense). Convolutional Neural Networks (CNNs) are commonly used to analyse images. They consists of Input Layers, Convolutional Layers, Pooling Layers, Fully Connected Layers and Output Layers.

  • Convolutional Layers extract and learn specific image features which can be used to help classify the image
  • Pooling Layers helps avoid overfitting during reducing the dimensionality of representation of each feature map
  • Fully Connected Layers are built the same way as a normal Neural Network

With Keras (and TensorFlow as backend) we don’t have to care about input and output sizes of hidden layers in the network Just the input dimension from the first layer has to be equal to the image dimension and all further layers will get its size automatically. The full implementation of the Nvidia model and Keras looks like this:

def nvidia_model():
  # Input Layer
  model = Sequential()

  # Convolutional Layers
  model.add(Conv2D(24, (5, 5), strides=(2, 2), input_shape=(66, 200, 3), activation='elu'))
  model.add(Conv2D(36, (5, 5), strides=(2, 2), activation='elu'))
  model.add(Conv2D(48, (5, 5), strides=(2, 2), activation='elu'))
  model.add(Conv2D(64, (3, 3), activation='elu'))
  model.add(Conv2D(64, (3, 3), activation='elu'))

  # Flatten Layer
  model.add(Flatten())

  # Dense Layers
  model.add(Dense(100, activation='elu'))
  model.add(Dense(50, activation='elu'))
  model.add(Dense(10, activation='elu'))

  # Output Layer
  model.add(Dense(1))

  optimizer = Adam(lr=1e-4)
  model.compile(loss='mse', optimizer=optimizer)
  return model

8. Train the Model

Before the model is trained, it is helpful to get a summary of the model and the generated layers:

Layer (type)                 Output Shape              Param #
=================================================================
conv2d_6 (Conv2D)            (None, 31, 98, 24)        1824
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 14, 47, 36)        21636
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 5, 22, 48)         43248
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 3, 20, 64)         27712
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 1, 18, 64)         36928
_________________________________________________________________
flatten_2 (Flatten)          (None, 1152)              0
_________________________________________________________________
dense_5 (Dense)              (None, 100)               115300
_________________________________________________________________
dense_6 (Dense)              (None, 50)                5050
_________________________________________________________________
dense_7 (Dense)              (None, 10)                510
_________________________________________________________________
dense_8 (Dense)              (None, 1)                 11
=================================================================
Total params: 252,219
Trainable params: 252,219
Non-trainable params: 0
_________________________________________________________________
None

The generated model consists of about 250.000 parameters and 27 million connections, which is a pretty amazing size! Now the model can be fed with our data and other parameters like batch size and epochs. For all those of you who did not have several Nvidia K80 GPUs at home there is a free cloud-based alternative called: Google Colab! Colab is a machine learning research tool with GPU acceleration for the browser based on Jupyter notebooks (https://colab.research.google.com/).

The training process takes about one hour. During that process it can be tracked how loss and validation loss changes and afterwards we can plot the data:

The generated model can now be downloaded and implmented in the ROS steering prediction node.

9. Predict Steering Angles

Predicting steering angles follows the same procedure as described during the dataset generation, but without the need to record the data. We capture camera frames, preprocess them as described in chapter 5 and feed them into the model, which predicts a steering angle between -1 and +1. The result is shown in the following video.

10. Improvements

The result is not bad, but in the next step the following improvements will be implemented:

  • Install more cameras to record larger datasets and capture a steering angle from different positions.
  • Refine the ROI, in particular the peripheral areas.
  • Enlarge the dataset which contains curves.
  • Optimize the model parameters (activation function, batch size, epochs, …).
  • Improve and add more augmentation functions.