init pro_sdk
This commit is contained in:
121
tools/stop_sportmode.sh
Executable file
121
tools/stop_sportmode.sh
Executable file
@@ -0,0 +1,121 @@
|
||||
#!/bin/bash
|
||||
# 停止/启动 sportMode 服务 (从Mac SSH到狗执行)
|
||||
# 用法:
|
||||
# bash tools/onboard/stop_sportmode.sh stop # 停止sportMode,进入低层控制
|
||||
# bash tools/onboard/stop_sportmode.sh start # 重新启动sportMode
|
||||
# bash tools/onboard/stop_sportmode.sh status # 检查状态
|
||||
|
||||
set -e
|
||||
|
||||
PI_HOST="${PI_HOST:-192.168.123.161}"
|
||||
PI_USER="${PI_USER:-pi}"
|
||||
|
||||
# 等待用户按键继续的 pause 函数
|
||||
pause() {
|
||||
echo ""
|
||||
read -p "按 Enter 继续..." dummy
|
||||
}
|
||||
|
||||
cmd="${1:-status}"
|
||||
|
||||
case "$cmd" in
|
||||
stop)
|
||||
echo "============================================"
|
||||
echo "⚠️ 停止 sportMode — 进入低层控制"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo "这将会:"
|
||||
echo " 1. 先发 damping 让电机失能"
|
||||
echo " 2. 停止 Legged_sport 进程"
|
||||
echo " 3. 停止后, :8007 将只接受你的 LowCmd"
|
||||
echo ""
|
||||
echo "⚠️ 停止后狗会软瘫, 确保:"
|
||||
echo " - 狗趴在地上或脚架上"
|
||||
echo " - 遥控器在手边 (L2+B 紧急停止)"
|
||||
echo " - 10分钟内必须重启 (安全看门狗)"
|
||||
echo ""
|
||||
read -p "确认停止? (yes/no): " confirm
|
||||
if [ "$confirm" != "yes" ]; then
|
||||
echo "取消"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "[1/3] 发送 damping ..."
|
||||
ssh ${PI_USER}@${PI_HOST} \
|
||||
"mosquitto_pub -h localhost -t controller/action -m damping" 2>/dev/null || \
|
||||
echo " (MQTT可能不可用, 继续...)"
|
||||
|
||||
sleep 2
|
||||
|
||||
echo "[2/3] 停止 Legged_sport 看门狗 + Legged_sport + appTransit ..."
|
||||
# 必须按顺序: 先杀看门狗 keep_sport_alive.sh, 否则它每 0.2s 重拉 Legged_sport
|
||||
# 同时杀 appTransit, 它也跟 MCU:8007 通信抢占
|
||||
ssh ${PI_USER}@${PI_HOST} \
|
||||
"sudo pkill -9 -f keep_sport_alive 2>/dev/null && echo ' ✅ keep_sport_alive (看门狗)' || echo ' (无看门狗)';
|
||||
sudo pkill -9 -f Legged_sport 2>/dev/null && echo ' ✅ Legged_sport' || echo ' (无)';
|
||||
sudo pkill -9 -f appTransit 2>/dev/null && echo ' ✅ appTransit' || echo ' (无)';
|
||||
sudo systemctl stop sportMode 2>/dev/null || true"
|
||||
|
||||
sleep 1
|
||||
|
||||
echo "[3/3] 验证..."
|
||||
if ssh ${PI_USER}@${PI_HOST} "! pgrep Legged_sport > /dev/null 2>&1"; then
|
||||
echo " ✅ Legged_sport 已完全停止"
|
||||
elif ssh ${PI_USER}@${PI_HOST} "pgrep Legged_sport > /dev/null 2>&1"; then
|
||||
echo " ⚠️ Legged_sport 可能仍在运行(被STOP暂停)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "✅ sportMode 已停止, 现在可以做低层控制测试"
|
||||
echo ""
|
||||
echo "恢复: bash tools/onboard/stop_sportmode.sh start"
|
||||
echo "============================================"
|
||||
;;
|
||||
|
||||
start)
|
||||
echo "============================================"
|
||||
echo "🔄 恢复 sportMode"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
|
||||
echo "[1/2] 恢复 Legged_sport ..."
|
||||
ssh ${PI_USER}@${PI_HOST} \
|
||||
"sudo systemctl restart sportMode 2>/dev/null || sudo systemctl restart legged_sport 2>/dev/null || (sudo killall -CONT Legged_sport 2>/dev/null) || echo '尝试手动启动'" && \
|
||||
echo " ✅ 重启命令已执行" || \
|
||||
echo " ⚠️ 重启失败, 尝试: sudo systemctl start sportMode 或重启狗"
|
||||
|
||||
sleep 3
|
||||
|
||||
echo "[2/2] 验证..."
|
||||
if ssh ${PI_USER}@${PI_HOST} "pgrep Legged_sport > /dev/null 2>&1"; then
|
||||
echo " ✅ Legged_sport 已恢复运行"
|
||||
else
|
||||
echo " ⚠️ Legged_sport 未运行, 可能需要重启狗"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "✅ sportMode 已恢复"
|
||||
;;
|
||||
|
||||
status)
|
||||
echo "检查 sportMode 状态..."
|
||||
echo ""
|
||||
echo "--- Legged_sport 进程 ---"
|
||||
ssh ${PI_USER}@${PI_HOST} "ps aux | grep -v grep | grep Legged_sport || echo ' 未运行'"
|
||||
echo ""
|
||||
echo "--- systemd 服务 ---"
|
||||
ssh ${PI_USER}@${PI_HOST} \
|
||||
"systemctl status sportMode 2>/dev/null || systemctl status Legged_sport 2>/dev/null || echo ' 服务名未知'" 2>/dev/null | head -10
|
||||
echo ""
|
||||
echo "--- MQTT 状态 ---"
|
||||
ssh ${PI_USER}@${PI_HOST} \
|
||||
"mosquitto_sub -h localhost -t programming/action -C 1 -W 2 2>/dev/null || echo ' (无消息/timeout)'"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "用法: bash stop_sportmode.sh [stop|start|status]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user