四轮移动机器人(小车)数学建模

写在前面:
  好快啊转眼间就研二了,最近自己的第二篇SCI理论工作也快完成了,在整理笔记的时候突然想起自己自从本科做智能车之后好久都没更新自己的CSDN博客了,因此新开一个专栏用于记录自己做项目和发文章的过程中学习的理论知识,博主目前的研究方向为机器人的决策规划与强化学习,欢迎大家交流分享。由于当时研一学习的时候是从机器人的建模开始的,因此这里也从机器人建模开始吧。顺便附带一个专栏目录传送门:

理论笔记专栏目录

  好了介绍结束下面开始进入正题:

1 非线性模型推导

​   在各种基于模型的控制方法中,例如MPC,均需要对控制对象建模以便于后续的分析与编程。所谓建模就是将现实中的机器人模型抽象为可用于编程参考的离散状态空间表达式: x ( k + 1 ) = A x ( k ) + B u ( k ) \boldsymbol x_{(k+1)}=A\boldsymbol x_{(k)}+B\boldsymbol u_{(k)} x(k+1)=Ax(k)+Bu(k),其中 x \boldsymbol x x为机器人的状态向量, u \boldsymbol u u为输入控制向量, A A A为状态矩阵, B B B为控制矩阵,下标 k k k表示时刻。

​   由于研究项目以四轮机器人为主,因此本节建模分析对象选取为四轮机器人,四轮机器人在世界坐标系 ( X O Y ) (XOY) XOY下的建模简图如下所示:
四轮移动机器人(小车)数学建模_第1张图片

  首先确定机器人的状态量和输入量:仅考虑机器人的平面运动,一般选取机器人的后轴中心坐标以及车辆航向角为状态变量,即: x = [ x , y , φ ] T \boldsymbol x=[x,y,\varphi]^T x=[x,y,φ]T,一般我们是通过控制机器人的速度以及转角来控制机器人的运动,因此选取前进速度 v v v和转角 δ \delta δ作为输入控制向量,即: u = [ v , δ ] T \boldsymbol u=[v,\delta]^T u=[v,δ]T

