【自动驾驶】控制算法(六)前馈控制与航向误差

写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。

🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒
若您觉得内容有价值,还请评论告知一声,以便更多人受益。
转载请注明出处,尊重原创,从我做起。

👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜
在这里,您将收获的不只是技术干货,还有思维的火花

📚 系列专栏:【运动控制】系列,带您深入浅出,领略控制之美。🖊
愿我的分享能为您带来启迪,如有不足,敬请指正,让我们共同学习,交流进步!

🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~


文章目录

  • 引言
  • 一、反馈控制
  • 二、前馈控制的引入
  • 三、前馈控制与稳态误差
    • 1、稳态误差的定义与影响
    • 2、稳态误差与前馈控制的关系
  • 四、前馈控制的计算与优化
    • 1、前馈控制表达式推导
    • 2、航向角误差的近似处理
    • 3、车辆质量等效处理
    • 4、航向误差与侧偏角的关系推导
    • 5、前馈控制表达式化简
    • 6、反馈与前馈控制的结合
  • 五、总结
  • 参考资料


引言

  本篇博客是 自动驾驶控制算法 系列的第六节。内容整理自 B站知名up主 忠厚老实的老王 的视频,作为博主的学习笔记,分享给大家共同学习。

  各位小伙伴们大家好,本节博客讲解前馈控制与航向误差。在上一节介绍了离散 LQR 以及连续 LQR,分别对应离散系统和连续系统。 LQR 的核心就是求黎卡提方程的 P P P,求出来之后就可以算出最优控制 u = − k x u =-k x u=kx


一、反馈控制

  如果是连续系统,可以用连续 LQR 算出 k k k ,当然也可以将连续系统离散化,用离散 LQR 再算出 k k k 出来,这两个 k k k 可能不完全一样,但应该非常接近,因为无论是连续系统还是离散系统,都是对相同物理现象的不同描述,所以算出来的 k k k 应该大差不差。

  这种 u = − k x u =-k x u=kx 的控制叫做反馈控制。

为什么叫反馈控制呢?什么叫反馈?可以简单解释一下。

  对于 X ˙ = A X + B u \dot{X}=AX+Bu X˙=AX+Bu 的系统,画出框图如下:
在这里插入图片描述

   1 s \frac{1}{s} s1代表积分,即 x ˙ \dot x x˙ 经过此模块就变成了 x x x

  如果把 u u u 看成输入,把 x x x 换成看成输出,即输入什么样的 u u u,就会得到什么样的 x x x,那什么叫反馈呢?LQR 算出来 u = − k x u =-k x u=kx 实际上就是在图中 x x x 这条线上,加一条红色线。比如这样:
在这里插入图片描述

  这种控制就叫反馈控制,下边的红色的线就叫反馈,如果没有反馈,输入 u u u 决定输出 x x x,有反馈的话就是先是输入 u u u 决定 x x x,然后 x x x 又反过来决定输入 u u u,这就是反馈的意思。

  但这种反馈,容易出现代数环问题,即输入直接影响输出,而输出又直接影响输入,那就变成先有鸡还是先有蛋的问题。不过现在还碰不到代数环问题,等碰到时再细说,本篇博客的任务就是讲前馈控制。


二、前馈控制的引入

  先来看以下框图:
在这里插入图片描述

  在 B B B 左边再加 δ f \delta_f δf δ f \delta_f δf 就叫做前馈控制,不依赖于x,就好像空降一样,在反馈控制前再加前馈控制。

为什么要加前馈控制呢?

  因为要处理第四讲 e ˙ r r = A e r r + B u + C θ ˙ r \dot{e}_{rr}=Ae_{rr}+Bu+C\dot{\theta}_{r} e˙rr=Aerr+Bu+Cθ˙r 遗留下来的小尾巴 C θ ˙ r C\dot \theta_r Cθ˙r

  如果没有前馈,只有反馈的话,即只用 LQR ,控制量 u = − k e r r u=-ke_{rr} u=kerr,误差微分方程为:
