diff --git a/ATOS_module_interaction_diagrams.pdf b/ATOS_module_interaction_diagrams.pdf
new file mode 100644
index 000000000..b0778dfb0
Binary files /dev/null and b/ATOS_module_interaction_diagrams.pdf differ
diff --git a/Dockerfile b/Dockerfile
index b90a777db..75a805678 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -24,4 +24,9 @@ RUN --mount=type=cache,target=/var/cache/apt \
./scripts/installation/install_deps.sh ${REPO_DIR}
COPY . .
RUN ./scripts/installation/install_atos.sh ${REPO_DIR}
-WORKDIR /root/atos_ws
\ No newline at end of file
+WORKDIR /root/atos_ws
+RUN chmod +x /root/atos_git/scripts/run_atosfleetmanagement.sh
+
+EXPOSE 8420 8765 9090 8114
+
+CMD ["/bin/bash", "-lc", "/root/atos_git/scripts/run_atosfleetmanagement.sh"]
diff --git a/README.md b/README.md
index c3c554b97..b8c478f54 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,7 @@ docker run --network="host" --ipc=host --privileged -it -v ~/.astazero/ATOS/:/r
```
If you run Docker Desktop you will need to specify the ports to expose to the host computer.
```bash
-docker run --ipc=host --privileged -it -v ~/.astazero/ATOS/:/root/.astazero/ATOS/ -p 80:80 -p 8080:8080 -p 8081:8081 -p 8082:8082 -p 3000:3000 -p 3443:3443 -p 55555:55555 -p 443:443 -p 9090:9090 astazero/atos_docker_env:latest bash -c "source /root/atos_ws/install/setup.sh ; ros2 launch atos launch_basic.py insecure:=True"
+docker run --ipc=host --privileged -it -v ~/.astazero/ATOS/:/root/.astazero/ATOS/ -p 80:80 -p 8080:8080 -p 8081:8081 -p 8082:8082 -p 8420:8420 -p 3443:3443 -p 55555:55555 -p 443:443 -p 9090:9090 astazero/atos_docker_env:latest bash -c "source /root/atos_ws/install/setup.sh ; ros2 launch atos launch_basic.py insecure:=True"
```
See the [GUI](../Usage/GUI/foxglove.md) documentation on how to enable secure connections.
@@ -46,6 +46,77 @@ ATOS comes with an installation script that automates the installation process.
## Building from source manually
You can find instructions on how to manually install ATOS and its dependencies from source [here](https://atos.readthedocs.io/en/latest/Installation/installation/).
+## ATOSFleetManagement development launch
+ATOSFleetManagement is a lightweight development stack built around `truck_object_control` and `truck_object_gui` and does not start OpenScenarioGateway, JournalControl, or EsminiAdapter.
+
+After building, start it with:
+```bash
+ros2 launch atos launch_atosfleetmanagement.py insecure:=True
+```
+
+The placeholder COT input topic for TruckObjectControl is:
+```text
+/atos/truck_objects/cot
+```
+Expected temporary payload format:
+```text
+id=;distance_m=;tcp_connected=<0|1>
+```
+TruckObjectControl publishes speed commands on:
+```text
+/atos/truck_objects/speed_command
+```
+
+### ATOSFleetManagement in Docker (with or without simulators)
+Build and start with docker compose:
+```bash
+docker compose -f docker-compose-fleetmanagement.yml up --build
+```
+
+Start with simulated trucks enabled:
+```bash
+WITH_TRUCK_SIMULATOR=True docker compose -f docker-compose-fleetmanagement.yml up --build
+```
+
+Start with simulated trucks disabled:
+```bash
+WITH_TRUCK_SIMULATOR=False docker compose -f docker-compose-fleetmanagement.yml up --build
+```
+
+Open TruckObjectGUI at:
+```text
+http://localhost:8420
+```
+
+### Run as system service (Docker + systemd)
+Example deployment folder on server: `/opt/atos`.
+
+1. Copy repository to server:
+```bash
+sudo mkdir -p /opt/atos
+sudo rsync -a ./ /opt/atos/
+```
+
+2. Install service env file and customize:
+```bash
+sudo cp /opt/atos/scripts/atosfleetmanagement.env.example /etc/default/atosfleetmanagement
+sudo nano /etc/default/atosfleetmanagement
+```
+
+3. Install and enable service:
+```bash
+sudo cp /opt/atos/scripts/atosfleetmanagement.service /etc/systemd/system/atosfleetmanagement.service
+sudo systemctl daemon-reload
+sudo systemctl enable --now atosfleetmanagement
+```
+
+4. Service management:
+```bash
+sudo systemctl status atosfleetmanagement
+sudo systemctl restart atosfleetmanagement
+sudo journalctl -u atosfleetmanagement -f
+```
+
# Using ATOS with a Graphical User Interface (GUI)
Please click [here](https://atos.readthedocs.io/en/latest/Usage/GUI/foxglove/) for instructions on how to use ATOS with a GUI.
@@ -73,4 +144,3 @@ This project has partly been funded by the below organisations. The herein expre
-
diff --git a/ROS2_ATOSFleetManagement_cheatsheet.md b/ROS2_ATOSFleetManagement_cheatsheet.md
new file mode 100644
index 000000000..1a41ce02e
--- /dev/null
+++ b/ROS2_ATOSFleetManagement_cheatsheet.md
@@ -0,0 +1,185 @@
+# ROS2 for ATOSFleetManagement Cheat Sheet
+
+## 1) Source environment
+```bash
+source /opt/ros/humble/setup.bash
+source ~/atos_ws/install/setup.bash
+```
+
+## 2) Build ATOSFleetManagement packages
+```bash
+cd ~/atos_ws
+colcon build --packages-select atos atos_gui --symlink-install
+source install/setup.bash
+```
+
+## 3) Start ATOSFleetManagement (normal)
+```bash
+ros2 launch atos launch_atosfleetmanagement.py insecure:=True
+```
+
+## 4) Start ATOSFleetManagement with 3 simulators
+```bash
+ros2 launch atos launch_atosfleetmanagement.py insecure:=True with_truck_simulator:=True
+```
+
+### Default simulator setup in launch
+- `L5S-TRUCK-SIM-1`: `start_index=0`, `target_speed_kmh=80`, `ignore_warning_speed_commands=True`
+- `L5S-TRUCK-SIM-2`: `start_index=250`, `target_speed_kmh=40`
+- `L5S-TRUCK-SIM-3`: `start_index=500`, `target_speed_kmh=40`
+
+## 5) Open GUI
+- URL: `http://localhost:8420`
+- Go to tab: `RuralRoad Map`
+- UI shows live trucks + `Distance To Next Truck Ahead`
+
+## 6) Run in Docker (same image, with/without simulators)
+```bash
+cd ~/Documents/repos/ATOS
+docker compose -f docker-compose-fleetmanagement.yml up --build
+```
+With simulators:
+```bash
+WITH_TRUCK_SIMULATOR=True docker compose -f docker-compose-fleetmanagement.yml up --build
+```
+Without simulators:
+```bash
+WITH_TRUCK_SIMULATOR=False docker compose -f docker-compose-fleetmanagement.yml up --build
+```
+Start without rebuild (if image already built):
+```bash
+docker compose -f docker-compose-fleetmanagement.yml up
+```
+Start in background:
+```bash
+docker compose -f docker-compose-fleetmanagement.yml up -d
+```
+When to use `--build`:
+- Use `--build` only when image content changed (Dockerfile, dependencies, or source copied into image).
+- For normal restart, do **not** use `--build`.
+
+## 7) Run Docker as a systemd service
+```bash
+sudo mkdir -p /opt/atos
+sudo rsync -a ~/Documents/repos/ATOS/ /opt/atos/
+sudo cp /opt/atos/scripts/atosfleetmanagement.env.example /etc/default/atosfleetmanagement
+sudo cp /opt/atos/scripts/atosfleetmanagement.service /etc/systemd/system/atosfleetmanagement.service
+sudo systemctl daemon-reload
+sudo systemctl enable --now atosfleetmanagement
+```
+Service controls:
+```bash
+sudo systemctl status atosfleetmanagement
+sudo systemctl restart atosfleetmanagement
+sudo journalctl -u atosfleetmanagement -f
+```
+
+## 8) Copy to another server (what files are needed)
+Recommended (safest):
+```bash
+rsync -a ~/Documents/repos/ATOS/ user@:/opt/atos/
+```
+Minimum required for Docker-based ATOSFleetManagement:
+- `Dockerfile`
+- `docker-compose-fleetmanagement.yml`
+- `scripts/run_atosfleetmanagement.sh`
+- `scripts/installation/`
+- `atos/`
+- `atos_gui/`
+- `atos_interfaces/`
+- `conf/`
+- Optional for systemd service:
+ - `scripts/atosfleetmanagement.service`
+ - `scripts/atosfleetmanagement.env.example`
+
+## 9) Check running nodes
+```bash
+ros2 node list
+```
+
+## 10) Check key topics
+```bash
+ros2 topic list | rg "truck_objects|speed_command"
+```
+
+## 11) Watch live truck states for GUI
+```bash
+ros2 topic echo /atos/truck_objects/state
+```
+
+## 12) Watch control speed commands
+```bash
+ros2 topic echo /atos/truck_objects/speed_command
+```
+
+## 13) TruckObjectControl COT interfaces
+- ROS topic input: `/atos/truck_objects/cot` (placeholder format)
+- TCP input: `0.0.0.0:8114` listener in TruckObjectControl
+- Truck clients connect to: `127.0.0.1:8114` (same machine) or `:8114`
+- CoT `