双舵轮AGV运动学状态方程推导

一、模型假设与符号定义
  1. 车体坐标系

    • 车体质心为原点 ( O ) (O) (O) ( x ) (x) (x) 轴指向前进方向, ( y ) (y) (y) 轴垂直向左,构成右手坐标系。
    • 舵轮安装位置:舵轮1在 ( ( a , b ) ) ((a, b)) ((a,b)),舵轮2在 ( ( − a , − b ) ) ((-a, -b)) ((a,b))(典型对角安装时 ( a = b ) (a = b) (a=b))。
    • 舵轮间距(对角距离): ( L = ( 2 a ) 2 + ( 2 b ) 2 ) (L = \sqrt{(2a)^2 + (2b)^2}) (L=(2a)2+(2b)2 )
  2. 状态变量

    • 车体位置: ( x , y ) (x, y) (x,y)(全局坐标系)。
    • 车体航向角: ( θ ) (\theta) (θ)(相对于全局坐标系 ( x ) (x) (x) 轴)。
  3. 控制输入

    • 舵轮1线速度 ( v 1 ) (v_1) (v1) 和转向角 ( α 1 ) (\alpha_1) (α1)
    • 舵轮2线速度 ( v 2 ) (v_2) (v2) 和转向角 ( α 2 ) (\alpha_2) (α2)

二、运动学分析

