No description
Find a file
2025-08-08 09:57:06 +02:00
.devcontainer WIP: backport message flow tracing to foxy 2025-05-17 14:52:09 +02:00
.vscode changes to get running on pi + traces 2025-06-06 10:43:22 +02:00
analysis installed ros2 tracing 2025-04-29 09:31:19 +02:00
performance_logs/monitored_example installed ros2 tracing 2025-04-29 09:31:19 +02:00
results installed ros2 tracing 2025-04-29 09:31:19 +02:00
src explicitly 2 threaded multi ros2 simple 2025-08-05 15:35:50 +02:00
.gitignore installed ros2 tracing 2025-04-29 09:31:19 +02:00
.gitmodules re-add tracetools_analysis 2025-07-30 16:33:08 +02:00
batch_run.log Update ReadMe for submission 2025-08-08 09:57:06 +02:00
batch_run.sh seperate chains completely, fix simple example 2025-07-30 15:10:07 +02:00
build.sh got ros and edf to work, built startup script for reliable experimenting 2025-06-09 15:24:34 +02:00
build_run_copy.sh add boosted flag (int) to the experiment pipeline 2025-06-16 14:52:39 +02:00
colcon_defaults.yaml changes to get running on pi + traces 2025-06-06 10:43:22 +02:00
debug.sh WIP: backport message flow tracing to foxy 2025-05-17 14:52:09 +02:00
Dockerfile also add the cyclonedds package 2025-05-19 13:20:25 +02:00
init.sh changes to get running on pi + traces 2025-06-06 10:43:22 +02:00
postCreate.sh WIP: backport message flow tracing to foxy 2025-05-17 14:52:09 +02:00
ReadMe.md Update ReadMe for submission 2025-08-08 09:57:06 +02:00
setup-venv.sh installed ros2 tracing 2025-04-29 09:31:19 +02:00
trace_ids.txt Update ReadMe for submission 2025-08-08 09:57:06 +02:00

Full Topology Experimentation Framework

This repository contains the experimentation code used for my master's thesis on semantic scheduling for multi-modal sensor data in ROS 2. It implements and evaluates multiple executor configurations (ROS 2 default, dynamic EDF) on a fixed test topology, with automated tracing and batch experiment execution.

Audience: This version is intended for thesis reviewers. For the eventual open-source release, setup and dependency instructions will be expanded.


Repository structure

Key files and directories:

src/full_topology/
 ├── CMakeLists.txt        # CMake config, passes macro switches
 ├── package.xml           # ROS 2 package manifest
 ├── launch/
 │    └── trace_full_topology.launch.py  # Starts topology with tracing
 ├── src/
 │    ├── full_topology.cpp # Main implementation with macro-controlled behavior
 │    ├── simple.cpp        # Minimal setup to explore one-chain starvation
 │    └── nodes.hpp         # Node type definitions
src/cyclonedds/            # Submodule: Cyclone DDS
src/rcl/                   # Submodule: ROS 2 rcl
src/rclcpp/                # Submodule: ROS 2 rclcpp
src/rmw_cyclonedds/         # Submodule: RMW layer
src/ros2_tracing/           # Submodule: ros2_tracing framework
src/ros_edf/                # Submodule: EDF executor implementation (Arafat et al.)
src/tracetools_analysis/    # Submodule: trace analysis tools
init.sh
build.sh
build_run_copy.sh
batch_run.sh
setup-venv.sh

Platform & prerequisites

  • ROS 2 distribution: Foxy (required)
  • Test environment: Raspberry Pi 4 (4 GB) with Ubuntu 20.04 LTS, PREEMPT_RT kernel, LTTng 2.13, 2 isolated CPU cores at fixed frequency (as in ros-realtime/reference-system)
  • Python: 3.8 (used via setup-venv.sh)
  • RMW: rmw_cyclonedds_cpp (mandatory , the only implementation with our modifications)
  • Build concurrency: limited to -j1 to avoid overloading the Pis non-isolated cores.

System dependencies were installed via apt.


Macro options and their flow

Experiment configurations are set at build time via CMake options, which build_run_copy.sh sets based on its arguments:

CMake Option Compile Definition Meaning
ROS_DEFAULT_EXECUTOR ROS_DEFAULT_EXECUTOR Use ROS 2 default executor
EDF_PRIORITY_EXECUTOR EDF_PRIORITY_EXECUTOR Use EDF executor (Arafat et al.)
MULTI_THREADED MULTI_THREADED Multi-threaded executor
USE_TIMER_IN_FUSION_NODES USE_TIMER_IN_FUSION_NODES Enable internal timers in fusion nodes
BOOSTED=<ms> BOOSTED=<ms> Reduce chain deadlines to this value; 1000 = disabled

Flow: batch_run.sh → calls build_run_copy.sh with args → sets CMake options → CMakeLists.txt adds compile definitions → full_topology.cpp selects behavior via #ifdef.


Quick start

# 1. Source ROS 2 Foxy environment
source /opt/ros/foxy/setup.bash

# 2. Source init script (sets RMW, build flags, venv, etc.)
source init.sh

# 3. Build & run a single timed, single-threaded ROS 2 default executor run
./build_run_copy.sh ros single timed 1000

# or: run the full batch (takes multiple hours)
./batch_run.sh

Launch file: trace_full_topology.launch.py

  • Declares a length argument (seconds; default: 60.0).
  • Starts an LTTng tracing session trace_full_topology in analysis/tracing/.
  • Traces UST events from DDS, ROS 2 layers, RMW, rclcpp callbacks & executors.
  • Launches full_topology node executable.
  • Automatically shuts down after length seconds.

Running experiments

build_run_copy.sh arguments

./build_run_copy.sh <scheduler> <threading> <timer> [boost] [no_rebuild]
  • scheduler: ros (ROS 2 default) or edf (EDF executor)
  • threading: single or multi
  • timer: timed or direct (thesis uses timed)
  • boost: integer (ms) deadline; 1000 = disabled boost
  • no_rebuild: skip rebuilding (useful for repeated runs in same config)

Each run takes ~3045 s (20 s experiment time + launch/stop/convert/copy).


batch_run.sh defaults

Runs a full matrix:

  • Timer modes: direct, timed
  • Threading: single, multi
  • Schedulers:
    • ROS default (ros)
    • EDF with boosts {1000, 500, 100, 50, 10}
  • Iterations: ITERATIONS=49 per configuration, thus with the one that did the rebuild, a total of 50

Trace files

Traces are renamed after run completion (boost only when applicable):

<scheduler>_<threading>_<timer>_<runtime>_<boost>-<timestamp>

Example:

edf_multi_timed_20_boosted_500-20250301T101530

Remote copy

After renaming, traces are optionally copied to a remote location via scp:

REMOTE_USER=user
REMOTE_HOST=host
REMOTE_PATH=/path/to/store/traces

Warning: Update these in build_run_copy.sh before use. If unset or inaccessible, copying will fail (local trace is still kept).


Disclaimer

Research code, provided as is. See thesis for methodology, hardware setup, and complete experiment design.
This repository reflects the full development history of the thesis work. Some commits represent intermediate or WIP states. For traceability, commit hashes referenced in the thesis remain valid.