In autonomous driving, understanding the behavior of fellow drivers is essential for planning the automated vehicle’s movements. Thus, a good model of human drivers can facilitate safe and smooth driving. Especially in situations with interactions, e.g., in the roundabout depicted, it is of high importance to reliably anticipate fellow drivers’ actions. During my master’s thesis at AUDI AG’s autonomous driving lab, I investigated several approaches to learn probabilistic driver models from data using machine learning algorithms. A key part of my work was modelling the uncertainty in the prediction because it is impossible to tell exact future positions of vehicles.
My first research paper detailing the algorithm that was developed is currently in writing and will likely be published next year.
AI in game playing is a classical but fascinating topic. Advances as AlphaGo (and its successors) and Deep Q Learning showed how algorithms can archive super-human performance in many games, even if they are only trained through self-play. This small AI and Web Development project I did, features an interactive interface of the well-known board game Connect Four. The computer player uses both classical tree search and neural networks to estimate benefits obtained if in certain game states.
Test it yourself and try to beat the AI!
Drawing on a Bugdet is my first Android application. It's an app, where users get a word and draw it on their screen. Once they are finished, other players see their drawing side by side with other ones and guess what word was given. When they have it right, they can rate how much help each of the images provided. In contrast to other apps, in this variant the amount of color spent also matters. Drawing simple but distinctive is what earns the most points in the game.
The app uses a state-of-the-art RESTful API with a mySQL-Database as backend. All communication with the server is encrypted with HTTPS to guard the user's personal data. The server-side code was implemented in the GO language and the client code in Java.
Work in progress.
In multibody physics simulations, the detection of interference between bodies is one of the main steps. I wrote my Bachelor Thesis about collision detection for general convex geometries in parallel simulations. Considering algorithms for general geometries delivers an advantage if a dynamics simulation framework features many different basic shape primitives e.g. cubes, spheres and ellipoids. Instead of writing one collision function for each shape combination, one generic algorithm can be used for all.
The full Thesis (in German) is available here.
This kind of collision detection is perfectly suited for large-scale simulations. This demonstration of a cubic volume filled with about 20.000 oblong shaped elliposids (can be stones in a riverbed) proves, that the algorithms developed scale and can be used on many CPU cores. It is also able to process other shapes, such as triangle meshes.
Applications range from particle flow simulations (as they are used to predict the behavior of certain granular materials) in industrial applications to geology. The framework which I contributed to can be found here.
This two-dimensional rigid body simulation engine is capable of solving elastic and partially elastic collisions between spheres, rectangles and triangles. Collisions are resolved in one step by evaluating the dynamic collision equations, a linear equation system. The simulation also features a GUI, where bodies can be placed graphically. The code was implemented in Microsoft Visual Basic.
Raspberry Pi is a single board micro-computer. It features a mobile processor and runs with various Linux distributions. I used the device as a small web server or file storage attached to the local network. Other possible applications of Raspberry Pi range from media hubs to robotics.
From time to time, I still enjoy building machines and autonomous vehicles with the Lego Mindstorms NXT. After I learned how to write code in Java, I flashed the LeJOS software on my brick. This gives me more freedom and allows more complex programs written in Java to run on the Mindstorms NXT.
One of my favorite projects is the LEGO Brick Sorter seen in the picture. Bricks are moved through the detector on a conveyor belt. Their length, width and color are determined and bricks can be sorted out on the belt if they match certain criteria.