好的,我们来深入探讨机器人运动模型的原理和解析。这是机器人学中最核心和基础的概念之一。

一、核心思想:为什么要建立运动模型?

机器人运动模型的核心目的是:​描述机器人的运动如何影响其状态(尤其是位置和姿态)的变化。​​

简单来说,它要回答一个问题:

  • ​已知​:
    1. 机器人上一时刻的状态​(例如:位置 (x, y) 和朝向 θ)
    2. 在上一时刻到当前时刻之间收到的控制指令​(例如:轮子的转速 (v, ω) 或移动距离 d)
  • ​求​:
    • 机器人当前时刻的状态是多少?

运动模型建立了控制量与状态量之间的数学关系。它是进行状态估计​(如卡尔曼滤波)、路径规划和控制的基础。


二、运动模型的分类

根据机器人的运动方式和控制指令的不同,运动模型主要分为两类:

1. 速度模型 (Velocity-based Model)
  • ​控制输入​:通常是线速度 v​ 和角速度 ω。
  • ​适用对象​:差速驱动机器人(如Turtlebot)、阿克曼转向汽车模型(在瞬时也可近似为以某半径转弯)、全向移动机器人。
  • ​特点​:这是最常用和基础的模型。
2. 里程计模型 (Odometry-based Model)
  • ​控制输入​:通常是两个相邻时刻间机器人相对自身坐标系的运动量,例如:(Δx, Δy, Δθ) 或 (Δs, Δθ)(移动的距离和旋转的角度)。
  • ​来源​:这些数据通常由编码器等内部传感器直接测量得到,因此被称为“里程计”信息。
  • ​特点​:这不是一个“原理模型”,而是一个“测量模型”。它更直接,但依赖于内部传感器的精度,容易因轮子打滑、磨损等产生累积误差(漂移)。

​关系​:里程计信息本质上是由速度在时间上积分得到的。在实践中,我们通常使用里程计模型,因为它更直观且易于从机器人硬件获取。


三、原理与解析:以差速驱动机器人为例

我们以最常见的差速驱动机器人为例,详细解析其基于速度的运动模型。

1. 假设与定义
  • ​状态​:在二维平面 (x-y 平面) 上运动的机器人,其状态用位姿表示:[x, y, θ]^T
    • (x, y):机器人在世界坐标系下的坐标。
    • θ:机器人的朝向(偏航角),即前进方向与世界坐标系x轴的夹角。
  • ​控制输入​:在时间间隔 [t, t+Δt] 内,我们施加恒定的线速度 v 和角速度 ω。
  • ​假设​:
    1. 机器人是刚体。
    2. 机器人只在平面内运动,​没有Z轴移动或倾斜。
    3. 机器人运动时,​轮子与地面之间是纯滚动,无滑动​(这是一个理想假设,实际中很难满足)。
2. 运动学推导

