2025-06-03 15:37:46 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2025-06-09 15:24:34 +02:00
|
|
|
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() {
|
2025-06-10 15:10:52 +02:00
|
|
|
echo "Usage: $0 <ros|edf|sem> <single|multi> <timed|direct> [time_in_seconds] [no_rebuild]"
|
|
|
|
echo "Example: $0 ros multi timed 10"
|
|
|
|
echo "This script builds the full_topology package, runs a trace, and copies the results to a remote server."
|
|
|
|
echo "Parameters:"
|
|
|
|
echo " <ros|edf|sem> : Scheduler type (ros, edf, sem)"
|
|
|
|
echo " <single|multi> : Threading type (single, multi)"
|
|
|
|
echo " <timed|direct> : Fusion type (timed, direct)"
|
|
|
|
echo " <time_in_seconds> : Length of the trace (default: 10)"
|
|
|
|
echo " [no_rebuild] : Optional flag to skip rebuilding the package (true/false, default: false)"
|
2025-06-09 15:24:34 +02:00
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2025-06-10 15:10:52 +02:00
|
|
|
if [[ $# -lt 4 ]]; then
|
2025-06-09 15:24:34 +02:00
|
|
|
usage
|
|
|
|
fi
|
|
|
|
|
|
|
|
SCHEDULER_TYPE="$1"
|
|
|
|
THREADING_TYPE="$2"
|
|
|
|
FUSION_TYPE="$3"
|
|
|
|
TRACE_LENGTH="${4:-10}"
|
2025-06-10 15:10:52 +02:00
|
|
|
NO_REBUILD="${5:-false}"
|
2025-06-09 15:24:34 +02:00
|
|
|
|
|
|
|
# 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"
|
|
|
|
|
2025-06-10 15:10:52 +02:00
|
|
|
if [[ "$NO_REBUILD" != "true" ]]; then
|
|
|
|
echo "[INFO] Rebuilding full_topology package with CMake arguments: ${CMAKE_ARGS[*]}"
|
|
|
|
colcon build --packages-select full_topology --cmake-clean-cache --cmake-clean-first --cmake-args "${CMAKE_ARGS[@]}"
|
|
|
|
else
|
|
|
|
echo "[INFO] Skipping rebuild of full_topology package."
|
|
|
|
fi
|
2025-06-09 15:24:34 +02:00
|
|
|
|
|
|
|
source install/setup.bash
|
|
|
|
|
2025-06-10 15:10:52 +02:00
|
|
|
echo "[INFO] Launching full_topology with trace length: ${TRACE_LENGTH} seconds"
|
2025-06-09 16:12:51 +02:00
|
|
|
OUTPUT=$(taskset -c 2,3 ros2 launch full_topology trace_full_topology.launch.py "length:=${TRACE_LENGTH}")
|
2025-06-10 15:10:52 +02:00
|
|
|
echo "[INFO] Done running full_topology."
|
2025-06-09 16:12:51 +02:00
|
|
|
TRACE_ID=$(echo ${OUTPUT} | \
|
2025-06-09 15:24:34 +02:00
|
|
|
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}"
|
|
|
|
|
2025-06-10 15:10:52 +02:00
|
|
|
echo "[INFO] Converting trace"
|
|
|
|
ros2 trace-analysis convert "${TRACE_ORIG_PATH}/ust" 2>&1 \
|
|
|
|
| grep -v "UserWarning: " \
|
|
|
|
| grep -v "return extension.main" \
|
|
|
|
| grep -v "converting trace directory" \
|
|
|
|
| grep -v "output written to"
|
2025-06-09 15:24:34 +02:00
|
|
|
|
|
|
|
if [[ -e "$TRACE_NEW_PATH" ]]; then
|
|
|
|
rm -rf "$TRACE_NEW_PATH"
|
|
|
|
fi
|
2025-06-10 15:10:52 +02:00
|
|
|
echo "[INFO] Renaming trace from '$TRACE_ORIG_PATH' to '$TRACE_NEW_PATH'"
|
2025-06-09 15:24:34 +02:00
|
|
|
mv "$TRACE_ORIG_PATH" "$TRACE_NEW_PATH"
|
|
|
|
|
2025-06-10 15:10:52 +02:00
|
|
|
scp -qr "$TRACE_NEW_PATH/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/"
|
|
|
|
|
|
|
|
echo "$NEW_TRACE_ID" >> ./trace_ids.txt
|
2025-06-09 15:24:34 +02:00
|
|
|
|
|
|
|
echo "[SUCCESS] Trace analysis '$NEW_TRACE_ID' complete and copied to remote server."
|
2025-06-10 15:10:52 +02:00
|
|
|
echo ""
|