#!/usr/bin/env python3 """检查GPS数据是否有异常跳变""" import sys import math log_file = sys.argv[1] if len(sys.argv) > 1 else "calibration_20251204_171502.log" # 读取所有巡航状态数据 cruise_states = ['FWD_VLOW_C', 'FWD_LOW_C', 'FWD_MID_C', 'FWD_HIGH_C', 'FWD_VHIGH_C', 'FWD_MAX_C'] for state_name in cruise_states: data = [] with open(log_file, 'r', encoding='utf-8', errors='ignore') as f: for line in f: if state_name in line and line.startswith('$CAL'): parts = line.strip().split(',') if len(parts) >= 12: data.append({ 'time': int(parts[2]), 'pwm': int(parts[4]), 'x': float(parts[6]), 'y': float(parts[7]), 'hdg': float(parts[9]) }) if len(data) < 10: continue print(f"\n========== {state_name} (PWM {data[0]['pwm']}) ==========") # 检查跳变 max_jump = 0 max_speed = 0 for i in range(1, len(data)): dx = data[i]['x'] - data[i-1]['x'] dy = data[i]['y'] - data[i-1]['y'] dt = (data[i]['time'] - data[i-1]['time']) / 1000.0 dist = math.sqrt(dx*dx + dy*dy) if dt > 0: speed = dist / dt if speed > max_speed: max_speed = speed if dist > max_jump: max_jump = dist # 计算总体平均速度 total_dx = data[-1]['x'] - data[0]['x'] total_dy = data[-1]['y'] - data[0]['y'] total_dist = math.sqrt(total_dx*total_dx + total_dy*total_dy) total_time = (data[-1]['time'] - data[0]['time']) / 1000.0 avg_speed = total_dist / total_time if total_time > 0 else 0 print(f"总体: 距离{total_dist:.2f}m, 时间{total_time:.1f}s, 平均速度{avg_speed:.3f} m/s") print(f"单步最大跳变: {max_jump:.2f}m, 最大瞬时速度: {max_speed:.3f} m/s") if max_jump > 2.0 or max_speed > 10.0: print(f"⚠️ 警告:存在GPS跳变!数据不可信!") elif avg_speed > 3.0: print(f"⚠️ 警告:平均速度异常高!")