我们需要推导出经过 Δt 时间后,机器人的新状态 [x', y', θ']^T。

​情况一:角速度为零(直线运动)​​
这是最简单的情况。如果 ω = 0,机器人沿直线 θ 方向前进。

  • θ' = θ (朝向不变)
  • x' = x + v * cos(θ) * Δt
  • y' = y + v * sin(θ) * Δt

​情况二:角速度不为零(圆弧运动)​​
当 ω ≠ 0 时,机器人做圆弧运动。其运动轨迹的瞬时转弯半径 R = v / ω。

flowchart LR A[上一时刻状态
xt, yt, θt] --> B{收到控制指令 vt, ωt}; B --> C{ωt == 0?}; C -- 是 --> D[直线模型]; D --> E[计算新状态
xt+1 = xt + vt*cosθt*Δt
yt+1 = yt + vt*sinθt*Δt
θt+1 = θt]; C -- 否 --> F[圆弧模型]; F --> G[计算新状态
θt+1 = θt + ωt*Δt
xt+1 = xt + vt/ωt * sinθt+1 - sinθt
yt+1 = yt - vt/ωt * cosθt+1 - cosθt]; E --> H[当前时刻状态
xt+1, yt+1, θt+1]; G --> H;

其运动轨迹是一个圆心在 (x - R*sinθ, y + R*cosθ),半径为 R 的圆。

经过 Δt 时间后,机器人转过角度 Δθ = ω * Δt。我们可以通过几何关系计算机器人中心点的位移。

  • ​朝向变化​:θ' = θ + ω * Δt
  • ​位置变化​:机器人的运动轨迹是一段圆弧,其圆心 (C_x, C_y) 为:
    • C_x = x - (v/ω) * sin(θ)
    • C_y = y + (v/ω) * cos(θ)
      新坐标 (x', y') 可以看作是圆心点加上一个旋转了 Δθ 角度的半径向量:
    • x' = C_x + (v/ω) * sin(θ + ω * Δt) = x + (v/ω) * [sin(θ + ω * Δt) - sin(θ)]
    • y' = C_y - (v/ω) * cos(θ + ω * Δt) = y - (v/ω) * [cos(θ + ω * Δt) - cos(θ)]

​最终的运动模型方程(基于速度)为:​​

​xt+Δt​yt+Δt​θt+Δt​​​=​xt​yt​θt​​​+​ωv​(sin(θt​+ωΔt)−sin(θt​))−ωv​(cos(θt​+ωΔt)−cos(θt​))ωΔt​​

​注意​:当 ω 非常小(接近于零)时,直接使用上述公式会导致数值不稳定。在实际编程中,需要加入判断条件,当 |ω| < ε(一个很小的阈值)时,就采用直线运动模型,以避免除以零的错误。

3. 里程计模型

里程计模型不关心中间过程,它直接使用传感器提供的相对位移量。

假设从时间 t 到 t+Δt,编码器测得机器人相对于自身坐标系的运动为:先旋转 Δθ1,然后平移 Δs,最后再旋转 Δθ2。(这是一个常见的分解方式)。

那么,这个相对运动如何转换到世界坐标系下呢?

  1. ​初始姿态​:(x_t, y_t, θ_t)
  2. ​第一次旋转​:θ' = θ_t + Δθ1
  3. ​平移​:在方向 θ' 上移动 Δs
    • x'' = x_t + Δs * cos(θ')
    • y'' = y_t + Δs * sin(θ')
  4. ​第二次旋转​:θ''' = θ' + Δθ2
  5. ​最终位姿​:(x_{t+Δt}, y_{t+Δt}, θ_{t+Δt}) = (x'', y'', θ''')

这个过程可以写成一个变换矩阵,清晰地展示了如何将局部坐标系的相对运动集成到全局坐标系的状态中。里程计的漂移正是因为将这些带有微小误差的相对运动一次次地积分,导致误差不断累积放大。


四、更复杂的模型:阿克曼转向模型

对于像汽车这样的前轮转向车辆,其运动模型更为复杂,称为阿克曼转向模型。

  • ​状态​:[x, y, θ, v]^T (速度 v 也常作为状态)
  • ​控制输入​:通常是加速度 a​ 和前轮转向角 φ。
  • ​特点​:
    1. 存在非完整约束​(Non-holonomic Constraint):即机器人瞬时运动必须满足的条件,例如汽车不能直接侧向移动。这体现在模型方程中。
    2. 转弯半径 R 与轴距 L(前后轮距离)和转向角 φ 有关:R = L / tan(φ)。
    3. 其微分方程(通常用于模型预测控制MPC等)为: ​x˙y˙​θ˙v˙​​=​v⋅cos(θ)v⋅sin(θ)Lv​tan(φ)a​​ 这个模型说明了状态的变化率与控制输入的关系。

总结

特性速度模型 (差速驱动)里程计模型阿克曼模型
​控制输入​线速度 v, 角速度 ω相对位移 (Δx, Δy, Δθ)加速度 a, 转向角 φ
​原理​基于运动学原理推导基于内部传感器测量数据积分基于几何约束和动力学
​优点​通用性强,反映运动本质实现简单,数据直接可得更接近真实车辆
​缺点​依赖理想假设(无滑动)累积误差大(漂移)模型复杂,存在约束
​主要应用​算法仿真、状态预测滤波器机器人定位(如AMCL中的运动模型)自动驾驶、智能车辆控制

​核心要点​:没有任何一个运动模型能 100% 精确地描述真实世界的运动。所有的模型都是对现实的一种近似。模型误差(由于轮子打滑、地面不平等因素导致)是不可避免的。因此,在机器人定位中,我们永远不会只依赖运动模型,而是必须结合传感器观测模型​(如激光、视觉、GPS),通过滤波器(如卡尔曼滤波、粒子滤波)来修正运动模型预测的状态,从而得到更准确、更可靠的位姿估计。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