e ˙ r r = ( A − B K ) e r r + C θ ˙ r \dot{e}_{rr}=\left( A-BK \right) e_{rr}+C\dot{\theta}_r e˙rr=(ABK)err+Cθ˙r  观察微分方程可以发现,无论 k k k 取何值,误差 e r r e_{rr} err 和误差的导数 e r r e_{rr} err 都不可能同时为 0 0 0,但我们希望误差可能一开始不是 0 0 0,经过 k k k 反馈控制让它慢慢变成 0 0 0,然后就一直是 0 0 0 稳定运行下去。

  但是微方程能告诉我们这是不可能的事情,因为误差等于 0 0 0,同时误差的导数等于 0 0 0,根本就不是微分方程的解。

  微分方程描述的是物理规律,是误差所满足的牛顿运动定律,不能被违背。既然不能被违背的话,就意味着如果只用反馈控制,根本不可能达到理想状态,即误差是 0 0 0,误差的导数也是 0 0 0,这种状态根本不是方程的解,能控制的其实就是反馈的 k k k,但是怎么调 k k k 都没有用。

  所以要引入前馈控制,即针对系统
e ˙ r r = A e r r + B u + C θ ˙ r \dot{e}_{rr}=Ae_{rr}+Bu+C\dot{\theta}_{r} e˙rr=Aerr+Bu+Cθ˙r  令 u = − k x + δ f u=-kx+\delta_f u=kx+δf,其中, − k x -kx kx 是由 LQR 计算出来的反馈控制,就是用 X ˙ = A X + B u \dot X=AX+Bu X˙=AX+Bu 把尾巴去掉算出来的 k k k,那么 δ f \delta_f δf 就是前馈控制,前馈控制的引入是为了消除稳态误差。


三、前馈控制与稳态误差

1、稳态误差的定义与影响

  稳态误差 就是稳定状态的误差,稳定就是代表误差变成常数,不会再变了。

  但由于物理限制,误差常数肯定不是 0 0 0,因为 0 0 0 不是方程的解,存在稳态误差。LQR 控制系统最后一定会稳定,稳定下来最终结果就是误差不再变了,即误差的导数 e ˙ r r = 0 \dot e_{rr}=0 e˙rr=0 ,并且误差本身不是 0 0 0

为什么 LQR 最终会导致经过一段时间后误差就稳定不变了,系统就稳定下来了呢?

  如果系统是不稳定的,那么 LQR 是没有解的;如果系统是 LQR 有解,就是 k 能算出来,那就意味着一定可以通过 LQR 使系统达到稳定状态。

那什么叫 LQR 有解?什么叫 LQR 无解?

  如果看过第五节就会明白,解 LQR 时需要解黎卡提方程,通过迭代出来,如果有解的话,就意味着迭代收敛,黎卡提方程的解 P P P 不会再变。如果系统是不稳定的,黎卡提方程迭代就会发散,LQR 就没有解。

2、稳态误差与前馈控制的关系

回到刚才说的误差,误差最终等于多少?

  代进去算一下,把误差的导数等于0,带到误差方程里:
0 = ( A − B K ) e r r + C θ ˙ r 0=\left( A-BK \right) e_{rr}+C\dot{\theta}_r 0=(ABK)err+Cθ˙r
  最终会得到稳态误差:
e r r = − ( A − B k ) − 1 C θ ˙ r e_{rr}=-(A-Bk)^{-1}C\dot{\theta}_r err=(ABk)1Cθ˙r

  引入前馈控制之后误差的导数:
e ˙ r r = A e r r + B ( − k e r r + δ f ) + C θ ˙ r \dot{e}_{rr}=Ae_{rr}+B\left( -ke_{rr}+\delta _f \right) +C\dot{\theta}_r e˙rr=Aerr+B(kerr+δf)+Cθ˙r

  稳定后,误差的导数 e ˙ r r = 0 \dot e_{rr}= 0 e˙rr=0 ,代进去:
