Artifact for the paper "Incremental Causal Connection for Self-Adaptive Systems Based on Relational Reference Attribute Grammars"
Installation and Preparation of the Case Study
To quickly run the graphical example applications, Docker is used. Please note that the setup uses vnc and thus offers limited graphics performance.
- Install Docker and docker-compose for your system (for Windows and Mac OS, install Docker Desktop)
- For artifact evaluation:
- Unpack the provided archive
- Load the four docker images (they require around 6.7GB in total)
docker load models2022_web.tar
docker load models2022_mosquitto.tar
docker load models2022_rag_place.tar
docker load models2022_ros_place.tar
- Unpack the archive
workspace.tar
. It contains all (remaining) necessary parts for the docker-compose-build
- For all others:
- Clone this repo and its submodules (Important: Use
--recurse-submodules
):git clone --recurse-submodules https://git-st.inf.tu-dresden.de/ceti/ros/models2022.git models2022
- Change into the workspace
cd models2022
- Prepare/Build all docker images:
docker-compose build
(this will take a while)
- Clone this repo and its submodules (Important: Use
Running the Case Study
- Start the following containers (best to use different terminal tabs/windows):
-
docker-compose up web
- You should see a log output, that connection to MQTT was successful (
Connected to mosquitto at <datetime>
)
- You should see a log output, that connection to MQTT was successful (
docker-compose up rag_place_a
-
docker-compose up rag_place_b
- There will some log output, and a final
Published some bytes to coordinating/rag-a/status
(orcoordinating/rag-a/status
for place B)
- There will some log output, and a final
docker-compose up ros_place_b1
docker-compose up ros_place_b2
-
- Open the Web-UI for the RAG application
- http://localhost:8050/
- This UI offers various controls (only a few are needed to control the case study), a filtered MQTT log, and a second tab to view the runtime model (see below)
- Start the RAG application for place B, hit "Start" in the (rightmost) section "Commands Place B".
- It is important, that the RAG application of place B is started before the scripts (
run1.sh
andrun2.sh
, see below) that start the two robots (The robotic controllers send their initial scene only once, and without receiving it, the RAG application is missing information about the objects in place B)
- It is important, that the RAG application of place B is started before the scripts (
- You should then see a message with "ready" for the topic "coordinating/rag-b/status" (in a line like
[<datetime> @ coordinating/rag-b/status ] ready
)
- Open VNC using your browser to start the two robots
- http://localhost:6081/ (First robot)
- http://localhost:6082/ (Second robot)
- You should see a desktop environment with four desktop entries
- Right-click on "ros_ws" desktop entry -> "Open in terminal". A terminal window should open in directory "~/Desktop"
- Start the controller using either
./run1.sh
(for the first robot) or./run2.sh
(for the second robot) - You should see some log output in the terminal and the visualization program (RViz) for the respective robot should open
- Back in the Web-UI for the RAG application
- You should see messages for the topics
/ceti_cell_placeworld/scene/update
and/ceti_cell_placeworld2/scene/update
- Start the RAG application for place A, hit "Start" in the (middle) section "Commands Place A"
- Then the case study begins, you should see a "ready" for the topic "coordinating/rag-a/status" and the first commands sent. Also the two robots should start to move executing their command. From then on, observe the mqtt messages sent and/or the robots moving
- You should see messages for the topics
- View the RAG runtime model
- While the case study runs or after it is finished, you can view the runtime state in the tab named "SVG Model B"
- After starting the RAG application for place B, the initial state is displayed
- To "request" a new model, hit the button "Model" in section "Commands Place B". This will both print the model (in the lower MQTT log) and create a visualization shown in the tab "SVG Model B"
Experiment with RagConnect
To experiment with a less complex scenario and verify the functionality of the tool RagConnect itself, you can use the minimal example provided in the archive and at https://git-st.inf.tu-dresden.de/jastadd/ragconnect-minimal.
Verifying Results of the Publication
Several important results can be checked for:
Feasability of the Case Study
- By executing the case study, and seeing the robots move in the correct manner and order, one can verify that the RAG application computes and sends the correct commands, and (indirectly) that the causal connections update the model correctly
Lines of code
- There is a script using
cloc
to get LOC numbers. - Either start a new container with the image of a RAG place, e.g.,
docker run --rm -it models2022_rag_place_b /bin/bash
- Or attach to a running container after starting the case study with docker-compose. To attach, run
docker-compose exec rag_place_b /bin/bash
. - In both cases, you should have a terminal in the directory
/ros3rag
- Change directory to the
cloc
subdirectory,cd cloc
- Execute the script to show lines of code,
./run-cloc.sh
Ratio of messages skipped
- When running the case study, every time the model of place B is requested (by hitting the button "Model" in the rightmost section "Commands Place B"), information about the processing of received and sent messages is shown as "evaluationCounters" in form of a csv file
- After those information, the ratio is also printed (the ration between the sum of all skipped messages and the sum of all processed messages)