53 lines
1.6 KiB
Bash
53 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
# scripts/launch.sh —— 跑 demo launch(可限时自动关停)
|
|
#
|
|
# 用法:
|
|
# # 一直跑(前台,Ctrl+C 停)
|
|
# docker exec -it ros2_dev bash /root/ros2_ws/scripts/launch.sh pubsub_launch
|
|
#
|
|
# # 跑 N 秒后自动停(脚本、CI、截图用)
|
|
# docker exec ros2_dev bash /root/ros2_ws/scripts/launch.sh pubsub_launch 10
|
|
#
|
|
# 第一个参数:launch 文件名(不带 .py),默认 pubsub_launch
|
|
# 第二个参数:运行时长(秒),默认 0 = 不限时
|
|
set -eo pipefail
|
|
|
|
WORKSPACE="${WORKSPACE:-/root/ros2_ws}"
|
|
NAME="${1:-pubsub_launch}"
|
|
RUNTIME="${2:-0}"
|
|
|
|
source /opt/ros/humble/setup.bash
|
|
source "${WORKSPACE}/install/setup.bash"
|
|
|
|
cd "${WORKSPACE}"
|
|
|
|
# RUNTIME 合法化:非整数 / 空 / "forever" → -1(一直跑)
|
|
if ! [[ "${RUNTIME}" =~ ^-?[0-9]+$ ]]; then
|
|
RUNTIME="-1"
|
|
fi
|
|
|
|
echo "[launch.sh] starting: ros2 launch bringup ${NAME}.py (runtime=${RUNTIME}s; -1 = forever)"
|
|
|
|
if [ "${RUNTIME}" -ge 0 ]; then
|
|
# 后台跑 + 给定时炸弹
|
|
ros2 launch bringup "${NAME}.py" &
|
|
LAUNCH_PID=$!
|
|
if [ "${RUNTIME}" -gt 0 ]; then
|
|
sleep "${RUNTIME}"
|
|
echo "[launch.sh] reaching runtime limit, killing..."
|
|
kill -INT "${LAUNCH_PID}" 2>/dev/null || true
|
|
pkill -f "ros2 launch bringup ${NAME}" 2>/dev/null || true
|
|
wait "${LAUNCH_PID}" 2>/dev/null || true
|
|
else
|
|
# 0 = 等用户 Ctrl+C
|
|
wait "${LAUNCH_PID}" 2>/dev/null || true
|
|
fi
|
|
else
|
|
# -1 = forever(后台跑,主进程立刻返回)
|
|
nohup ros2 launch bringup "${NAME}.py" >/dev/null 2>&1 &
|
|
disown
|
|
echo "[launch.sh] ✅ launched in background (forever mode, pid=$!)"
|
|
fi
|
|
|
|
echo "[launch.sh] ✅ exit"
|