e r r = − ( A − B k ) − 1 ⋅ ( B δ f + C θ ˙ r ) e_{rr}=-(A-Bk)^{-1}\cdot(B\delta_{f}+C\dot{\theta}_{r}) err=(ABk)1(Bδf+Cθ˙r)  现在目的就很简单了,选取合适的 δ f \delta_{f} δf,使得稳态误差 e r r = − ( A − B k ) − 1 ⋅ ( B δ f + C θ ˙ r ) e_{rr}=-(A-Bk)^{-1}\cdot(B\delta_{f}+C\dot{\theta}_{r}) err=(ABk)1(Bδf+Cθ˙r) 尽可能为 0 0 0

  注意 B B B 不是矩阵,是列向量,列向量是没有逆的,只有矩阵,而且是方阵才有逆,所以并不能直接令右边括号内的项为0。


四、前馈控制的计算与优化

1、前馈控制表达式推导

  代入第四节中 A 、 B 、 C A、B、C ABC 具体的表达式:
在这里插入图片描述
  其中, A A A 4 × 4 4\times 4 4×4 矩阵, B B B 4 × 1 4\times 1 4×1 矩阵, C C C 也是 4 × 1 4\times 1 4×1 矩阵,而且它们都有很非常复杂的符号。现在要求逆,但这根本就不是人手算就可以完成的工作。所以将借助数学软件进行运算。

  下面用软件 Mathematical 进行矩阵求逆运算:
在这里插入图片描述
  其中, k = ( k 1 , k 2 , k 3 , k 4 ) k=(k_1,k_2,k_3,k_4) k=(k1,k2,k3,k4) .
  根据 Mathematic 得到的化简结果,再进行进一步化简,最后得到误差:
e r r = ( 1 k 1 { δ f − θ ˙ r v x [ a + b − b k 3 − m v x 2 a + b ( b C α f + a C α r k 3 − a C α r ) ] } 0 − θ ˙ r v x ( b + a a + b m v x 2 C α r ) 0 ) e_{rr}=\left( \begin{array}{c} \frac{1}{k_1}\left\{ \delta _f-\frac{\dot{\theta}_r}{v_x}\left[ a+b-bk_3-\frac{mv_{x}^{2}}{a+b}\left( \frac{b}{C_{\alpha f}}+\frac{a}{C_{\alpha r}}k_3-\frac{a}{C_{\alpha r}} \right) \right] \right\}\\ 0\\ -\frac{\dot{\theta}_r}{v_x}\left( b+\frac{a}{a+b}\frac{mv_{x}^{2}}{C_{\alpha r}} \right)\\ 0\\ \end{array} \right) err= k11{δfvxθ˙r[a+bbk3a+bmvx2(Cαfb+Cαrak3Cαra)]}0vxθ˙r(b+a+baCαrmvx2)0   列向量的第一行和第三行都有 θ ˙ r \dot \theta_r θ˙r,这就是 θ ˙ r \dot \theta_r θ˙r 对误差的影响。写到这其实就很明显,前馈控制表达式:
δ f = θ ˙ r v x [ a + b − b k 3 − m v x 2 a + b ( b C α f + a C α r k 3 − a C α r ) ] \delta _f=\frac{\dot{\theta}_r}{v_x}\left[ a+b-bk_3-\frac{mv_{x}^{2}}{a+b}\left( \frac{b}{C_{\alpha f}}+\frac{a}{C_{\alpha r}}k_3-\frac{a}{C_{\alpha r}} \right) \right] δf=vxθ˙r[a+bbk3a+bmvx2(Cαfb+Cαrak3Cαra)]  此时, e d = 0 e_d=0 ed=0。其中, k 3 k_3 k3是反馈行向量 k = ( k 1 , k 2 , k 3 , k 4 ) k=(k_1,k_2,k_3,k_4) k=(k1,k2,k3,k4) 中的 k 3 k_3 k3

  可见,前馈依赖于反馈,所以要先算反馈 k k k,然后再算前馈 δ f \delta _f δf

2、航向角误差的近似处理

  再来看一下误差的第三行:
