Files

77 lines
2.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -euo pipefail
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd "${script_dir}/.." && pwd)"
port="${OPEN_SOURCE_DASHBOARD_PORT:-8090}"
map_dir="${GO2_OS_MAP_DIR:-${HOME}/go2_maps}"
# Source ROS2 环境(setup.bash 内部可能引用未绑定变量)
set +u
source /opt/ros/humble/setup.bash
if [[ -f "${HOME}/unitree_ros2/cyclonedds_ws/install/setup.bash" ]]; then
source "${HOME}/unitree_ros2/cyclonedds_ws/install/setup.bash"
fi
if [[ -f "${repo_root}/install/setup.bash" ]]; then
source "${repo_root}/install/setup.bash"
fi
set -u
# CycloneDDS 配置(必须和 Nav2 一致才能发现 /map /tf 等 topic)
ros_iface="${GO2_WIRED_IFACE:-ens160}"
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI="<CycloneDDS><Domain><General><Interfaces><NetworkInterface name=\"${ros_iface}\" priority=\"default\" multicast=\"default\" /></Interfaces></General></Domain></CycloneDDS>"
# 加载 dashboard 环境
dashboard_env="${repo_root}/go2_dashboard/config/dashboard.env"
if [[ -f "${dashboard_env}" ]]; then
set -a; source "${dashboard_env}"; set +a
fi
runtime_env="${repo_root}/scripts/go2_runtime.env"
if [[ -f "${runtime_env}" ]]; then source "${runtime_env}"; fi
# 找最新地图
latest_map="$(ls -t "${map_dir}"/*.yaml 2>/dev/null | head -1 || true)"
if [[ -z "${latest_map}" ]]; then
printf '[go2_restart_dashboard] ERROR: no map found in %s\n' "${map_dir}" >&2
exit 1
fi
printf '[go2_restart_dashboard] latest map: %s\n' "${latest_map}"
# 停止旧进程
current_pid="$(pgrep -f 'go2_dashboard/server.py' | head -1 || true)"
if [[ -n "${current_pid}" ]]; then
printf '[go2_restart_dashboard] stopping old dashboard (pid=%s)\n' "${current_pid}"
kill "${current_pid}" 2>/dev/null || true
sleep 1
kill -0 "${current_pid}" 2>/dev/null && kill -9 "${current_pid}" 2>/dev/null || true
fi
# 启动
printf '[go2_restart_dashboard] starting dashboard with map: %s\n' "${latest_map}"
cd "${repo_root}"
mkdir -p "${repo_root}/log"
nohup python3 go2_dashboard/server.py \
--host 0.0.0.0 \
--port "${port}" \
--repo-root "${repo_root}" \
--map-yaml "${latest_map}" \
--camera-iface "${GO2_CAMERA_IFACE:-ens160}" \
--nav-log-dir "${repo_root}/log/go2_nav" \
--pose-config "${repo_root}/go2_dashboard/config/pose_pipeline.json" \
--waypoint-action-config "${repo_root}/go2_dashboard/config/waypoint_action.json" \
> "${repo_root}/log/dashboard.log" 2>&1 &
new_pid=$!
sleep 2
if kill -0 "${new_pid}" 2>/dev/null; then
dashboard_ip="$(hostname -I 2>/dev/null | awk '{print $1}')"
printf '[go2_restart_dashboard] started (pid=%s)\n' "${new_pid}"
printf '[go2_restart_dashboard] url: http://%s:%s\n' "${dashboard_ip}" "${port}"
else
printf '[go2_restart_dashboard] ERROR: failed to start, check %s/log/dashboard.log\n' "${repo_root}" >&2
tail -20 "${repo_root}/log/dashboard.log" >&2
exit 1
fi