3、机器人模型概念:理解机器人运动学模型、动力学模型以及传感器模型,明确哪些参数需要识别和更新

在STM32机器人项目的生命周期中,模型是连接物理世界与算法逻辑的桥梁。无论是简单的两轮差速小车,还是带机械臂的复合机器人,其控制性能的上限取决于模型对真实系统的逼近程度。本章将系统梳理机器人三大核心模型——运动学模型、动力学模型与传感器模型——的内涵、数学表达形式,以及在实际工程中哪些参数必须通过实验识别或在线更新。只有清晰理解这些参数的物理意义与更新机制,才能让固件版本管理有的放矢,避免“改一个参数就重新烧录一次”的原始开发模式。

运动学模型 动力学模型 传感器模型 几何关系 + 速度约束 位姿 → 速度映射 待识别参数 轮距L、轮半径r 编码器线数N、减速比n 更新方式 UART/参数服务器在线调 典型公式 v = (ωL+ωR)·r/2 ω = (ωR-ωL)·r/L 差速模型 力/力矩 → 加速度 质量、惯量、摩擦 待识别参数 质量m、转动惯量I 粘滞摩擦B、库仑摩擦fc 更新方式 阶跃响应/扫频辨识 典型公式 τ = I·α + B·ω + fc + τ_load 单轴旋转模型 物理量 → 数字信号 噪声、偏差、尺度因子 待识别参数 零偏b、尺度因子s 噪声方差σ²、时延τ 更新方式 静止采集/艾伦方差 典型公式 y = s·x + b + n n ~ N(0, σ²) IMU/编码器/激光 三类模型参数共同构成固件版本管理的核心配置项

3.1 运动学模型:从几何约束到速度映射

运动学模型描述的是机器人位姿变化与执行器运动之间的几何关系,不涉及力与质量。对于STM32控制的轮式机器人,最常用的是差速驱动模型和全向轮模型。差速模型的核心公式为:线速度 v = (ω_R + ω_L)·r / 2,角速度 ω = (ω_R - ω_L)·r / L,其中 ω_R、ω_L 为左右轮角速度,r 为车轮半径,L 为轮距。这个看似简单的公式背后,隐藏着多个需要实际测量的参数。

需要识别的关键参数包括:

  • 车轮有效半径 r:轮胎充气程度、磨损、负载变化都会导致实际滚动半径与标称值偏差 2%~5%。
  • 轮距 L:左右轮接地点之间的实际距离,受悬挂压缩和安装公差影响。
  • 减速比 n 与编码器线数 N:决定电机轴到车轮的角速度换算关系,通常可从数据手册获得,但实际值需通过旋转测试验证。
  • 安装角度偏差:对于全向轮,辊子轴线与轮轴线的夹角误差会引入运动耦合。

这些参数的识别方法通常采用直线行驶校准和原地旋转校准。直线校准时,让机器人以固定PWM行驶一段已知距离,对比编码器累计值与实际位移,反推有效半径;旋转校准则让机器人原地旋转360°,对比陀螺仪积分值与编码器推算角度,修正轮距参数。

工程经验:在STM32固件中,建议将运动学参数存放在独立的参数结构体中,并支持通过串口指令在线修改。例如发送 SET_KIN L=0.285 R=0.0325 即可更新轮距和半径,无需重新编译固件。这为现场调试节省大量时间。

3.2 动力学模型:力与运动的深层关系

当机器人需要高速运动、负载变化或精确力控时,仅靠运动学模型是不够的。动力学模型描述的是驱动力矩与加速度、速度之间的关系。对于STM32控制的直流电机驱动轮,简化单轴动力学模型为:τ = I·α + B·ω + f_c·sign(ω) + τ_load,其中 I 为等效转动惯量(包含电机转子、减速器、车轮),B 为粘滞摩擦系数,f_c 为库仑摩擦力矩,τ_load 为外部负载力矩。

动力学参数识别方法:

  1. 阶跃响应法:给电机施加恒定PWM,记录转速上升曲线。稳态转速对应库仑摩擦与粘滞摩擦的平衡点,上升时间常数反映惯量大小。
  2. 减速测试法:让电机以一定速度自由滑行,记录速度衰减曲线,拟合得到 B 和 f_c。
  3. 扫频辨识:对电机施加不同频率的正弦激励,通过幅频和相频响应拟合传递函数,适合更精确的模型。

在实际STM32项目中,动力学参数主要用于前馈控制。例如在速度环中,如果已知期望加速度 α_des,可以提前计算所需力矩 τ_ff = I·α_des + B·ω_des + f_c,作为PID输出的前馈补偿,显著减小跟踪误差。

注意:动力学参数会随电池电压变化而改变。当电池从8.4V降到7.2V时,电机力矩常数会下降约15%,导致同样的PWM产生的实际力矩减小。因此,在固件中应建立电压-力矩补偿表,或实时监测电压并修正前馈项。

3.3 传感器模型:从物理量到数字信号的映射

