Model-based Demonstrator for Smart and Safe Systems (MoDeS3)
A case study system using the cooperation of a model railway and a robot to demonstrate techniques and methods for developing IoT and CPS systems. See a quick overview and our blog for more details.
This repository uses Gradle for build management. To build the repository see the Build and deployment guide.
Getting Started
To set up the development environment on your machine, follow the Getting Started page.
Structure of the repository
Configuration management scripts
Physical location |
Comments |
Owner |
/config-management |
Scripts to deploy the code for the embedded systems. |
hegyibalint |
Sources divided by programming language
C++
- Root path:
/src/cpp/
- Folder prefix:
hu.bme.mit.inf.modes3.
- Path prefix:
<root_path> + <folder_prefix>
Logical Component |
Physical location |
Comments |
Owner |
Barrier Controller |
.components.barriercontroller |
The controller script of the railway barriers. |
zsoltmazlo |
Computer Vision |
.components.computervision |
The OpenCV-based Computer Vision component, which provides the coordinates of the train markers. |
FuzesiMate |
imu |
.components.imu |
|
|
Section Occupancy Query |
.components.soc |
Reads the sections occupancy from the physical sensors. |
zsoltmazlo, hegyibalint |
Train Detector |
.components.traindetector |
Train detector and locomotive length measurer using infrared sensors. |
hegyibalint |
train_sample_generator |
.components.trainsamplegenerator |
|
FuzesiMate |
Turnout Actuator |
.components.turnoutactuator |
The actuator to set the turnouts' directions. |
hegyibalint |
XPressNet Bridge |
.components.xpressnetbridge |
C++ implementation for the XPressNetBridge, in order to send DCC commands to the trains. |
Chorithian (Attila Biró) |
Java
- Root path:
/src/java
- Components folder path:
<root_path>/components
Logical Component |
Physical location |
Comments |
Owner |
Barrier |
/barrier |
Sends open/close commands to the barrier over the network, depnending on the occupancy of certain segments. |
benedekh |
Dashboard |
/dashboard |
Dashboard for the model railway track. |
zsoltmazlo |
GPIO Manager |
/gpiomanager |
To control the GPIO pins of the Beagle Bone Black embedded units from Java. |
hegyibalint |
Leapmotion |
/leapmotion |
Leapmotion sensor code in Java. |
pappist (Papp István) |
Section Occupancy Query |
/occupancyquery |
Reads the sections occupancy from the embededd system and broadcasts it on the network. |
hegyibalint, baloghlaszlo, benedekh |
Sample Component |
/sample |
A sample component which can be linked to a tutorial |
hegyibalint, baloghlaszlo, benedekh |
Touchboard |
/touchboard |
Dashboard for the model railway track, with focus on touchable elements. |
hegyibalint, benedekh |
Track Element Controller |
/trackelementcontroller |
Implementation of the platform-specific actuator code of disabling and enabling sections and setting turnout directions for the BeagleBone Black embedded units. |
benedekh, hegyibalint |
- Safetylogic folder path:
<components_folder_path>/safetylogic
Logical Component |
Physical location |
Comments |
Owner |
Component level safety logic |
/componentlevel.sc |
Component level safetylogic by Yakindu statecharts |
benedekh |
Component level safety logic (Model) |
/componentlevel.sc.model |
Yakindu and Gamma models of the component level safety logic |
benedekh |
System level safety logic (Event) |
/systemlevel.event |
System level safety logic with a runtime EMF model and using VIATRA-Queries |
baloghlaszlo |
System level safety logic (Model) |
/systemlevel.model |
Model for system level safety logic |
baloghlaszlo |
System level safety logic (Model instance) |
/systemlevel.model.instance |
Model instance for system level safety logic |
baloghlaszlo |
System level safety logic (Sirus editor) |
/systemlevel.model.sirius |
Sirius editor for system level safety logic |
baloghlaszlo |
System level safety logic (Patterns) |
/systemlevel.rules |
VIATRA-CEP rules for system level safety logic |
baloghlaszlo |
- Messaging folder path:
<root_path>/messaging
Logical Component |
Physical location |
Comments |
Owner |
High-level API designed for communication with the railroad system |
/communication |
Communication technology independent API designed for further use in the components. |
baloghlaszlo |
Common messages |
/messages |
Common representation for the messages used over the network in Java. |
benedekh |
Messaging service + Dispatcher |
/mms |
Messaging service and message dispatcher to dispatch different messages. |
baloghlaszlo, benedekh |
Protobuf specific classes |
/proto |
Protobuf specific transformators and dispatcher for the messages. |
benedekh |
Protobuf message definitions |
/proto.messages |
Message definitions in protobuf representation and Java classes generated from them. |
hegyibalint, benedekh |
- Test folder path:
<root_path>/test/
Logical Component |
Physical location |
Comments |
Owner |
Test project |
|
Project for testing purposes. To show, how a system test might be implemented. |
baloghlaszlo |
- Transports folder path:
<root_path>/transports
Logical Component |
Physical location |
Comments |
Owner |
Transport common |
/common |
Common classes for the transport layer. |
baloghlaszlo |
MQTT Transport |
/mqtt |
Implementation of the transport layer, using MQTT. |
benedekh |
- Utils folder path:
<root_path>/utils
Logical Component |
Physical location |
Comments |
Owner |
Utility classes for components |
/common |
Utility classes that can be used by every component. E.g. handling command-line arguments in Java. |
benedekh |
Common configuration files |
/conf |
Common configuration files for the model railway track. E.g. files containing information about segment, turnout, locomotive IDs |
benedekh |
Serial monitor |
/serialmonitor |
Utility project to monitor the serial (USB) port from Java. |
zsoltmazlo |
SVG Transformer |
/svgtransformer |
Utility project to transform SVG in Java, in order to map the Open CV coordinates for segments on the railway track. |
hegyibalint |