This project was done in 2006 during the studies at the Carl von Ossietzky University of Oldenburg. Lego Mindstorms (so-called RCX) are used to implement a simplified version of the European Train Control System (ETCS). The project team consisted of 14 students from the university:
The project team was divided in six groups based on the tasks to be done in order to realize the project.
This group designed and built the engines. The engines carry two light sensors. The first one tracks the line and allows the engine to follow the roadway. The second one is used for detecting and reading the tags, which are used to identify the segments of the roadway. Each engine is processing a so-called route atlas. This atlas contains information about the way the engine should drive along. It is specified in terms of balises ids and tracking distances. The total distance covered by an engine is calculated using a rotation sensor and the distance covered at each rotation of the wheel. As this measurement is not free from errors, the distance is synchronized with the value from the route atlas, each time a balise is reached. Segments of the roadway are only entered if they are de-blocked by the radio block controller. After a segment is left, this segment is de-allocated by the engine.
The radio block controller (RBC) takes care of the collision avoidance and controls the gates at the railroad crossing. The algorithm for controlling the gates is verified using Uppaal. In order to avoid collisions the roadway is partitioned into segments, which the engines must request in order to enter. Each segment can only be occupied by one engine at the same time.
Infrared interfaces are used for the communication. Communication takes place between the engines and the RBC as well as between the host software running on a PC and the engines. The communication interface provided by BrickOS guarantees that received packages are correct but it does not guarantee that all packages are received at all. This is done by a security layer implemented on top of the BrickOS-API. The security layer provides an API for requesting and releasing segments as well as for transmitting the schedule from the host to the engines.
The roadway contains train stations with up to three rails, three sidings and the tracks between them. All in all, the complete roadway has a size of about 4 m2. The roadway is divided into several segments, marked by balises. These balises are used by the engines to adjust their internal odometer to the actual position. Each engine has a scanner for reading the barcode-like encoded balises. Balises are read and decoded, as the engines drive past. In order to read the balises in both directions, they are printed on both sides of the track.
The schedule is created by specially developed software, running on a host-PC. Schedules are free of deadlocks, ensure optimal usage of the roadway, and calculate the shortest path between two points. A schedule is defined by selecting the stations and sidings approached by the engines. Scheduling is done using SWI Prolog. An individual schedule is created for each engine and the RBC respectively. The schedules are transferred to the engines and the RBC using the IR communication.
More information can be found on the project’s official homepage.