e φ = − θ ˙ r v x ( b + a a + b m v x 2 C α r ) e_\varphi =-\frac{\dot{\theta}_r}{v_x}\left( b+\frac{a}{a+b}\frac{mv_{x}^{2}}{C_{\alpha r}} \right) eφ=vxθ˙r(b+a+baCαrmvx2)  可以发现 e φ e_\varphi eφ 不受 δ f \delta_f δf k k k 的影响,表达式里没有 δ f \delta_f δf,也没有 k k k。即无论前馈和反馈取什么值, e φ e_\varphi eφ都永远不可能为零。因为能控制的就是前馈以及反馈。

  看一下 e φ e_\varphi eφ 的表达式,似乎感觉能控制的只有 v x v_x vx,因为侧偏刚度是负的,如果 v x v_x vx 取特定值,那么有可能 e φ = 0 e_\varphi=0 eφ=0,意味着 v x v_x vx 只能取特定值,即车辆只能用特定速度,很明显不现实。

  注意 e φ e_\varphi eφ 不是航向误差, e φ e_\varphi eφ 定义的是 φ − θ r \varphi -\theta_r φθr,而航向误差应该是 φ + β − θ r \varphi +\beta -\theta_r φ+βθr。我们的目的是想让航向误差和横向误差都为 0 0 0

  • 横向误差为 0 0 0:可以通过前馈控制。就是 δ f \delta_f δf 取那后面那一坨东西解决,横向误差可以为 0 0 0

  • 航向误差为0:航向误差如果按真正的定义 φ + β − θ r = 0 \varphi +\beta -\theta_r=0 φ+βθr=0,那么 e φ e_\varphi eφ 就不为 0 0 0

  如果真正的目的是 φ + β − θ r = 0 \varphi +\beta -\theta_r =0 φ+βθr=0,那么 φ − θ r \varphi -\theta_r φθr 的稳态物差应该是 − β -\beta β 才对,那么问题是现在式子是不是等于 − β -\beta β

  首先对 e φ e_\varphi eφ 表达式进行更进一步的化简,在第四节讲到 v v v 和它的投影 s ˙ \dot s s˙ 之间的关系:
s ˙ = ∣ v ⃗ ∣ cos ⁡ ( θ − θ r ) 1 − κ e d = ∣ v ⃗ ∣ cos ⁡ ( β + φ − θ r ) 1 − κ e d = ∣ v ⃗ ∣ cos ⁡ β cos ⁡ φ − ∣ v ⃗ ∣ sin ⁡ β sin ⁡ φ 1 − κ e d = v x cos ⁡ e φ − v y sin ⁡ e φ 1 − κ e d \begin{aligned} \dot{s}&=\frac{|\vec{v}|\cos \left( \theta -\theta _r \right)}{1-\kappa e_d}=\frac{|\vec{v}|\cos \left( \beta +\varphi -\theta _r \right)}{1-\kappa e_d}\\ &=\frac{|\vec{v}|\cos \beta \cos \varphi -|\vec{v}|\sin \beta \sin \varphi}{1-\kappa e_d}\\ &=\frac{v_x\cos e_{\varphi}-v_y\sin e_{\varphi}}{1-\kappa e_d}\\ \end{aligned} s˙=1κedv cos(θθr)=1κedv cos(β+φθr)=1κedv cosβcosφv sinβsinφ=1κedvxcoseφvysineφ    s ˙ \dot{s} s˙ θ ˙ r \dot\theta_r θ˙r 有很密切的关系

  在直角坐标系下曲率的计算式:
κ = y ′ ′ ( 1 + y ′ ) 3 2 \kappa =\frac{y^{\prime\prime}}{(1+y^{\prime})^{\frac{3}{2}}} κ=(1+y)23y′′  大家都非常熟悉,但是曲率有定义式:
κ = d θ d s = d θ / d t d s / d t = θ ˙ s ˙ \kappa =\frac{d\theta}{ds}=\frac{d\theta /dt}{ds/dt}=\frac{\dot{\theta}}{\dot{s}} κ=dsdθ=ds/dtdθ/dt=s˙θ˙  这是曲率最原始的定义式,由此可得:
θ ˙ = κ s ˙ \dot{\theta}=\kappa \dot{s} θ˙=κs˙  其中, s ˙ \dot s s˙ 的表达式太复杂,要进行近似。

  一般规划的曲率 ∣ k ∣ ≪ 1 \left| k \right|\ll 1 k1 ∣ e φ ∣ ≪ 1 \left| e_{\varphi} \right|\ll 1 eφ1 ∣ v y ∣ ≪ 1 \left| v_y \right|\ll 1 vy1,假设车辆没有漂移,所以:
