Files
go1_pro_sdk/tools/diff_real_lowcmd.sh
2026-06-20 20:02:36 +08:00

77 lines
2.6 KiB
Bash

#!/bin/bash
# 抓 Legged_sport 真实 LowCmd → 解密 → 跟本地脚本生成的对比
#
# 前提: Legged_sport 必须在跑且正常向 MCU 发包 (狗在工作状态, 不能是idle)
# 用法: bash tools/onboard/diff_real_lowcmd.sh [seconds]
#
# 输出:
# data/lowlevel_captures/real_lowcmd_<ts>.pcap - 抓的原包
# data/lowlevel_captures/real_lowcmd_<ts>.bin - 一帧密文 (616B)
# data/lowlevel_captures/real_lowcmd_dec_<ts>.bin - 解密后 (616B)
# 字节级 diff 输出到屏幕
PI_HOST="${PI_HOST:-192.168.123.161}"
PI_USER="${PI_USER:-pi}"
DURATION="${1:-3}"
TS=$(date +%Y%m%d_%H%M%S)
PCAP_REMOTE=/tmp/real_lowcmd.pcap
PCAP_LOCAL=data/lowlevel_captures/real_lowcmd_${TS}.pcap
CIPHER_BIN=data/lowlevel_captures/real_lowcmd_${TS}.bin
PLAIN_BIN=data/lowlevel_captures/real_lowcmd_dec_${TS}.bin
mkdir -p $(dirname ${PCAP_LOCAL})
echo "============================================"
echo "🔍 抓真实 LowCmd 跟本地对比"
echo "============================================"
echo ""
# 0. 确认 Legged_sport 在发包 (而不是 idle)
echo "[0/4] 确认 Legged_sport 在向 MCU 发包..."
COUNT=$(ssh ${PI_USER}@${PI_HOST} \
"sudo timeout 1 /usr/sbin/tcpdump -i any -nn -c 5 'udp and dst host 192.168.123.10 and dst port 8007' 2>/dev/null | grep -c 'IP 192' || true")
if [ "$COUNT" -lt 1 ]; then
echo " ❌ Legged_sport 没在发 LowCmd!"
echo " 可能原因:"
echo " - 狗在 idle/damping 待机, 需要遥控器唤醒 (L2+A 让它站起来)"
echo " - MCU 被其他客户端 (我们 Mac 的脚本) 抢占了"
echo " - sportMode 服务挂了"
exit 1
fi
echo " ✅ 检测到 ${COUNT} 个发往 MCU 的包"
echo ""
# 1. 抓包
echo "[1/4] tcpdump 抓 ${DURATION}s ..."
ssh ${PI_USER}@${PI_HOST} bash -s <<EOF
set +e
sudo rm -f ${PCAP_REMOTE}
sudo timeout ${DURATION} /usr/sbin/tcpdump -i any -w ${PCAP_REMOTE} -s 0 -n \
'udp and dst host 192.168.123.10 and dst port 8007' 2>/tmp/tcpdump.log
sudo chmod 644 ${PCAP_REMOTE}
echo "pcap 大小: \$(stat -c%s ${PCAP_REMOTE}) 字节"
EOF
# 2. 拉回
echo ""
echo "[2/4] 拉回本地..."
scp ${PI_USER}@${PI_HOST}:${PCAP_REMOTE} ${PCAP_LOCAL}
echo "${PCAP_LOCAL}"
# 3. 解析+解密+对比
echo ""
echo "[3/4] 解析+解密..."
conda run -n free_dog_sdk python tools/onboard/_compare_lowcmd.py \
${PCAP_LOCAL} \
--cipher-out ${CIPHER_BIN} \
--plain-out ${PLAIN_BIN}
echo ""
echo "============================================"
echo "完成. 文件:"
echo " pcap: ${PCAP_LOCAL}"
echo " 密文: ${CIPHER_BIN}"
echo " 明文: ${PLAIN_BIN}"
echo "============================================"