74 lines
2.2 KiB
Bash
74 lines
2.2 KiB
Bash
#!/bin/bash
|
|
# 抓 Legged_sport 发给 MCU :8007 的 LowCmd UDP 包, 拉回本地解析
|
|
#
|
|
# 用法: bash tools/onboard/capture_lowcmd.sh [seconds]
|
|
#
|
|
# 流程:
|
|
# 1. SSH 到狗启动 tcpdump 抓包 (持续N秒)
|
|
# 2. 拉回 pcap 到本地
|
|
# 3. 用 Python 解析 pcap, 提取 LowCmd 字节
|
|
# 4. 跟本地 buildCmd() 的输出对比
|
|
|
|
PI_HOST="${PI_HOST:-192.168.123.161}"
|
|
PI_USER="${PI_USER:-pi}"
|
|
DURATION="${1:-5}" # 抓包秒数
|
|
|
|
PCAP_REMOTE=/tmp/legged_sport.pcap
|
|
PCAP_LOCAL=data/lowlevel_captures/legged_sport_$(date +%Y%m%d_%H%M%S).pcap
|
|
|
|
echo "============================================"
|
|
echo "🔍 抓 Legged_sport → MCU 的 LowCmd 包"
|
|
echo "============================================"
|
|
echo " 抓包时长: ${DURATION}s"
|
|
echo " 远端 pcap: ${PCAP_REMOTE}"
|
|
echo " 本地保存: ${PCAP_LOCAL}"
|
|
echo ""
|
|
|
|
# 先确认 Legged_sport 在运行 (否则抓不到包)
|
|
echo "[1/4] 确认 Legged_sport 在运行..."
|
|
if ssh ${PI_USER}@${PI_HOST} "pgrep Legged_sport > /dev/null 2>&1"; then
|
|
echo " ✅ Legged_sport 在运行"
|
|
else
|
|
echo " ⚠️ Legged_sport 未运行! 先恢复 sportMode:"
|
|
echo " bash tools/onboard/stop_sportmode.sh start"
|
|
exit 1
|
|
fi
|
|
|
|
# 抓包: 用 tcpdump (已在 Pi 上安装)
|
|
echo ""
|
|
echo "[2/4] 启动 tcpdump 抓包 (${DURATION}s, eth0)..."
|
|
|
|
ssh ${PI_USER}@${PI_HOST} bash -s <<EOF || true
|
|
set +e
|
|
sudo rm -f ${PCAP_REMOTE}
|
|
sudo timeout ${DURATION} /usr/sbin/tcpdump -i eth0 -w ${PCAP_REMOTE} -s 0 -n \\
|
|
'udp and host 192.168.123.10 and port 8007' 2>/tmp/tcpdump.log
|
|
echo "tcpdump 退出码: \$?"
|
|
if [ -f ${PCAP_REMOTE} ]; then
|
|
sudo chmod 644 ${PCAP_REMOTE}
|
|
echo "pcap 大小: \$(stat -c%s ${PCAP_REMOTE}) 字节"
|
|
cat /tmp/tcpdump.log
|
|
else
|
|
echo "❌ pcap 未生成!"
|
|
cat /tmp/tcpdump.log
|
|
exit 1
|
|
fi
|
|
EOF
|
|
|
|
echo " ✅ 抓包完成"
|
|
|
|
# 拉回本地
|
|
echo ""
|
|
echo "[3/4] 拉回本地..."
|
|
mkdir -p $(dirname ${PCAP_LOCAL})
|
|
if ! scp ${PI_USER}@${PI_HOST}:${PCAP_REMOTE} ${PCAP_LOCAL}; then
|
|
echo "❌ 拉取失败"
|
|
exit 1
|
|
fi
|
|
echo " ✅ ${PCAP_LOCAL} ($(stat -f%z ${PCAP_LOCAL} 2>/dev/null || stat -c%s ${PCAP_LOCAL}) 字节)"
|
|
|
|
# 解析+对比
|
|
echo ""
|
|
echo "[4/4] 解析+对比..."
|
|
conda run -n free_dog_sdk python tools/onboard/diff_lowcmd.py ${PCAP_LOCAL}
|