got ros and edf to work, built startup script for reliable experimenting

This commit is contained in:
Niklas Halle 2025-06-09 15:24:34 +02:00
parent bf3f7ff485
commit 8cd5b03b03
9 changed files with 745 additions and 214 deletions

View file

@ -1,9 +1,66 @@
#!/usr/bin/env bash
colcon build --packages-select full_topology && \
source install/setup.bash && \
TRACE_ID=$(taskset -c 2,3 ros2 launch full_topology trace_full_topology.launch.py length:=100 | \
grep -oP '(?<=Writing tracing session to: /home/niklas/ROS-Dynamic-Executor-Experiments/analysis/tracing/full_topology_tracing-)\d+') && \
ros2 trace-analysis convert "/home/niklas/ROS-Dynamic-Executor-Experiments/analysis/tracing/full_topology_tracing-${TRACE_ID}/ust" && \
scp -r "analysis/tracing/full_topology_tracing-${TRACE_ID}/" 192.168.162.249:/home/niklas/dataflow-analysis/traces/ && \
echo "Trace analysis \"${TRACE_ID}\" complete and copied to remote server."
set -e
# ----------- CONFIGURABLES -----------
REMOTE_USER="niklas"
REMOTE_HOST="192.168.162.249"
REMOTE_PATH="/home/niklas/dataflow-analysis/traces"
TRACING_BASE="analysis/tracing"
LOCAL_PROJECT_DIR="/home/niklas/ROS-Dynamic-Executor-Experiments"
# --------------------------------------
usage() {
echo "Usage: $0 <ros|edf|sem> <single|multi> <timed|direct> [time_in_seconds]"
exit 1
}
if [[ $# -lt 3 ]]; then
usage
fi
SCHEDULER_TYPE="$1"
THREADING_TYPE="$2"
FUSION_TYPE="$3"
TRACE_LENGTH="${4:-10}"
# Determine defines based on parameters
CMAKE_ARGS=()
[[ "$SCHEDULER_TYPE" == "ros" ]] && CMAKE_ARGS+=("-DROS_DEFAULT_EXECUTOR=ON")
[[ "$SCHEDULER_TYPE" == "edf" ]] && CMAKE_ARGS+=("-DEDF_PRIORITY_EXECUTOR=ON")
[[ "$SCHEDULER_TYPE" == "sem" ]] && CMAKE_ARGS+=("-DSEMANTIC_EXECUTOR=ON")
[[ "$THREADING_TYPE" == "multi" ]] && CMAKE_ARGS+=("-DMULTI_THREADED=ON")
[[ "$FUSION_TYPE" == "timed" ]] && CMAKE_ARGS+=("-DUSE_TIMER_IN_FUSION_NODES=ON")
TRACE_NAME="${SCHEDULER_TYPE}_${THREADING_TYPE}_${FUSION_TYPE}_${TRACE_LENGTH}"
cd "$LOCAL_PROJECT_DIR"
colcon build --packages-select full_topology --cmake-args "${CMAKE_ARGS[@]}"
source install/setup.bash
TRACE_ID=$(taskset -c 2,3 ros2 launch full_topology trace_full_topology.launch.py "length:=${TRACE_LENGTH}" | \
grep -oP '(?<=Writing tracing session to: /home/niklas/ROS-Dynamic-Executor-Experiments/analysis/tracing/)[^\s]+')
if [[ -z "$TRACE_ID" ]]; then
echo "[ERROR] Failed to get tracing session directory. Aborting."
exit 2
fi
TIMESTAMP_SUFFIX="${TRACE_ID#trace_full_topology}"
NEW_TRACE_ID="${TRACE_NAME}${TIMESTAMP_SUFFIX}"
TRACE_ORIG_PATH="${TRACING_BASE}/${TRACE_ID}"
TRACE_NEW_PATH="${TRACING_BASE}/${NEW_TRACE_ID}"
ros2 trace-analysis convert "${TRACE_ORIG_PATH}/ust"
if [[ -e "$TRACE_NEW_PATH" ]]; then
rm -rf "$TRACE_NEW_PATH"
fi
mv "$TRACE_ORIG_PATH" "$TRACE_NEW_PATH"
scp -r "$TRACE_NEW_PATH/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/"
echo "[SUCCESS] Trace analysis '$NEW_TRACE_ID' complete and copied to remote server."