init pro_sdk
This commit is contained in:
76
tools/diff_real_lowcmd.sh
Normal file
76
tools/diff_real_lowcmd.sh
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/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 "============================================"
|
||||
Reference in New Issue
Block a user