105 lines
3.3 KiB
Bash
105 lines
3.3 KiB
Bash
#!/bin/bash
|
|
# 部署+执行测试 (在树莓派上, 源IP=192.168.123.161)
|
|
#
|
|
# 用法:
|
|
# bash tools/onboard/run_on_pi.sh sin # 单腿正弦
|
|
# bash tools/onboard/run_on_pi.sh damping # 零力矩连通性
|
|
# bash tools/onboard/run_on_pi.sh deploy # 仅部署不执行
|
|
set -e
|
|
|
|
PI_HOST="${PI_HOST:-192.168.123.161}"
|
|
PI_USER="${PI_USER:-pi}"
|
|
TEST="${1:-sin}"
|
|
REMOTE_DIR=/tmp/dog_test
|
|
|
|
echo "=== 部署到 ${PI_USER}@${PI_HOST}:${REMOTE_DIR} ==="
|
|
|
|
# 1. 创建远程目录结构
|
|
ssh ${PI_USER}@${PI_HOST} "rm -rf ${REMOTE_DIR} && mkdir -p ${REMOTE_DIR}/ucl"
|
|
|
|
# 2. 拷贝文件 (所有.py平铺在REMOTE_DIR, ucl/子目录放SDK文件)
|
|
echo "[1/2] 拷贝文件..."
|
|
scp tools/onboard/blowfish_codec.py \
|
|
tools/onboard/build_pro_lowcmd.py \
|
|
tools/onboard/test_sin_leg.py \
|
|
tools/onboard/test_lowcmd.py \
|
|
tools/onboard/example_position_pro.py \
|
|
data/lowlevel_captures/blowfish_state.bin \
|
|
${PI_USER}@${PI_HOST}:${REMOTE_DIR}/
|
|
|
|
# 空 __init__.py 让 ucl 成为 package
|
|
ssh ${PI_USER}@${PI_HOST} "touch ${REMOTE_DIR}/ucl/__init__.py"
|
|
scp ucl/lowCmd.py ucl/lowState.py ucl/common.py ucl/complex.py ucl/enums.py \
|
|
${PI_USER}@${PI_HOST}:${REMOTE_DIR}/ucl/
|
|
|
|
# 提前杀掉 MCU:8007 的所有抢占者:
|
|
# 1. keep_sport_alive.sh - Legged_sport 看门狗 (每0.2秒重启Legged_sport, 必须先杀)
|
|
# 2. Legged_sport - 主控制循环
|
|
# 3. appTransit - 也跟 MCU:8007 通信
|
|
echo ""
|
|
echo "=== 停止 MCU:8007 抢占源 (顺序: 看门狗 → Legged_sport → appTransit) ==="
|
|
ssh ${PI_USER}@${PI_HOST} bash <<'EOF' || true
|
|
set +e
|
|
if sudo pkill -9 -f keep_sport_alive 2>/dev/null; then
|
|
echo ' ✅ keep_sport_alive.sh (看门狗)'
|
|
else
|
|
echo ' (无看门狗)'
|
|
fi
|
|
sleep 0.3
|
|
if sudo pkill -9 -f Legged_sport 2>/dev/null; then
|
|
echo ' ✅ Legged_sport'
|
|
else
|
|
echo ' (无)'
|
|
fi
|
|
if sudo pkill -9 -f appTransit 2>/dev/null; then
|
|
echo ' ✅ appTransit'
|
|
else
|
|
echo ' (无)'
|
|
fi
|
|
sleep 0.5
|
|
echo '--- 验证残留: ---'
|
|
if pgrep -fl 'Legged_sport|appTransit|keep_sport_alive' 2>/dev/null; then
|
|
echo ' ⚠️ 仍有残留, 可能看门狗在别处'
|
|
else
|
|
echo ' ✅ 全部清除'
|
|
fi
|
|
EOF
|
|
sleep 1
|
|
|
|
echo ""
|
|
echo "[2/2] 执行测试..."
|
|
|
|
case "$TEST" in
|
|
sin)
|
|
echo "=== 单腿正弦测试 (Pi端) ==="
|
|
ssh -t ${PI_USER}@${PI_HOST} \
|
|
"cd ${REMOTE_DIR} && python3 test_sin_leg.py --amplitude 0.3 --freq 0.5 --duration 10"
|
|
;;
|
|
damping)
|
|
echo "=== 零力矩连通性测试 (Pi端) ==="
|
|
ssh -t ${PI_USER}@${PI_HOST} \
|
|
"cd ${REMOTE_DIR} && python3 test_lowcmd.py --skip-stop --skip-mqtt"
|
|
;;
|
|
example)
|
|
echo "=== example_position(lowlevel) PRO 版本 (Pi端) ==="
|
|
ssh -t ${PI_USER}@${PI_HOST} \
|
|
"cd ${REMOTE_DIR} && python3 example_position_pro.py --max-steps 5000"
|
|
;;
|
|
deploy)
|
|
echo "✅ 已部署到 ${PI_USER}@${PI_HOST}:${REMOTE_DIR}"
|
|
echo " ssh ${PI_USER}@${PI_HOST}"
|
|
echo " cd ${REMOTE_DIR} && python3 test_sin_leg.py ..."
|
|
;;
|
|
*)
|
|
echo "用法: bash run_on_pi.sh [sin|damping|example|deploy]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
echo "============================================"
|
|
echo "恢复 sportMode:"
|
|
echo " bash tools/onboard/stop_sportmode.sh start"
|
|
echo " 或 ssh ${PI_USER}@${PI_HOST} sudo systemctl start sportMode"
|
|
echo "============================================"
|