传感器模型描述的是物理世界真实值与传感器输出数字量之间的数学关系。对于STM32机器人常用的传感器,包括增量式编码器、IMU(加速度计+陀螺仪)、激光雷达、超声波等,每个传感器都有其独特的误差特性。

传感器模型通用形式: y = s·x + b + n,其中 s 为尺度因子(scale factor),b 为零偏(bias),n 为随机噪声(通常假设为高斯白噪声,方差 σ²)。对于编码器,s 取决于线数和减速比,b 通常为零;对于IMU陀螺仪,b 会随温度和时间漂移,需要定期校准;对于超声波传感器,s 受声速影响(温度每变化10°C,声速变化约6%)。

参数识别与更新策略:

  • 零偏 b:静止采集1000个样本取平均,即可得到陀螺仪零偏。每次上电后应重新校准。
  • 尺度因子 s:通过已知旋转角度或距离对比标定。例如旋转机器人90°,对比陀螺仪积分值,修正尺度因子。
  • 噪声方差 σ²:通过艾伦方差(Allan Variance)分析,确定随机游走和零偏不稳定性的量级,用于卡尔曼滤波器的R矩阵设置。
  • 时延 τ:传感器数据从物理事件发生到STM32读取到数据的时间差,在融合多传感器时至关重要。

3.4 参数识别与固件版本管理的协同策略

明确了三类模型的参数后,需要建立一套完整的参数管理机制。在STM32机器人项目中,建议采用以下分层策略:

参数类别 典型参数 变化频率 存储位置 更新方式
固定结构参数 轮距L、减速比n、编码器线数N 几乎不变 Flash固定区 固件升级时更新
磨损/环境参数 轮半径r、粘滞摩擦B、库仑摩擦fc 数周~数月 Flash可写区 定期校准命令
上电漂移参数 陀螺仪零偏b、加速度计零偏 每次上电 RAM 上电自动校准
实时变化参数 电池电压补偿系数、负载力矩 秒级 RAM 在线估计/查表

这种分层策略的核心思想是:将参数按变化频率分类,采用不同的存储和更新机制。固定结构参数随固件版本发布,磨损参数通过校准流程更新,漂移参数上电自动处理,实时参数在线估计。这样既保证了参数的正确性,又避免了频繁烧录固件。

案例闭环:两轮差速机器人直线跑偏问题
某项目使用STM32F407控制两轮差速底盘,出现以下现象:机器人以0.5m/s速度直线行驶10米后,横向偏移达0.35米,且每次偏移方向一致。
初步分析:编码器读数显示左右轮累计脉冲数几乎相同(差异<0.1%),但实际轨迹明显偏右。排除编码器故障后,怀疑是运动学参数不准确。
关键数据:标称轮距L=0.30m,标称轮半径r=0.0325m。通过直线行驶5米实测,左轮编码器累计脉冲N_L=12500,右轮N_R=12480,实际位移4.92m。
分析判断:左右轮脉冲差异仅0.16%,不足以造成0.35m偏移。进一步检查发现,轮胎实际有效半径因磨损存在差异:左轮r_L=0.0322m,右轮r_R=0.0328m(差异1.8%)。这导致左右轮实际线速度不同,机器人走弧线。
操作步骤:① 使用激光测距仪测量机器人行驶5米的实际位移,反推平均半径;② 分别测量左右轮在10圈内的实际位移,计算各自有效半径;③ 通过串口发送 SET_KIN R_L=0.0322 R_R=0.0328 更新参数;④ 重新进行直线测试。
结果对比:更新参数后,同样行驶10米,横向偏移降至0.03米以内,改善超过90%。
风险与代价:手动测量存在±0.5mm误差,对半径修正精度有限。更精确的方法是使用编码器与外部运动捕捉系统联合标定,但成本较高。
复盘经验:运动学参数不是永久不变的,轮胎磨损、胎压变化都会影响有效半径。建议在固件中加入定期校准提醒,或通过IMU航向角与编码器推算航向角的长期对比,自动检测参数漂移。

3.5 常见误区与总结

在参数识别与更新过程中,工程师常犯以下错误:

  • 误区一:直接使用数据手册参数。手册中的轮径、减速比是标称值,实际安装后偏差可达3%~5%,必须实测校准。
  • 误区二:忽略温度对传感器的影响。IMU零偏随温度变化明显,若在25°C校准后直接到0°C环境运行,航向角漂移会显著增大。
  • 误区三:所有参数都存Flash。频繁擦写Flash会缩短寿命(STM32 Flash擦写寿命约1万次),应将上电漂移参数放在RAM中。
  • 误区四:参数更新后不验证。修改参数后必须进行闭环验证,确认性能改善而非恶化。

总结而言,机器人模型参数识别是一个持续迭代的过程。运动学参数决定“走得准不准”,动力学参数决定“跑得稳不稳”,传感器参数决定“看得清不清”。在STM32固件架构中,建议将参数管理模块独立出来,支持运行时读写、版本标记和回滚功能,这样才能在复杂项目中保持系统的可维护性和可演进性。