小车模型——双舵轮的状态方程
车体坐标系车体质心为原点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 = ( 2 a ) 2 + ( 2 b ) 2 ) (L = \sqrt{(2a)^2 + (2b)^2}) (L=(2a)2+(2b)2)。
-
状态变量:
- 车体位置: ( x , y ) (x, y) (x,y)(全局坐标系)。
- 车体航向角: ( θ ) (\theta) (θ)(相对于全局坐标系 ( x ) (x) (x) 轴)。
-
控制输入:
- 舵轮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(v1y⋅a−v1x⋅b)+(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α1−v2sinα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α1−v2sinα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α1−v2sinα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α1−v2sinα2. - 适用场景:模型预测控制(MPC)、路径跟踪、动态轨迹规划。
- 扩展方向:引入动力学补偿(如摩擦、惯性)提升高速运动精度。
更多推荐
所有评论(0)