首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

无人车系统(一):运动学模型及其线性化

  • 23-07-24 11:52
  • 2028
  • 15894
blog.csdn.net

相对无人机与机械臂来说,无人车系统的运动学模型非常简洁。尽管简洁,无人车的运动学模型也是非线性的。应用于具体控制算法时,有必要对原始运动学模型进行变形或线性化。本篇主要介绍无人车的运动学模型,并对原始非线性模型进行线性化。

1.从阿克曼转向几何模型到自行车模型

汽车采用阿克曼转向轮,因此模型为如下图所示的阿克曼转向几何模型。

在这里插入图片描述

由以上阿克曼转向模型可得进一步简化为车辆单轨模型——自行车模型。

在这里插入图片描述

采用自行车模型的好处是它简化了无人车前轮转向角与曲率之间的几何关系,其关系如下式:

t a n ( δ ) = L R tan(\delta)=\frac{L}{R} tan(δ)=RL​

其中, δ \delta δ为前轮的转向角, L L L为轴距, R R R则为无人车在该转向角下的运动形成圆的半径(曲率的倒数)。

注意:以上公式可以准确估计低速场景下的车辆运动。 但是,对于高速情况,该公式估计的运动与实际无人车运行的情况有一定的差异,这与路面、轮胎材料都有关系。

2. 无人车运动学模型

曲率半径 R R R与角速度 ω \omega ω、速度 v v v有等式: v = ω R v=\omega R v=ωR,可得无人车的运动学模型如下所示:

{ x ˙ = v c o s ( θ ) y ˙ = v s i n ( θ ) θ ˙ = v t a n ( δ ) L } \left\{\begin{matrix} \dot{x}=vcos(\theta) \\ \dot{y}=vsin(\theta) \\ \dot{\theta}=v\frac{tan(\delta)}{L} \end{matrix}\right\} ⎩ ⎨ ⎧​x˙=vcos(θ)y˙​=vsin(θ)θ˙=vLtan(δ)​​⎭ ⎬ ⎫​

其中:
v v v为无人车的速度;
x ˙ \dot{x} x˙为无人车在世界坐标系中X轴方向上的分速度,记为 v x v_{x} vx​;
y ˙ \dot{y} y˙​为无人车在世界坐标系中Y轴方向上的分速度,记为 v y v_{y} vy​;
θ \theta θ为无人车在世界坐标中的航向角;
θ ˙ \dot{\theta} θ˙则为无人车的角速度,可记为 ω \omega ω。

为了突显两个主要控制对象[速度 v v v与角速度 ω \omega ω],对以上无人车运动学模型进行变形,得以下形式:

[ x ˙ y ˙ θ ˙ ] = [ cos ⁡ θ sin ⁡ θ 0 ] v + [ 0 0 1 ] w \left[\begin{array}{c}{\dot{x}} \\ {\dot{y}} \\ {\dot{\theta}}\end{array}\right]=\left[\begin{array}{c}{\cos \theta} \\ {\sin \theta} \\ {0}\end{array}\right] v+\left[\begin{array}{l}{0} \\ {0} \\ {1}\end{array}\right] w ​x˙y˙​θ˙​ ​= ​cosθsinθ0​ ​v+ ​001​ ​w

无人车的速度主要由油门、刹车、以及档位控制;角速度中包含方向盘转向与速度,其中方向盘转向主要由转向系统控制。

3. 运动学模型线性化

参照汽车运动学模型的线性化推导过程,可得到线性化后的无人车运动学模型。

下面给出简略推导过程:

X ˙ = [ x ˙ y ˙ θ ˙ ] = [ v cos ⁡ θ v sin ⁡ θ v tan ⁡ δ L ] = [ f 1 f 2 f 3 ] = f ( X , u ) \dot{X}=\left[\begin{array}{c}{\dot{x}} \\ {\dot{y}} \\ {\dot{\theta}}\end{array}\right]=\left[\begin{array}{c}{v\cos \theta} \\ {v\sin \theta} \\ {\frac{v\tan \delta}{L}}\end{array}\right] =\left[\begin{array}{l}{f_{1}} \\ {f_{2}} \\ {f_{3}}\end{array}\right]=f(X, u) X˙= ​x˙y˙​θ˙​ ​= ​vcosθvsinθLvtanδ​​ ​= ​f1​f2​f3​​ ​=f(X,u)

