MSc Thesis - Mohamed Msallak - TU Delft - January 2025
Implementation of a proactive self-adaptation framework for energy-constrained autonomous mobile robots. The system extends ROSA with rolling-horizon battery prediction and integrates PlanSys2 for symbolic task planning, enabling anticipatory task-and-architecture co-adaptation.
Key features:
- Rolling-horizon energy prediction over upcoming navigation actions
- Proactive configuration switching and recharge planning
- Benchmark evaluation across procedurally generated environments
- Comparison with reactive threshold-based baseline
This project builds on the ROSA framework. Follow ROSA installation instructions:
- ROSA repository: https://github.com/kas-lab/rosa
Additional dependencies:
- ROS 2 Humble
- PlanSys2
- TypeDB 2.x
- Nav2 navigation stack
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone [this-repo]
cd ~/ros2_ws
colcon build
source install/setup.bash1. Start TypeDB Server (Terminal 1)
typedb server &2. Start Battery Monitor (Terminal 2)
For benchmark mode:
ros2 run navigation_battery battery_monitor --ros-args -p benchmark_mode:=trueFor single navigation runs:
ros2 run navigation_battery battery_monitor --ros-args -p benchmark_mode:=falseros2 run navigation_planner benchmark_trackerros2 launch navigation_task_plan navigate_task_plan_reactive.launch.py \
scenario_difficulty:=easy \
benchmark_mode:=true \
max_benchmark_runs:=100Benchmark Parameters:
scenario_difficulty:=- Map difficulty:easy,medium, orhardbenchmark_mode:=- Set totruefor automated benchmark runsmax_benchmark_runs:=- Number of episodes to runenable_debug_in_benchmark:=- Set totruefor debug output
Benchmark results are saved to:
benchmark_results/- Metrics, success rates, configuration usagereal_sim_results/- Simulation validation data
Useful for testing and debugging individual scenarios.
Terminal 1: TypeDB
typedb server &Terminal 2: Battery Monitor
ros2 run navigation_battery battery_monitor --ros-args -p benchmark_mode:=falseTerminal 3: Navigation (Proactive)
ros2 launch navigation_task_plan navigate_task_plan_horizon.launch.pyTerminal 1: TypeDB
typedb server &Terminal 2: Battery Monitor
ros2 run navigation_battery battery_monitor --ros-args -p benchmark_mode:=falseTerminal 3: Navigation (Reactive)
ros2 launch navigation_task_plan navigate_task_plan_reactive.launch.py \
scenario_difficulty:=easy \
benchmark_mode:=false \
max_benchmark_runs:=1 \
enable_debug_in_benchmark:=false├── navigation_kb/ # TypeDB knowledge base
│ ├── config/
│ │ ├── schema.tql # KB schema definition
│ │ └── data.tql # Static domain knowledge
│ └── launch/ # KB launch files
│
├── navigation_rosa/ # ROSA integration
│ ├── config/
│ │ ├── navigation_rosa.tql # Proactive constraints
│ │ └── navigation_rosa_reactive.tql # Reactive constraints
│ └── launch/ # ROSA launch files
│
├── navigation_task_plan/ # PlanSys2 task planning
│ ├── pddl/
│ │ ├── domain_sas.pddl # PDDL domain (proactive)
│ │ └── domain_sas_reactive.pddl # PDDL domain (reactive)
│ ├── src/
│ │ ├── navigate_horizon.cpp # Proactive controller
│ │ └── navigate_reactive.cpp # Reactive controller
│ └── launch/
│ └── benchmark_with_map_regen.launch.py # Main benchmark
│
├── navigation_planner/ # Benchmark & map generation
│ └── navigation_planner/
│ ├── benchmark_tracker.py # Metrics collection
│ └── map_generator.py # Procedural map generation
│
├── navigation_battery/ # Battery monitoring
│ └── navigation_battery/
│ └── battery_monitor.py # Battery discharge model
│
├── benchmark_results/ # Benchmark output data
└── real_sim_results/ # Simulation validation data
Located in navigation_rosa/config/navigation_rosa.tql
Located in navigation_rosa/config/navigation_rosa_reactive.tql
- Proactive:
navigation_task_plan/pddl/domain_sas.pddl - Reactive:
navigation_task_plan/pddl/domain_sas_reactive.pddl
Configured in benchmark launch file parameters:
easy: Dense connectivity, multiple charging stationsmedium: Moderate connectivity, limited chargershard: Sparse connectivity, clustered chargers
If you need to launch ROSA separately (not automatically started by navigation launch):
typedb server &
ros2 launch navigation_rosa navigation_rosa.launch.pytypedb server &
ros2 launch navigation_rosa navigation_rosa_reactive.launch.pyCheck that battery monitor is running:
ros2 node list | grep batteryCheck battery topic:
ros2 topic echo /battery_levelVerify TypeDB server is running:
ps aux | grep typedbRestart if needed:
pkill typedb
typedb server &Ensure all prerequisites are running:
- TypeDB server
- Battery monitor in correct mode
- Check launch file parameters
Note: This repository contains research code developed during an MSc thesis project. The implementation prioritizes experimental validation and rapid iteration over production-level software engineering. The defense-submission branch contains the working system used for thesis evaluation.
Defense: January 27, 2025
Supervisors: Gustavo Rezende Silva, Carlos Hernández Corbato
Document: [Available after defense]
@mastersthesis{msallak2025proactive,
title={Proactive Self-Adaptation in Autonomous Mobile Robots via Predictive Feasibility Reasoning},
author={Msallak, Mohamed},
year={2025},
school={Delft University of Technology}
}Mohamed Msallak - M.Msallak@student.tudelft.nl
See LICENSE file for details.