3. 机器人系统建模
在机器人状态估计中,建模是第一步,也是决定后续滤波效果上限的关键。EKF 并不是“凭空估计”机器人位姿,它依赖两个基本模型:描述机器人如何随时间演化的运动模型,以及描述传感器如何观测状态的观测模型。本节围绕状态空间表示,把连续时间系统与离散时间系统串联起来,为后续 EKF 的预测与更新建立统一框架。
一、状态空间表示:把机器人“压缩”成状态向量
状态空间表示的核心思想是:用一组有限维变量描述系统当前的全部内部信息,使未来演化只依赖当前状态和输入,而不需要更早的历史。对移动机器人而言,最常见的状态向量包括二维平面位姿与速度:
x = [px, py, theta, v, omega]^T
其中 px、py 为位置,theta 为航向角,v 为线速度,omega 为角速度。若使用 IMU 估计姿态,还可加入陀螺仪零偏;若使用视觉惯性系统,状态维度会进一步扩展。状态空间表示的价值在于:它把“机器人现在处于什么情况”变成一个向量,把“机器人如何变化”变成函数,把“传感器看到什么”变成另一个函数。
二、运动模型:从连续微分方程到离散递推
运动模型描述状态随时间的演化。以差速机器人为例,连续时间运动学可写为:
px_dot = v * cos(theta)
py_dot = v * sin(theta)
theta_dot = omega
这是典型的非线性连续时间系统。EKF 在计算机中运行,必须把它离散化。若控制周期为 dt,并假设 v、omega 在周期内近似恒定,则离散运动模型为:
px_k = px_{k-1} + v * dt * cos(theta_{k-1})
py_k = py_{k-1} + v * dt * sin(theta_{k-1})
theta_k = theta_{k-1} + omega * dt
该模型直接用于 EKF 预测步。需要注意的是,真实机器人还存在轮子打滑、地面不平、标定误差等,因此过程噪声 Q 必须反映这些不确定性。若把 Q 设得过小,滤波器会过度自信,导致观测被忽略;设得过大,则估计会抖动。
三、观测模型:把状态映射到传感器读数
观测模型 h(x) 描述“如果机器人处于状态 x,传感器应该看到什么”。不同传感器对应不同观测模型。例如,激光雷达观测到某个路标距离与方位角时,观测方程可写为:
r = sqrt((mx - px)^2 + (my - py)^2)
phi = atan2(my - py, mx - px) - theta
其中 (mx, my) 是已知路标坐标。若使用 GPS,则观测模型可能直接观测 px、py;若使用轮式里程计,则观测模型可能观测 v、omega。观测模型越接近真实物理关系,EKF 的更新步就越可靠。
四、连续与离散时间系统:为什么必须离散化
连续时间模型描述的是物理世界的真实演化,但机器人控制器和 EKF 都在数字计算机上运行,只能处理离散时刻的数据。因此,连续模型必须通过积分或近似离散化。常见方法包括欧拉法、中点法、龙格-库塔法。对于小周期、低速机器人,欧拉法通常足够;对于高速或高动态场景,应使用更高阶方法或直接采用离散运动学模型。
| 模型类型 | 数学形式 | 典型用途 | 注意事项 |
|---|---|---|---|
| 连续运动模型 | ẋ = f(x,u) + w | 物理推导、仿真建模 | 需离散化后才能用于 EKF |
| 离散运动模型 | x_k = f(x_{k-1},u) + w | EKF 预测步 | dt 必须与传感器周期匹配 |
| 连续观测模型 | z = h(x) + v | 传感器物理关系描述 | 注意观测维度与状态维度关系 |
| 离散观测模型 | z_k = h(x_k) + v | EKF 更新步 | 需计算雅可比 H |
五、案例:差速机器人 EKF 建模流程
假设机器人以 20 Hz 运行 EKF,激光雷达以 10 Hz 提供路标观测。建模流程如下:
- 定义状态向量 x = [px, py, theta, v, omega]^T。
- 根据差速运动学写出连续运动模型,并用 dt = 0.05 s 离散化。
- 根据激光路标观测写出观测模型 h(x),并计算雅可比 H。
- 设置过程噪声 Q 与观测噪声 R,Q 反映打滑与模型误差,R 反映测距与测角误差。
- 在每个 EKF 周期执行预测;当激光数据到达时执行更新。
dt = 0.05
x_pred = [px + v*dt*cos(theta),
py + v*dt*sin(theta),
theta + omega*dt,
v,
omega]
F = [[1, 0, -v*dt*sin(theta), dt*cos(theta), 0],
[0, 1, v*dt*cos(theta), dt*sin(theta), 0],
[0, 0, 1, 0, dt],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]]
P_pred = F @ P @ F.T + Q
六、常见误区与复盘
- 误区一:把连续模型直接塞进离散 EKF。 必须明确 dt 和离散化方法,否则预测步会系统性偏移。
- 误区二:忽略角度周期性。 theta 的差值应归一化到 [-π, π],否则航向更新会出现跳变。
- 误区三:Q 和 R 随意设置。 Q 过小导致滤波器“自信过头”,R 过小导致观测噪声被放大。
- 误区四:观测模型坐标系不一致。 激光观测通常位于机器人坐标系,而状态位于世界坐标系,必须统一。
复盘时可以用一句话检查建模是否完整:状态向量是否包含所有影响观测的量?运动模型是否描述了状态如何随控制输入变化?观测模型是否把状态正确映射到传感器读数?连续模型是否已正确离散化?只要这四个问题都能回答清楚,EKF 的预测与更新就有了可靠基础。