小车模型——双舵轮的状态方程
车体坐标系车体质心为原点O(O)Ox(x)x轴指向前进方向,y(y)y轴垂直向左,构成右手坐标系。舵轮安装位置:舵轮1在ab((a, b))((ab)),舵轮2在−a−b((-a, -b))((−a−b))(典型对角安装时ab(a = b)abL2a22b2L2a22b2。状态变量xy(x, y)xy(全局坐标系)。θ(\theta)θ(相对于全局坐标系x(x)x轴)。控制输入舵轮1线速度v1。
双舵轮AGV运动学状态方程推导
一、模型假设与符号定义
-
车体坐标系:
- 车体质心为原点 (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=(2a)2+(2b)2)(L = \sqrt{(2a)^2 + (2b)^2})(L=(2a)2+(2b)2)。
-
状态变量:
- 车体位置:(x,y)(x, y)(x,y)(全局坐标系)。
- 车体航向角:(θ)(\theta)(θ)(相对于全局坐标系 (x)(x)(x) 轴)。
-
控制输入:
- 舵轮1线速度 (v1)(v_1)(v1) 和转向角 (α1)(\alpha_1)(α1)。
- 舵轮2线速度 (v2)(v_2)(v2) 和转向角 (α2)(\alpha_2)(α2)。
二、运动学分析
每个舵轮的线速度在车体坐标系下的分量为:
{v1x=v1cosα1,v1y=v1sinα1,{v2x=v2cosα2,v2y=v2sinα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.
车体整体运动:
- 车体线速度由两舵轮速度的合力决定:
vx=v1x+v2x2,vy=v1y+v2y2. v_x = \frac{v_{1x} + v_{2x}}{2}, \quad v_y = \frac{v_{1y} + v_{2y}}{2}. vx=2v1x+v2x,vy=2v1y+v2y. - 车体角速度由两舵轮产生的力矩差决定:
ω=(v1y⋅a−v1x⋅b)+(v2y⋅(−a)−v2x⋅(−b))I, \omega = \frac{(v_{1y} \cdot a - v_{1x} \cdot b) + (v_{2y} \cdot (-a) - v_{2x} \cdot (-b))}{I}, ω=I(v1y⋅a−v1x⋅b)+(v2y⋅(−a)−v2x⋅(−b)),
其中 (I)(I)(I) 为车体转动惯量。
简化处理:忽略动力学影响(如转动惯量),直接通过几何关系近似计算:
ω=v1sinα1−v2sinα2L. \omega = \frac{v_1 \sin\alpha_1 - v_2 \sin\alpha_2}{L}. ω=Lv1sinα1−v2sinα2.
三、状态方程推导
1. 全局坐标系下的运动关系
车体速度在全局坐标系下的投影:
{x˙=vxcosθ−vysinθ,y˙=vxsinθ+vycosθ,θ˙=ω. \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. 代入舵轮控制输入
将 (vx,vy,ω)(v_x, v_y, \omega)(vx,vy,ω) 替换为舵轮参数表达式:
{x˙=(v1cosα1+v2cosα22)cosθ−(v1sinα1+v2sinα22)sinθ,y˙=(v1cosα1+v2cosα22)sinθ+(v1sinα1+v2sinα22)cosθ,θ˙=v1sinα1−v2sinα2L. \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α1−v2sinα2.
四、状态方程简化(车体坐标系)
若在车体坐标系下分析(无需全局坐标旋转),状态方程为:
{x˙b=v1cosα1+v2cosα22,y˙b=v1sinα1+v2sinα22,θ˙=v1sinα1−v2sinα2L. \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α1−v2sinα2.
说明:
- (xb,yb)(x_b, y_b)(xb,yb) 为车体坐标系下的位置,若需全局坐标,需通过旋转矩阵转换。
- 该模型适用于实时控制设计(如MPC),直接关联舵轮输入与车体运动。
五、方程验证
1. 纯平移运动
当 (α1=α2=0)(\alpha_1 = \alpha_2 = 0)(α1=α2=0), (v1=v2=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.
车体沿 (xb)(x_b)(xb) 轴直线运动。
2. 纯旋转运动
当 (α1=90∘)(\alpha_1 = 90^\circ)(α1=90∘), (α2=−90∘)(\alpha_2 = -90^\circ)(α2=−90∘), (v1=v2=v)(v_1 = v_2 = v)(v1=v2=v):
x˙b=0,y˙b=0,θ˙=v−(−v)L=2vL. \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=v1cosα1+v2cosα22,y˙b=v1sinα1+v2sinα22,θ˙=v1sinα1−v2sinα2L. \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α1−v2sinα2. - 适用场景:模型预测控制(MPC)、路径跟踪、动态轨迹规划。
- 扩展方向:引入动力学补偿(如摩擦、惯性)提升高速运动精度。
更多推荐
所有评论(0)