#!/usr/bin/env python3
|
"""基于可信数据段提取参数"""
|
import numpy as np
|
|
# 手动提取的可信数据点(前进测试,GPS正常)
|
pwm_speed_pairs = [
|
(1400, 0.065), # FWD_VLOW_C: 0.32m/5.0s
|
(1300, 0.298), # FWD_LOW_C: 1.48m/5.0s
|
(1100, 0.493), # FWD_HIGH_C: 2.44m/5.0s (跳过1200和1050因为有GPS跳变)
|
]
|
|
print("========== 基于可信数据的线性拟合 ==========\n")
|
print("使用数据点:")
|
for pwm, v in pwm_speed_pairs:
|
print(f" PWM {pwm}: {v:.3f} m/s")
|
|
# 线性拟合:v = k × (1500 - pwm) + bias
|
pwms = np.array([p[0] for p in pwm_speed_pairs])
|
speeds = np.array([p[1] for p in pwm_speed_pairs])
|
|
x = 1500 - pwms
|
y = speeds
|
|
coef = np.polyfit(x, y, 1)
|
k = coef[0]
|
bias = coef[1]
|
|
print(f"\n========== 拟合结果 ==========")
|
print(f"模型:v = {k:.6f} × (1500 - pwm) + ({bias:.6f})")
|
print(f"\n验证:")
|
for pwm, v_measured in pwm_speed_pairs:
|
v_pred = k * (1500 - pwm) + bias
|
print(f" PWM {pwm}: 实测 {v_measured:.3f} m/s, 预测 {v_pred:.3f} m/s, 误差 {abs(v_measured-v_pred):.3f} m/s")
|
|
# 预测极限
|
v_1000 = k * (1500 - 1000) + bias
|
v_1500 = bias
|
|
print(f"\n========== 预测 ==========")
|
print(f"PWM 1500 (停止): {v_1500:.3f} m/s (应接近0)")
|
print(f"PWM 1000 (最大前进): {v_1000:.3f} m/s")
|
|
print(f"\n========== 推荐的C代码参数 ==========")
|
print(f"#define MC_CFG_FORWARD_K ({k:.6f}f)")
|
print(f"#define MC_CFG_FORWARD_BIAS ({bias:.6f}f)")
|
print(f"#define MC_CFG_MAX_FORWARD_MPS ({v_1000:.3f}f)")
|
|
# 转向数据(从之前的分析结果手动提取,只用前期可信数据)
|
print(f"\n\n========== 转向参数(基于部分数据)==========")
|
print("由于后期GPS失锁,转向数据不完整")
|
print("建议先用保守值:")
|
print("#define MC_CFG_STEERING_K_LEFT (0.00010f) // 待更精确校准")
|
print("#define MC_CFG_STEERING_K_RIGHT (0.00010f) // 待更精确校准")
|
print("#define MC_CFG_STEERING_TRIM (10) // 向右补偿10PWM")
|