每个舵轮的线速度在车体坐标系下的分量为:
{ v 1 x = v 1 cos ⁡ α 1 , v 1 y = v 1 sin ⁡ α 1 , { v 2 x = v 2 cos ⁡ α 2 , v 2 y = v 2 sin ⁡ α 2 . \begin{cases} v_{1x} = v_1 \cos\alpha_1, \\ v_{1y} = v_1 \sin\alpha_1, \end{cases} \quad \begin{cases} v_{2x} = v_2 \cos\alpha_2, \\ v_{2y} = v_2 \sin\alpha_2. \end{cases} {v1x=v1cosα1,v1y=v1sinα1,{v2x=v2cosα2,v2y=v2sinα2.

车体整体运动

  • 车体线速度由两舵轮速度的合力决定:
    v x = v 1 x + v 2 x 2 , v y = v 1 y + v 2 y 2 . v_x = \frac{v_{1x} + v_{2x}}{2}, \quad v_y = \frac{v_{1y} + v_{2y}}{2}. vx=2v1x+v2x,vy=2v1y+v2y.
  • 车体角速度由两舵轮产生的力矩差决定:
    ω = ( v 1 y ⋅ a − v 1 x ⋅ b ) + ( v 2 y ⋅ ( − a ) − v 2 x ⋅ ( − b ) ) I , \omega = \frac{(v_{1y} \cdot a - v_{1x} \cdot b) + (v_{2y} \cdot (-a) - v_{2x} \cdot (-b))}{I}, ω=I(v1yav1xb)+(v2y(a)v2x(b)),
    其中 ( I ) (I) (I) 为车体转动惯量。
    简化处理:忽略动力学影响(如转动惯量),直接通过几何关系近似计算:
    ω = v 1 sin ⁡ α 1 − v 2 sin ⁡ α 2 L . \omega = \frac{v_1 \sin\alpha_1 - v_2 \sin\alpha_2}{L}. ω=Lv1sinα1v2sinα2.

三、状态方程推导

1. 全局坐标系下的运动关系
车体速度在全局坐标系下的投影:
{ x ˙ = v x cos ⁡ θ − v y sin ⁡ θ , y ˙ = v x sin ⁡ θ + v y cos ⁡ θ , θ ˙ = ω . \begin{cases} \dot{x} = v_x \cos\theta - v_y \sin\theta, \\ \dot{y} = v_x \sin\theta + v_y \cos\theta, \\ \dot{\theta} = \omega. \end{cases} x˙=vxcosθvysinθ,y˙=vxsinθ+vycosθ,θ˙=ω.

2. 代入舵轮控制输入
( v x , v y , ω ) (v_x, v_y, \omega) (vx,vy,ω) 替换为舵轮参数表达式:
{ x ˙ = ( v 1 cos ⁡ α 1 + v 2 cos ⁡ α 2 2 ) cos ⁡ θ − ( v 1 sin ⁡ α 1 + v 2 sin ⁡ α 2 2 ) sin ⁡ θ , y ˙ = ( v 1 cos ⁡ α 1 + v 2 cos ⁡ α 2 2 ) sin ⁡ θ + ( v 1 sin ⁡ α 1 + v 2 sin ⁡ α 2 2 ) cos ⁡ θ , θ ˙ = v 1 sin ⁡ α 1 − v 2 sin ⁡ α 2 L . \begin{cases} \dot{x} = \left(\frac{v_1 \cos\alpha_1 + v_2 \cos\alpha_2}{2}\right) \cos\theta - \left(\frac{v_1 \sin\alpha_1 + v_2 \sin\alpha_2}{2}\right) \sin\theta, \\ \dot{y} = \left(\frac{v_1 \cos\alpha_1 + v_2 \cos\alpha_2}{2}\right) \sin\theta + \left(\frac{v_1 \sin\alpha_1 + v_2 \sin\alpha_2}{2}\right) \cos\theta, \\ \dot{\theta} = \frac{v_1 \sin\alpha_1 - v_2 \sin\alpha_2}{L}. \end{cases} x˙=(2v1cosα1+v2cosα2)cosθ(2v1sinα1+v2sinα2)sinθ,y˙=(2v1cosα1+v2cosα2)sinθ+(2v1sinα1+v2sinα2)cosθ,θ˙=Lv1sinα1v2sinα2.


四、状态方程简化(车体坐标系)

若在车体坐标系下分析(无需全局坐标旋转),状态方程为:
{ x ˙ b = v 1 cos ⁡ α 1 + v 2 cos ⁡ α 2 2 , y ˙ b = v 1 sin ⁡ α 1 + v 2 sin ⁡ α 2 2 , θ ˙ = v 1 sin ⁡ α 1 − v 2 sin ⁡ α 2 L . \begin{cases} \dot{x}_b = \frac{v_1 \cos\alpha_1 + v_2 \cos\alpha_2}{2}, \\ \dot{y}_b = \frac{v_1 \sin\alpha_1 + v_2 \sin\alpha_2}{2}, \\ \dot{\theta} = \frac{v_1 \sin\alpha_1 - v_2 \sin\alpha_2}{L}. \end{cases} x˙b=2v1cosα1+v2cosα2,y˙b=2v1sinα1+v2sinα2,θ˙=Lv1sinα1v2sinα2.
说明

  • ( x b , y b ) (x_b, y_b) (xb,yb) 为车体坐标系下的位置,若需全局坐标,需通过旋转矩阵转换。
  • 该模型适用于实时控制设计(如MPC),直接关联舵轮输入与车体运动。

五、方程验证

1. 纯平移运动
( α 1 = α 2 = 0 ) (\alpha_1 = \alpha_2 = 0) (α1=α2=0), ( v 1 = v 2 = v ) (v_1 = v_2 = v) (v1=v2=v)
x ˙ b = v , y ˙ b = 0 , θ ˙ = 0. \dot{x}_b = v, \quad \dot{y}_b = 0, \quad \dot{\theta} = 0. x˙b=v,y˙b=0,θ˙=0.
车体沿 ( x b ) (x_b) (xb) 轴直线运动。

2. 纯旋转运动
( α 1 = 9 0 ∘ ) (\alpha_1 = 90^\circ) (α1=90), ( α 2 = − 9 0 ∘ ) (\alpha_2 = -90^\circ) (α2=90), ( v 1 = v 2 = v ) (v_1 = v_2 = v) (v1=v2=v)
x ˙ b = 0 , y ˙ b = 0 , θ ˙ = v − ( − v ) L = 2 v L . \dot{x}_b = 0, \quad \dot{y}_b = 0, \quad \dot{\theta} = \frac{v - (-v)}{L} = \frac{2v}{L}. x˙b=0,y˙b=0,θ˙=Lv(v)=L2v.
车体绕质心旋转,符合预期。


六、应用示例(C++代码片段)
#include <Eigen/Dense>

// 状态变量:x, y, theta
using State = Eigen::Vector3d;
// 控制输入:v1, alpha1, v2, alpha2
using Control = Eigen::Vector4d;

// 状态方程(车体坐标系)
State stateEquation(const State& state, const Control& u, double L) {
    double v1 = u[0], alpha1 = u[1];
    double v2 = u[2], alpha2 = u[3];
    
    double vx = (v1 * cos(alpha1) + v2 * cos(alpha2)) / 2.0;
    double vy = (v1 * sin(alpha1) + v2 * sin(alpha2)) / 2.0;
    double omega = (v1 * sin(alpha1) - v2 * sin(alpha2)) / L;
    
    State dstate;
    dstate << vx, vy, omega;
    return dstate;
}

七、总结
  • 状态方程
    { x ˙ b = v 1 cos ⁡ α 1 + v 2 cos ⁡ α 2 2 , y ˙ b = v 1 sin ⁡ α 1 + v 2 sin ⁡ α 2 2 , θ ˙ = v 1 sin ⁡ α 1 − v 2 sin ⁡ α 2 L . \begin{cases} \dot{x}_b = \frac{v_1 \cos\alpha_1 + v_2 \cos\alpha_2}{2}, \\ \dot{y}_b = \frac{v_1 \sin\alpha_1 + v_2 \sin\alpha_2}{2}, \\ \dot{\theta} = \frac{v_1 \sin\alpha_1 - v_2 \sin\alpha_2}{L}. \end{cases} x˙b=2v1cosα1+v2cosα2,y˙b=2v1sinα1+v2sinα2,θ˙=Lv1sinα1v2sinα2.
  • 适用场景:模型预测控制(MPC)、路径跟踪、动态轨迹规划。
  • 扩展方向:引入动力学补偿(如摩擦、惯性)提升高速运动精度。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