1 1 − κ e d ≈ 1 v x cos ⁡ e φ ≈ v x v y sin ⁡ e φ ≈ 0 \frac{1}{1-\kappa e_d}\approx 1\quad v_x\cos e_{\varphi}\approx v_x\quad v_y\sin e_{\varphi}\approx 0 1κed11vxcoseφvxvysineφ0  这样直接得到 s ˙ ≈ v x \dot{s}\approx v_x s˙vx,那么 :
θ ˙ r = κ s ˙ ≈ κ v x \dot{\theta}_r=\kappa \dot{s}\approx \kappa v_x θ˙r=κs˙κvx  又因为 κ = 1 / R \kappa = 1/R κ=1/R 可得:
e φ = − κ ( b + a a + b m v x 2 C α r ) = − ( b R + a a + b m v x 2 R 1 C α r ) \begin{aligned} e_{\varphi}&=-\kappa \left( b+\frac{a}{a+b}\frac{mv_{x}^{2}}{C_{\alpha r}} \right)\\ &=-\left( \frac{b}{R}+\frac{a}{a+b}\frac{mv_{x}^{2}}{R}\frac{1}{C_{\alpha r}} \right)\\ \end{aligned} eφ=κ(b+a+baCαrmvx2)=(Rb+a+baRmvx2Cαr1)  又因为无漂移的假设,所以把 v y 、 v ˙ y v_y、\dot v_y vyv˙y直接忽略掉:
φ ˙ = v ⃗ R = v ⃗ x + v ⃗ y R ≈ v ⃗ x R \dot{\varphi}=\frac{\vec{v}}{R}=\frac{\vec{v}_{x}+\vec{v}_{y}}{R}\approx\frac{\vec{v}_{x}}{R} φ˙=Rv =Rv x+v yRv x a y = v y + v x φ ˙ ≈ v x φ ˙ ≈ v x 2 R \begin{array}{c} a_y=v_y+v_x\dot{\varphi}\approx v_x\dot{\varphi}\approx \frac{v_{x}^{2}}{R}\\ \end{array} ay=vy+vxφ˙vxφ˙Rvx2  所以 e φ = − ( b R + a a + b m a y ⋅ 1 C α r ) e_{\varphi}=-\left( \frac{b}{R}+\frac{a}{a+b}ma_y\cdot \frac{1}{C_{\alpha r}} \right) eφ=(Rb+a+bamayCαr1)  到这一步离最终结果越来越近了,因为 m a y ma_y may 是侧向力 F y F_y Fy m a y ma_y may除以 C α r C_{\alpha r} Cαr 是侧边角,但是这样还是不够,因为 m a y ma_y may 是总侧向力,包括前轮和后轮,而 C α r C_{\alpha r} Cαr 只是后轮的侧偏刚度,如果是后轮的侧向力除以后轮的侧偏刚度,那就得到后轮的侧偏角。

怎样才能得到后轮的侧向力呢?

3、车辆质量等效处理

  对车辆质量进行等效处理

  看到 a a + b \frac{a}{a+b} a+ba是不是感觉有点熟悉? 比如有个质量块:
在这里插入图片描述
  质量为 m,质心到前边的距离为 a,到后边距离为 b。只考虑质心的话,可以完全等效成叠加的两个质量块,质量是 m f m_f mf m r m_r mr

  如果是考虑别的东西的话,那把质量块分成两个肯定是不能完全等效的。但是如果仅仅在质量分布以及质心维度上考虑的话,可以选取适量的 m f m_f mf m r m_r mr,使得质心和原来大质量块的质心完全一样,并且 m f + m r = m m_f+m_r=m mf+mr=m,如果能做到这一点,在质量分布维度上,这两个东西完全等效。

  以质心为原点建立坐标系,等效前提是
{ m f + m r = m m f ⋅ a 2 + m r ⋅ ( − b 2 ) = 0 ⇒ { m f = b a + b m m r = a a + b m \left\{ \begin{array}{l} m_f+m_r=m\\ m_f\cdot \frac{a}{2}+m_r\cdot \left( -\frac{b}{2} \right) =0\\ \end{array} \right. \Rightarrow \left\{ \begin{array}{l} m_f=\frac{b}{a+b}m\\ m_r=\frac{a}{a+b}m\\ \end{array} \right. {mf+mr=mmf2a+mr(2b)=0{mf=a+bbmmr=a+bam  所以
e φ = − ( b R + m r a y C α r ) e_{\varphi}=-\left( \frac{b}{R}+\frac{m_ra_y}{C_{\alpha r}} \right) eφ=(Rb+Cαrmray)  这就正好可以把四轮车把按照质心分成上半和下半:
在这里插入图片描述
  上半质量为 m f m_f mf,下半质量为 m r m_r mr m r a y m_ra_y mray 就等于后轮侧向力,严格来说应该是后轮侧向力之和。因为我们把汽车模型简化为自行车模型:
在这里插入图片描述

  也就是把两个轮子合并成一个轮子,认为两个轮子一样, F y r F_{yr} Fyr 是单个轮子的侧向力,并且自行车模型的侧偏刚度是单个轮的侧偏刚度的两倍,即把两个轮子合并成一个轮子,可直接得到 e φ e_\varphi eφ
e φ = − ( b R + α r ) e_{\varphi}=-(\frac{b}{R}+\alpha_r) eφ=(Rb+αr)  化简到这一步已经化简非常多了。但还可以进一步化解。

4、航向误差与侧偏角的关系推导

  自行车模型如下:
在这里插入图片描述

  后轮侧偏角为 − α r -\alpha_r αr,因为用的是右手系,以左为正,以右为负,在轮胎中轴线右边,所以是 − α r -\alpha_r αr

  因为 R > > b R>>b R>>b,根据弧度的定义,上面的角 γ ≈ b R \gamma \approx\frac{b}{R} γRb

  在三角形中,三角形的内角和等于 180 180 180 度,所以
γ + π 2 − β + π 2 − ( − α r ) = π ⇒ − β = − ( γ + α r ) = − ( b R + α r ) \begin{array}{c}{{\gamma+\frac{\pi}{2}-\beta+\frac{\pi}{2}-(-\alpha_r)=\pi}}\\{\Rightarrow-\beta=-(\gamma+\alpha_{r})=-(\frac{b}{R}+\alpha_{r})}\\\end{array} γ+2πβ+2π(αr)=πβ=(γ+αr)=(Rb+αr)  所以
e φ = − β e_{\varphi}=-\beta eφ=β
  这样正好:

  • e φ e_{\varphi} eφ不是航向误差, e φ = φ − θ r e_{\varphi}=\varphi - \theta_r eφ=φθr,航向误差是 θ − θ r \theta - \theta_r θθr θ = φ + β \theta=\varphi+\beta θ=φ+β

  • e φ e_{\varphi} eφ 的稳态误差为 − β -\beta β,这样的话会得到
    e φ = φ − θ r ⇒ − β = φ − θ r φ + β = θ r e_{\varphi}=\varphi-\theta_{r}\quad\Rightarrow-\beta=\varphi-\theta_{r}\quad\varphi+\beta=\theta_{r} eφ=φθrβ=φθrφ+β=θr这就是想要的结果。

  虽然 e φ e_{\varphi} eφ 不可能通过 δ f \delta_f δf k k k 去调节,但是不用去理会事情,因为最终的目的是 θ − θ r = 0 \theta - \theta_r=0 θθr=0,就意味 e φ = − β e_{\varphi}=-\beta eφ=β,而推导出来的 e φ e_{\varphi} eφ稳态误差正好就是 − β -\beta β

  所以不用管 e φ e_{\varphi} eφ 不为零的事情。

  只需要用前馈控制保证横向误差 e d = 0 e_d=0 ed=0 就可以了。

5、前馈控制表达式化简

  前馈控制表达式:
δ f = θ ˙ r v x [ a + b − b k 3 − m v x 2 a + b ( b C α f + a C α r k 3 − a C α r ) ] \delta _f=\frac{\dot{\theta}_r}{v_x}\left[ a+b-bk_3-\frac{mv_{x}^{2}}{a+b}\left( \frac{b}{C_{\alpha f}}+\frac{a}{C_{\alpha r}}k_3-\frac{a}{C_{\alpha r}} \right) \right] δf=vxθ˙r[a+bbk3a+bmvx2(Cαfb+Cαrak3Cαra)]若令 θ ˙ r = κ v x \dot{\theta}_r= \kappa v_x θ˙r=κvx,则可进一步化简为
δ f = κ [ a + b − b k 3 − m v x 2 a + b ( b C α f + a C α r k 3 − a C α r ) ] \delta _f=\kappa\left[ a+b-bk_3-\frac{mv_{x}^{2}}{a+b}\left( \frac{b}{C_{\alpha f}}+\frac{a}{C_{\alpha r}}k_3-\frac{a}{C_{\alpha r}} \right) \right] δf=κ[a+bbk3a+bmvx2(Cαfb+Cαrak3Cαra)]

6、反馈与前馈控制的结合

  所以最终的控制量 u u u
u = − k e r r + δ f u=-ke_{rr}+\delta _f u=kerr+δf

  • k k k 通过 LQR 算出来,称为 反馈控制
  • δ f \delta _f δf 根据上面公式算出来,称为 前馈控制

  通过反馈和前馈控制就可以将误差变成
e r r = ( 0 0 − β 0 ) e_{rr}=\left( \begin{array}{c} 0\\ 0\\ -\beta\\ 0\\ \end{array} \right) err= 00β0

   e φ e_{\varphi} eφ不是航向误差,但最终导致航向误差为 0 0 0


五、总结

  本篇博客讲解了航向误差以及前馈控制。下一节会讲基于离散 Frenet 坐标系的规划点误差的计算。

  大家看一下公式, u = − k e r r + δ f u=-ke_{rr}+\delta _f u=kerr+δf k k k 通过 LQR 解决, δ f \delta _f δf 通过前馈控制解决。

  那么最后就是误差 e r r e_{rr} err,误差在前面第四节讲解过误差如何计算,但遗憾的是基于连续曲线的误差,而一般规划点都是离散的。

  所以还要再讲离散点误差的计算,讲完之后一切准备工作就完成了,在后续博客中会讲具体的横向控制算法,代码编写以及联合仿真。

  本篇博客的内容到此结束,欢迎关注后续内容!


参考资料

  【基础】自动驾驶控制算法第六讲 前馈控制与航向误差


后记:

🌟 感谢您耐心阅读这篇关于 前馈控制与航向误差 的技术博客。 📚

🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢

🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀

🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡

🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue按钮弹框

在Vue中实现按钮点击后弹出对话框(弹框)的功能,通常可以使用一些Vue的UI组件库,如Element UI、Vuetify、BootstrapVue等,这些库提供了丰富的组件,包括对话框(Dialog)、模态框&#x…

如何使用Gogs搭建自己的git服务器

最近偶然发现一款轻量级的git服务器,以前一直用的svn server,最近想搞个git服务器, 用gitlab资源占用太多了,gogs是一款轻量级git服务器,非常适合个人使用。 项目地址:GitHub - gogs/gogs: Gogs is a painl…

图书项目要点

一、搭建项目 使用tarojs/cli进行搭建 taro init [项目名] 二、具体页面 页面声明: 在【app.config.ts】中对主页面进行声明:组件页面可以不用声明 pages: ["pages/index/index",pages/user/index,pages/book/index,], tabbar制作&…

三种tcp并发服务器实现程序

都需先进行tcp连接 1、多进程并发 2、多线程并发 3、IO多路复用并发 (1)select (2)epoll 注:select与epoll文件描述符限制的区别是指同时涌入的客户端数量,select最大只能有1024个,epoll可以超…

MSR810配置本地认证的有线802.1X认证

正文共:1567 字 15 图,预估阅读时间:2 分钟 IEEE 802.1X协议又称DOT1X协议,是一种基于端口的网络接入控制协议(Port based network access control protocol),即在局域网接入设备的端口上对所接…

Django 第八课 -- 路由

目录 一. 前言 1.1. Django1.1.x 版本 1.2. Django 2.2.x 之后的版本 二. 正则路径中的分组 2.1. 正则路径中的无名分组 2.2. 正则路径中的有名分组 三. 反向解析 3.1. 普通路径 3.2. 正则路径(无名分组) 3.3. 正则路径(有名分组&a…

代码随想录训练营 Day41打卡 动态规划 part08 121. 买卖股票的最佳时机 122. 买卖股票的最佳时机II 123. 买卖股票的最佳时机III

代码随想录训练营 Day41打卡 动态规划 part08 一、力扣121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计…

反事实推理(Counterfactual Reasoning):探索未知与决策的桥梁

反事实推理(Counterfactual Reasoning):探索未知与决策的桥梁 反事实推理(Counterfactual Reasoning)是一种思维方式,它试图回答“如果……会怎样?”的问题。简单来说,反事实推理是…

中国料箱穿梭车玩家TOP榜单

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 料箱穿梭车前景 随着全球智慧物流建设的加速推进,智能仓储物流成为未来发展的重要趋势。在此背景下,料箱穿梭车作…

cuda,torch,paddle向下兼容

1、第一次配置yolov9模型时,使用的cuda的版本是11.6,torch和torchvision都是对应版本的 使用的tensorrt版本8.6,可以正常跑yolov9 其它不动,直接将cuda版本换为cuda11.7,依然可以正常运行 2、paddleseg paddle同样安…

carla unreal engine源码:如何创建radar可视化探测锥

文章目录 前言一、C实现方法1、DrawDebugCone函数2、carla工程修改3、make launch4、探测锥验证 二、蓝图实现方法1、创建并打开蓝图2、打开蓝图事件图表3、绘制蓝图事件4、编译再运行 前言 1、在自动驾驶仿真调试以及测试过程中,我们经常会用到雷达的探测锥&#…

OpenCV小练习:身份证号码识别

目标:针对一张身份证照片,把身份证号码识别出来(转成数字或字符串)。 实现思路:需要将目标拆分成两个子任务:(1) 把身份证号码区域从整张图片中检测/裁剪出来;(2) 将图片中的数字转化成文字。第…

快速学习go-zero

go的web框架有很多,目前go的社区大家对于框架的态度也不尽相同,有些轻量级的框架,但是也就代表整合第三方中间件就需要自己根据客户端进行封装,比如gingorm,也有些功能完全但是被认为丢失了go本身轻量设计的初衷, 比如goframe,而同样的微服务有很多框架,国内比较出门的就是go-z…

rockyliunx 救援模式下禁用docker

目录地址 /usr/lib/systemd/system/docker.service 进入系统界面: 选择系统 按E 按e出现 如下界面,找到 quite 后面添加 init/bin/bash 按 ctrl x 保存 后,到如下界面 加载文件系统为读写 输入命令 mount -o remount, rw / 修改docer.s…

docker的安装+docker镜像的基本操作

一.docker的介绍 1、Docker 是什么? Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采⽤“沙 盒”机制,容器之间不会存在任何接⼝。 Docker 通过 Linux Container(容器)技术将任意…

【线程池】

什么是线程池? 线程池是一个可以复用线程的技术。简单来说,线程池是一种基于池化技术的思想来管理线程的技术,旨在减少线程的创建和销毁次数,提高系统的响应速度和吞吐量。它预先创建了一定数量的线程,并将这些线程放…

Java中的定时器(Timer)

目录 一、什么是定时器? 二、标准库中的定时器 三、实现自定义定时器 一、什么是定时器? 定时器就像一个"闹钟",当它到达设定的时间后,就会执行预定的代码。 例如,我们在TCP的超时重传机制中讲过,如果服务器在规定…

DNS劫持问题

目录 DNS劫持概述 定义 图示 ​编辑图示说明 DNS劫持的原理 1. DNS请求与响应过程 图示 ​编辑2. 劫持发生点 本地劫持 路由器劫持 中间人攻击 图示 ​编辑图示说明 DNS劫持的影响 1. 对个人用户的影响 图示 ​编辑图示说明 2. 对企业的影响 图示 ​编辑图示…

0828作业+梳理

一、作业 代码&#xff1a; #include <iostream>using namespace std;using datatype int; //类型重命名 #define MAX 2 //宏定义 //结构体定义 struct Sqlist { private:datatype *data; //顺序表数组int size 0; //数组大小int len 0; …