其中, X = [ x , y , θ ] T , u = [ v , δ ] T X=\left[x, y, \theta \right]^{T},u=\left[v, \delta \right]^{T} X=[x,y,θ]T,u=[v,δ]T。

我们将上式在点 X r = [ x r , y r , θ r ] T , u r = [ v r , δ r ] T X_{r}=\left[x_{r}, y_{r}, \theta_{r}\right]^{T}, u_{r}=\left[v_{r}, \delta_{r}\right]^{T} Xr​=[xr​,yr​,θr​]T,ur​=[vr​,δr​]T处进行泰勒展开(忽略二阶及以上高阶项),可得:

X ˙ = X ˙ − X ˙ r = [ x ˙ − x ˙ r y ˙ − y ˙ r θ ˙ − θ ˙ r ] ≈ ( ∂ f 1 ∂ x ∂ f 1 ∂ v ∂ f 1 ∂ θ ∂ f 2 ∂ x ∂ f 2 ∂ y ∂ f 2 ∂ θ ∂ f 3 ∂ x ∂ f 3 ∂ y ∂ f 3 ∂ θ ) [ x − x r y − y r θ − θ r ] + ( ∂ f 1 ∂ v ∂ f 1 ∂ δ ∂ f 2 ∂ v ∂ f 2 ∂ δ ∂ f 3 ∂ v ∂ f 3 ∂ δ ) [ v − v r δ − δ r ] \dot{X}=\dot{X}-\dot{X}_{r}=\left[\begin{array}{c}{\dot{x}-\dot{x}_{r}} \\ {\dot{y}-\dot{y}_{r}} \\ {\dot{\theta}-\dot{\theta}_{r}}\end{array}\right] \approx \left(\begin{array}{ccc}{\frac{\partial f_{1}}{\partial x}} & {\frac{\partial f_{1}}{\partial v}} & {\frac{\partial f_{1}}{\partial \theta}} \\ {\frac{\partial f_{2}}{\partial x}} & {\frac{\partial f_{2}}{\partial y}} & {\frac{\partial f_2}{\partial \theta}} \\ {\frac{\partial f_{3}}{\partial x}} & {\frac{\partial f_3}{\partial y}} & {\frac{\partial f_3}{\partial \theta}}\end{array}\right)\left[\begin{array}{c}{x-x_{r}} \\ {y-y_{r}} \\ {\theta-\theta_{r}}\end{array}\right]+\left(\begin{array}{cc}{\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{array}\right)\left[\begin{array}{c}{v-v_{r}} \\ {\delta-\delta_{r}}\end{array}\right] X˙=X˙−X˙r​= ​x˙−x˙r​y˙​−y˙​r​θ˙−θ˙r​​ ​≈ ​∂x∂f1​​∂x∂f2​​∂x∂f3​​​∂v∂f1​​∂y∂f2​​∂y∂f3​​​∂θ∂f1​​∂θ∂f2​​∂θ∂f3​​​ ​ ​x−xr​y−yr​θ−θr​​ ​+ ​∂v∂f1​​∂v∂f2​​∂v∂f3​​​∂δ∂f1​​∂δ∂f2​​∂δ∂f3​​​ ​[v−vr​δ−δr​​]

由些可得:

Δ X ˙ = A m Δ X + B m Δ u \Delta \dot{X}=A_{m} \Delta X+B_{m} \Delta u ΔX˙=Am​ΔX+Bm​Δu

其中: A m = [ 0 0 − v sin ⁡ θ 0 0 v cos ⁡ θ 0 0 0 ] A_{m}=\left[\begin{array}{ccc}{0} & {0} & {-v\sin \theta } \\ {0} & {0} & {v\cos \theta} \\ {0} & {0} & {0}\end{array}\right] Am​= ​000​000​−vsinθvcosθ0​ ​, B m = [ cos ⁡ θ 0 sin ⁡ θ 0 tan ⁡ δ L v L cos ⁡ 2 δ ] B_{m}=\left[\begin{array}{cc}{\cos \theta} & {0} \\ {\sin \theta} & {0} \\ {\frac{\tan \delta}{L}} & {\frac{v}{L\cos ^{2} \delta}}\end{array}\right] Bm​= ​cosθsinθLtanδ​​00Lcos2δv​​ ​.

注意:非线性模型经过线性化后,得到的都是增量模型(在当前状态的基础上的增大或减小量),或者说成是局部模型。线性化后的模型只有在线性化点 X r X_r Xr​附近才有意义,离线性化点越远,线性化的模型的预测误差越大。

4. 线性模型离散化

由于测量具有离散的本质,现有的物理系统只能被离散的观测与控制。时间维度上的状态都被离散化为一个个状态序列 x 0 , x 1 , . . . , x t , . . . x_0, x_1, ...,x_t,... x0​,x1​,...,xt​,...。但是这些物理系统本质上是连续的,那些状态更新间隔,只是因为我们仅仅能够离散的控制、影响这些系统罢了。

模型的离散化是对物理系统在时间维度的近似。离散化后的差分模型与系统真实的连续模型是有误差的。下图显示了简单一阶常微分方程 y ˙ = y , y 0 = 1.0 \dot{y}=y, y_0=1.0 y˙​=y,y0​=1.0时的连续状态函数(红色)与差分函数(绿色)(其中, d t = 0.1 s d_t=0.1s dt​=0.1s)。表明两者之间是有误差的,并且随着时间增长,误差越大。

图

为什么有误差,还要将就采用离散的差分形式呢?

一切只因不能立马与差不多就可以十个大字。

不能立马是指控制指令并不能立马从当前值变成期望的控制输入值,因此,就算用连续模型加上阶梯形式控制输入函数计算状态的响应输出也是不准确的。于其不准,倒不如用形式相对简洁易懂的差分模型。另外,并不是所有的系统模型都是可导的,这使得绝大多数情况是被迫采用差分模型。

差不多就可以 由于控制是按一定的周期观测系统内部真实的状态,也即系统的状态初值是不断更新。如果我们的更新周期不是太长,在短时间内,差分函数的状态预测误差是在可接受的范围。

不啰嗦太多!

下面简单推导无人车运动学线性化后连续模型的离散形式:

A m Δ X ( k ) + B m Δ u ( k ) = Δ ˙ ≈ Δ X ( k + 1 ) − Δ X ( k ) T A_m \Delta X(k) + B_m \Delta u(k) =\dot{\Delta}\approx \frac{\Delta X(k+1)-\Delta X(k)}{T} Am​ΔX(k)+Bm​Δu(k)=Δ˙≈TΔX(k+1)−ΔX(k)​

变形可得:

Δ X ( k + 1 ) = ( I + T A m ) Δ X ( k ) + T B m Δ u ( k ) \Delta X(k+1)=(I+TA_m) \Delta X(k) + TB_m \Delta u(k) ΔX(k+1)=(I+TAm​)ΔX(k)+TBm​Δu(k)

令: A = ( I + T A m ) A=(I+TA_m) A=(I+TAm​), B = T B m B=TB_m B=TBm​,有:

Δ X ( k + 1 ) = A Δ X ( k ) + B Δ u ( k ) \Delta X(k+1)=A \Delta X(k) + B \Delta u(k) ΔX(k+1)=AΔX(k)+BΔu(k)

其中: A = [ 1 0 − v T sin ⁡ θ 0 1 v T cos ⁡ θ 0 0 1 ] , B = [ T cos ⁡ θ 0 T sin ⁡ θ 0 T tan ⁡ δ L v T L cos ⁡ 2 δ ] A=\left[\begin{array}{ccc}{1} & {0} & {-vT\sin \theta } \\ {0} & {1} & {vT\cos \theta} \\ {0} & {0} & {1}\end{array}\right], B=\left[\begin{array}{cc}{T \cos \theta } & {0} \\ {T \sin \theta } & {0} \\ {\frac{T\tan \delta }{L}} & {\frac{v T}{L \cos ^{2} \delta}}\end{array}\right] A= ​100​010​−vTsinθvTcosθ1​ ​,B= ​TcosθTsinθLTtanδ​​00Lcos2δvT​​ ​

总结

本篇介绍无人车运动学模型,之后还介绍了其线性化形式与差分形式。无人车运动学模型在低速时可以较好的预测(估计)系统未来的状态,但是随着车速的提高,汽车侧向动力学特性的影响越来越明显。因此,在高速运行时,一个更加准确的无人车模型必须加入汽车的动力学特性。

模型的用处就是在当前状态给定某控制输入时,预测(估计) 系统未来的状态。控制领域利用模型设计合适的输入,以期控制系统到达目标状态。

同时也希望大家多多支持本人第一个付费专栏《自动驾驶规划入门(已完结)》,满足我一点点的虚荣心=v=,里面有更多将pyomo用于路径规划与轨迹规划的案例。

注:本文转载自blog.csdn.net的windSeS的文章"https://windses.blog.csdn.net/article/details/103463683"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top