​   再来确定 x ˙ \dot {\boldsymbol x} x˙ x \boldsymbol x x u \boldsymbol u u的关系,在图中由简单的几何关系可推出:
{ v = v f c o s δ v φ = v f s i n δ ⇒ v φ = v t a n δ \begin{cases} v=v_fcos\delta \\ v_\varphi=v_fsin\delta \end{cases} \Rightarrow v_\varphi=vtan\delta {v=vfcosδvφ=vfsinδvφ=vtanδ
​ 因此有:
{ x ˙ = v c o s φ y ˙ = v s i n φ φ ˙ = v φ / L = v t a n δ / L ⇒ x ˙ = f ( x , u ) \begin{cases} \dot x=vcos\varphi \\ \dot y=vsin\varphi \\ \dot \varphi=v_\varphi/L=vtan\delta/L \end{cases} \Rightarrow \dot{\boldsymbol x}=f(\boldsymbol x,\boldsymbol u) x˙=vcosφy˙=vsinφφ˙=vφ/L=vtanδ/Lx˙=f(x,u)
​ 至此就得到了机器人的非线性模型 x ˙ = f ( x , u ) \dot{\boldsymbol x}=f(\boldsymbol x,\boldsymbol u) x˙=f(x,u)

2 模型线性化

​   下面来试着将非线性模型 x ˙ = f ( x , u ) \dot{\boldsymbol x}=f(\boldsymbol x,\boldsymbol u) x˙=f(x,u)化为(近似为)线性模型 x ˙ = A x + B u \dot{\boldsymbol x}=A\boldsymbol x+B\boldsymbol u x˙=Ax+Bu,先将 f f f在参考(目标)状态 x r \boldsymbol x_r xr与参考输入 u r \boldsymbol u_r ur处进行一阶泰勒展开:
x ˙ = f ( x , u ) ≈ f ( x r , u r ) + ∂ f ∂ x ∣ ( x r , u r ) ( x − x r ) + ∂ f ∂ u ∣ ( x r , u r ) ( u − u r ) \dot{\boldsymbol x} =f(\boldsymbol x,\boldsymbol u) \approx f(\boldsymbol x_r,\boldsymbol u_r) +\frac{\partial f}{\partial \boldsymbol x}|_{(x_r,u_r)}(\boldsymbol x-\boldsymbol x_r) +\frac{\partial f}{\partial \boldsymbol u}|_{(x_r,u_r)}(\boldsymbol u-\boldsymbol u_r) x˙=f(x,u)f(xr,ur)+xf(xr,ur)(xxr)+uf(xr,ur)(uur)
​   可见非线性模型 x ˙ = f ( x , u ) \dot{\boldsymbol x}=f(\boldsymbol x,\boldsymbol u) x˙=f(x,u)无法化为(近似为)线性模型 x ˙ = A x + B u \dot{\boldsymbol x}=A\boldsymbol x+B\boldsymbol u x˙=Ax+Bu,但我们可以令其误差通过泰勒展开近似为线性模型,即 x e ˙ = A x e + B u e \dot{\boldsymbol x_e}=A\boldsymbol x_e+B\boldsymbol u_e xe˙=Axe+Bue,其中 x e = x − x r \boldsymbol x_e=\boldsymbol x-\boldsymbol x_r xe=xxr表示状态误差向量, u e = u − u r \boldsymbol u_e=\boldsymbol u-\boldsymbol u_r ue=uur表示输入误差向量,由此可得:
x e ˙ = x ˙ − x r ˙ = f ( x , u ) − f ( x r , u r ) = ∂ f ∂ x ∣ ( x r , u r ) ( x − x r ) + ∂ f ∂ u ∣ ( x r , u r ) ( u − u r ) = ∂ f ∂ x ∣ ( x r , u r ) x e + ∂ f ∂ u ∣ ( x r , u r ) u e = A x e + B u e \dot{\boldsymbol x_e}=\dot{\boldsymbol x}-\dot{\boldsymbol x_r}=f(\boldsymbol x,\boldsymbol u)-f(\boldsymbol x_r,\boldsymbol u_r) =\frac{\partial f}{\partial \boldsymbol x}|_{(x_r,u_r)}(\boldsymbol x-\boldsymbol x_r)+\frac{\partial f}{\partial \boldsymbol u}|_{(x_r,u_r)}(\boldsymbol u-\boldsymbol u_r) \\ =\frac{\partial f}{\partial \boldsymbol x}|_{(x_r,u_r)}\boldsymbol x_e+\frac{\partial f}{\partial \boldsymbol u}|_{(x_r,u_r)}\boldsymbol u_e =A\boldsymbol x_e+B\boldsymbol u_e xe˙=x˙xr˙=f(x,u)f(xr,ur)=xf(xr,ur)(xxr)+uf(xr,ur)(uur)=xf(xr,ur)xe+uf(xr,ur)ue=Axe+Bue
​ 其中:
A = ∂ f ∂ x ∣ ( x r , u r ) = [ ∂ f 1 ∂ x ∂ f 1 ∂ y ∂ f 1 ∂ φ ∂ f 2 ∂ x ∂ f 2 ∂ y ∂ f 2 ∂ φ ∂ f 3 ∂ x ∂ f 3 ∂ y ∂ f 3 ∂ φ ] = [ 0 0 − v r s i n φ r 0 0 v r c o s φ r 0 0 0 ] B = ∂ f ∂ u ∣ ( x r , u r ) = [ ∂ f 1 ∂ v ∂ f 1 ∂ δ ∂ f 2 ∂ v ∂ f 2 ∂ δ ∂ f 3 ∂ v ∂ f 3 ∂ δ ] = [ c o s φ r 0 s i n φ r 0 t a n δ r / L v r s e c 2 δ r / L ] A=\frac{\partial f}{\partial \boldsymbol x}|_{(x_r,u_r)} =\begin{bmatrix}\frac{\partial f_1}{\partial x} &\frac{\partial f_1}{\partial y} &\frac{\partial f_1}{\partial \varphi} \\ \frac{\partial f_2}{\partial x} &\frac{\partial f_2}{\partial y} &\frac{\partial f_2}{\partial \varphi} \\ \frac{\partial f_3}{\partial x} &\frac{\partial f_3}{\partial y} &\frac{\partial f_3}{\partial \varphi} \end{bmatrix} =\begin{bmatrix} 0 &0 &-v_rsin\varphi_r \\ 0 &0 &v_rcos\varphi_r \\ 0 &0 &0 \end{bmatrix} \\ B=\frac{\partial f}{\partial \boldsymbol u}|_{(x_r,u_r)} =\begin{bmatrix}\frac{\partial f_1}{\partial v} &\frac{\partial f_1}{\partial \delta} \\ \frac{\partial f_2}{\partial v} &\frac{\partial f_2}{\partial \delta} \\ \frac{\partial f_3}{\partial v} &\frac{\partial f_3}{\partial \delta} \end{bmatrix} =\begin{bmatrix} cos\varphi_r &0 \\ sin\varphi_r &0 \\ tan\delta_r/L &v_rsec^2\delta_r/L \end{bmatrix} A=xf(xr,ur)=xf1xf2xf3yf1yf2yf3φf1φf2φf3=000000vrsinφrvrcosφr0B=uf(xr,ur)=vf1vf2vf3δf1δf2δf3=cosφrsinφrtanδr/L00vrsec2δr/L
​ 至此就得到了机器人的误差线性模型 x e ˙ = A x e + B u e \dot{\boldsymbol x_e}=A\boldsymbol x_e+B\boldsymbol u_e xe˙=Axe+Bue

3 模型离散化

​   最后再将线性模型 x e ˙ = A x e + B u e \dot{\boldsymbol x_e}=A\boldsymbol x_e+B\boldsymbol u_e xe˙=Axe+Bue离散化为 x e ( k + 1 ) = A ′ x e ( k ) + B ′ u e ( k ) \boldsymbol x_{e(k+1)}=A'\boldsymbol x_{e(k)}+B'\boldsymbol u_{e(k)} xe(k+1)=Axe(k)+Bue(k),即可用于后续的算法分析与编程。假设采样间隔为 T T T,利用前项欧拉法进行离散化,有:
x e ˙ = x e ( k + 1 ) − x e ( k ) T = A x e ( k ) + B u e ( k ) \dot{\boldsymbol x_e}=\frac{x_{e(k+1)}-x_{e(k)}}{T}=Ax_{e(k)}+Bu_{e(k)} xe˙=Txe(k+1)xe(k)=Axe(k)+Bue(k)

​ 上式整理即得:
x e ( k + 1 ) = ( I + T A ) x e ( k ) + T B u e ( k ) = A ′ x e ( k ) + B ′ u e ( k ) x_{e(k+1)}=(I+TA)x_{e(k)}+TBu_{e(k)}=A'x_{e(k)}+B'u_{e(k)} xe(k+1)=(I+TA)xe(k)+TBue(k)=Axe(k)+Bue(k)
​ 其中:
A ′ = I + T A = [ 1 0 − T v r s i n φ r 0 1 T v r c o s φ r 0 0 1 ] B ′ = T B = [ T c o s φ r 0 T s i n φ r 0 T t a n δ r / L T v r s e c 2 δ r / L ] A'=I+TA=\begin{bmatrix} 1 &0 &-Tv_rsin\varphi_r \\ 0 &1 &Tv_rcos\varphi_r \\ 0 &0 &1 \end{bmatrix} \\ B'=TB=\begin{bmatrix} Tcos\varphi_r &0 \\ Tsin\varphi_r &0 \\ Ttan\delta_r/L &Tv_rsec^2\delta_r/L \end{bmatrix} A=I+TA=100010TvrsinφrTvrcosφr1B=TB=TcosφrTsinφrTtanδr/L00Tvrsec2δr/L
​ 至此就得到了机器人的误差线性离散模型 x e ( k + 1 ) = A ′ x e ( k ) + B ′ u e ( k ) \boldsymbol x_{e(k+1)}=A'\boldsymbol x_{e(k)}+B'\boldsymbol u_{e(k)} xe(k+1)=Axe(k)+Bue(k)

你可能感兴趣的:(理论笔记,机器人)