update ReadMe
This commit is contained in:
parent
a24aeeffe7
commit
cd76d25069
4 changed files with 81 additions and 96 deletions
72
README.md
72
README.md
|
@ -1,72 +0,0 @@
|
|||
# MA Autoware Trace Analysis
|
||||
|
||||
Automatically extract data dependencies and end-to-end (E2E) latencies from ROS2 trace data and source code.
|
||||
|
||||
## Prerequisites
|
||||
* Python 3.10 or newer (this is crucial!)
|
||||
* [JupyterLab](https://jupyter.org/install#jupyterlab) or [Jupyter Notebook](https://jupyter.org/install#jupyter-notebook)
|
||||
* [ROS2 Tracing](https://github.com/ros2/ros2_tracing)
|
||||
* [Tracetools Analysis](https://gitlab.com/ros-tracing/tracetools_analysis)
|
||||
* `python3-babeltrace` and `python3-lttng`, e.g. via `sudo apt install`, **for Python 3.10** (this requires either Ubuntu 22.04 or custom installation)
|
||||
|
||||
## Requirements for Optional Features
|
||||
* `ros2_internal_dependency_analyzer` for finding intra-node dependencies via static analysis, which can then be
|
||||
utilized by this tool
|
||||
* `ros2 multitopic bw` for recording message sizes which can then be processed by this tool
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
```shell
|
||||
# Make sure you are running Python 3.10 and the corresponding pip:
|
||||
python3.10 -V
|
||||
pip3.10 -V
|
||||
|
||||
pip3.10 install -r requirements.txt
|
||||
```
|
||||
|
||||
Make sure that ROS2 Tracing and Tracetools Analysis were compiled with `colcon build [...] --symlink-install [...]`. Without `--symlink-install`, the build folder structure will be incorrect and the libraries required by this tool cannot be located.
|
||||
|
||||
## Usage
|
||||
|
||||
The `trace_analysis.ipynb` notebook is the entry point for users.
|
||||
Configure the notebook according to the comments in the user settings cell.
|
||||
Settings can either be changed in the notebook or via environment variables:
|
||||
```python
|
||||
# In the notebook (User Settings cell near the top):
|
||||
TR_PATH = "path/to/trace/dir"
|
||||
E2E_ENABLED = True
|
||||
...
|
||||
```
|
||||
|
||||
```shell
|
||||
# In the shell of your choice (choose Bash!):
|
||||
# Each setting is named the same as in the notebook but prefixed by "ANA_NB_".
|
||||
# For strings, quotes have to be included IN THE VARIABLE VALUE, i.e. double quotation "'...'"
|
||||
# has to be used in most cases
|
||||
ANA_NB_TR_PATH="'path/to/trace/dir'"
|
||||
ANA_NB_E2E_ENABLED="True"
|
||||
```
|
||||
|
||||
You can run the notebook via the "Run All" command in Jupyter or you can execute it headless
|
||||
from the command line:
|
||||
```shell
|
||||
jupyter nbconvert --to notebook --execute trace-analysis.ipynb
|
||||
```
|
||||
|
||||
The notebook also supports invocation via [Papermill](https://papermill.readthedocs.io/en/latest/).
|
||||
|
||||
The output files are found in the configured output dir (default: `out/`).
|
||||
Inputs are processed and cached in `cache/`.
|
||||
|
||||
## Outputs
|
||||
|
||||
The `plot_e2es_violin_XYZ.csv` files correspond to the latencies for each recorded dataflow on path item XYZ.
|
||||
The labels for these path items are found in `plot_e2es_violin_labels.csv`.
|
||||
The latency types (DDS, Idle, Computation) for these path items are found in `plot_e2es_violin_types.csv`.
|
||||
`calc_times.csv` provides calculation times for all callbacks on the path (not only until publication, which is the case for the computation times above).
|
||||
|
||||
|
||||
## Known Issues
|
||||
|
||||
* The histograms output in the notebook for Idle, Computation and DDS times, do not aggregate these values over the end-to-end path. Thus, the latencies of all path elements are added into the same histogram.
|
81
ReadMe.md
Normal file
81
ReadMe.md
Normal file
|
@ -0,0 +1,81 @@
|
|||
# ROS 2 Trace Analysis for Semantic Scheduling (Thesis)
|
||||
|
||||
This repo provides the data analysis framework used for my thesis
|
||||
**"Semantic Scheduling for Multi-Modal Sensor Data on the Example of ROS 2"** (TU Berlin & DLR, 2025).
|
||||
|
||||
It is based on [TUM-AVS/ros2_latency_analysis](https://github.com/TUM-AVS/ros2_latency_analysis) (`dataflow-analysis` branch) by Betz et al.
|
||||
**Please cite their original work when using this code (see below).**
|
||||
|
||||
## Key Features
|
||||
|
||||
- Automated extraction of end-to-end and component latencies from ROS 2 traces
|
||||
- Extended batch processing, including meta-anaylsis
|
||||
- Scripts and fixes tailored for semantic scheduling experiments
|
||||
|
||||
## Main Additions & Changes
|
||||
|
||||
- **New scripts:**
|
||||
`add_csv_header.sh`, `batch_analysis_analysis.py`, `csv2table.py`, `csvfix.sh`,
|
||||
`run_batch_analysis_analysis.sh`, `run_batch_analyze.sh`
|
||||
- **Main modifications:**
|
||||
`batch_analyze.py`, `trace-analysis.ipynb`
|
||||
- **Submodules:**
|
||||
Includes `ros2_tracing` and `tracetools_analysis`
|
||||
|
||||
All changes are documented in the git history.
|
||||
|
||||
## Setup
|
||||
|
||||
- Requires **Python 3.10+**, ROS 2, JupyterLab, and [ros2_tracing](https://github.com/ros2/ros2_tracing)
|
||||
- Install dependencies:
|
||||
`pip3.10 install -r requirements.txt`
|
||||
- Run interactive analysis in Jupyter (`trace-analysis.ipynb`) or batch via provided scripts.
|
||||
|
||||
See the [upstream README](https://github.com/TUM-AVS/ros2_latency_analysis/tree/dataflow-analysis) for more details on prerequisites and methodology.
|
||||
|
||||
## Usage
|
||||
|
||||
First, make sure all your traces are in sub-directories conforming to the common experiment type, e.g.:
|
||||
```
|
||||
traces/
|
||||
ros_multi/
|
||||
ros_multi_1
|
||||
ros_multi_2
|
||||
...
|
||||
ros_multi_n
|
||||
ros_single/
|
||||
ros_single_1
|
||||
ros_single_2
|
||||
...
|
||||
ros_single_m
|
||||
```
|
||||
Then use `run_batch_analyze.sh` to run the analysis (trace-analysis.ipynb) for the traces you gathered. This will create a summarizing `results.csv` in the respecitve directory (here thus `traces/ros_multi/` and 'traces/ros_multi/').
|
||||
The csv will not have headers, to add them, use `add_csv_header.sh`.
|
||||
Now you can run `run_batch_analysis_analysis.sh` to generate the end-to-end analysis box-plots from that results.csv (will also generate a `results_summary.csv`). The latter is ideal to be turned into LaTeX tables, using `csv2table.py`.
|
||||
|
||||
## Output
|
||||
|
||||
- Latency CSVs (E2E and per-chain), plots (PDF/PNG), and LaTeX-ready tables
|
||||
|
||||
## Citation
|
||||
|
||||
If you use this code, **please cite**:
|
||||
|
||||
Betz, T. et al., “Latency Measurement for Autonomous Driving Software Using Data Flow Extraction,”
|
||||
*IEEE Intelligent Vehicles Symposium (IV), 2023.*
|
||||
[DOI: 10.1109/iv55152.2023.10186686](https://doi.org/10.1109/iv55152.2023.10186686)
|
||||
|
||||
```bibtex
|
||||
@inproceedings{Betz2023,
|
||||
doi = {10.1109/iv55152.2023.10186686},
|
||||
url = {https://doi.org/10.1109/iv55152.2023.10186686},
|
||||
year = {2023},
|
||||
author = {Tobias Betz and Maximilian Schmeller and Andreas Korb and Johannes Betz},
|
||||
title = {Latency Measurement for Autonomous Driving Software Using Data Flow Extraction},
|
||||
booktitle = {2023 {IEEE} Intelligent Vehicles Symposium ({IV})}
|
||||
}
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
See upstream for original license; thesis-specific additions are for academic/non-commercial use.
|
|
@ -1,12 +0,0 @@
|
|||
chain,input_delay,ideal_execution_time
|
||||
/input/baroA/alt --> /output/flight/cmd,100,44
|
||||
/input/baroB/alt --> /output/telemetry/radio,100,23
|
||||
/input/cameraA/raw --> /output/cameraA/mapped,200,68
|
||||
/input/cameraA/raw --> /output/telemetry/radio,200,76
|
||||
/input/cameraB/raw --> /output/classifier/classification,150,75
|
||||
/input/gpsA/fix --> /output/flight/cmd,100,44
|
||||
/input/gpsB/fix --> /output/telemetry/radio,100,23
|
||||
/input/imuA/data --> /output/flight/cmd,100,44
|
||||
/input/imuB/data --> /output/telemetry/radio,100,23
|
||||
/input/lidar/scan --> /output/flight/cmd,100,30
|
||||
/input/operator/commands --> /output/flight/cmd,100,30
|
|
|
@ -1,12 +0,0 @@
|
|||
chain,input_delay,ideal_execution_time
|
||||
/input/baroA/alt --> /output/flight/cmd,14,44
|
||||
/input/baroB/alt --> /output/telemetry/radio,6,23
|
||||
/input/cameraA/raw --> /output/cameraA/mapped,200,68
|
||||
/input/cameraA/raw --> /output/telemetry/radio,6,76
|
||||
/input/cameraB/raw --> /output/classifier/classification,150,75
|
||||
/input/gpsA/fix --> /output/flight/cmd,14,44
|
||||
/input/gpsB/fix --> /output/telemetry/radio,6,23
|
||||
/input/imuA/data --> /output/flight/cmd,14,44
|
||||
/input/imuB/data --> /output/telemetry/radio,6,23
|
||||
/input/lidar/scan --> /output/flight/cmd,18,30
|
||||
/input/operator/commands --> /output/flight/cmd,18,30
|
|
Loading…
Add table
Add a link
Reference in a new issue