写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~


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

引言

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

  各位小伙伴们大家好,本节博客讲解前馈控制与航向误差。在上一节介绍了离散 LQR 以及连续 LQR,分别对应离散系统和连续系统。 LQR 的核心就是求黎卡提方程的

【自动驾驶】控制算法(六)前馈控制与航向误差_算法
,求出来之后就可以算出最优控制
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_02


一、反馈控制

  如果是连续系统,可以用连续 LQR 算出

【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
,当然也可以将连续系统离散化,用离散 LQR 再算出
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
出来,这两个
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
可能不完全一样,但应该非常接近,因为无论是连续系统还是离散系统,都是对相同物理现象的不同描述,所以算出来的
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03

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

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

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_08
的系统,画出框图如下:

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

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_10
代表积分,即
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_11
经过此模块就变成了
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_12

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_13
看成输入,把
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_12
换成看成输出,即输入什么样的
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_13
,就会得到什么样的
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_12
,那什么叫反馈呢?LQR 算出来
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_02
实际上就是在图中
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_12
这条线上,加一条红色线。比如这样:

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

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_13
决定输出
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_12
,有反馈的话就是先是输入
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_13
决定
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_12
,然后
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_12
又反过来决定输入
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_13
,这就是反馈的意思。

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


二、前馈控制的引入

  先来看以下框图:

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

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_27
左边再加
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_28
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_28

为什么要加前馈控制呢?

【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_30
遗留下来的小尾巴
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_31

【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_32
,误差微分方程为:
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_33
  观察微分方程可以发现,无论
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
取何值,误差
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_35
和误差的导数
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_35
都不可能同时为
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
,但我们希望误差可能一开始不是
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
,经过
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
反馈控制让它慢慢变成
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
,然后就一直是
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37

【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
,同时误差的导数等于
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
,根本就不是微分方程的解。

【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
,误差的导数也是
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
,这种状态根本不是方程的解,能控制的其实就是反馈的
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
,但是怎么调
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03

  所以要引入前馈控制,即针对系统

【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_48
  令
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_49
,其中,
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_50
是由 LQR 计算出来的反馈控制,就是用
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_51
把尾巴去掉算出来的
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
,那么
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_28


三、前馈控制与稳态误差

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

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

【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
,因为
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37
不是方程的解,存在稳态误差。LQR 控制系统最后一定会稳定,稳定下来最终结果就是误差不再变了,即误差的导数
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_56
,并且误差本身不是
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37

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

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

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

  如果看过第五节就会明白,解 LQR 时需要解黎卡提方程,通过迭代出来,如果有解的话,就意味着迭代收敛,黎卡提方程的解

【自动驾驶】控制算法(六)前馈控制与航向误差_算法
不会再变。如果系统是不稳定的,黎卡提方程迭代就会发散, LQR 就没有解。

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

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

  代进去算一下,把误差的导数等于0,带到误差方程里:

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

  最终会得到稳态误差:
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_60

  引入前馈控制之后误差的导数:

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

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_62
,代进去:
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_63
  现在目的就很简单了,选取合适的
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_64
,使得稳态误差
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_65
尽可能为
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37

注意

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_67


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

1、前馈控制表达式推导

【自动驾驶】控制算法(六)前馈控制与航向误差_算法_68
具体的表达式:

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_69

  其中,

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_70
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_71
矩阵,
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_27
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_73
矩阵,
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_74
也是
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_73
  下面用软件 Mathematical 进行矩阵求逆运算:

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

  其中,

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

  根据 Mathematic 得到的化简结果,再进行进一步化简,最后得到误差:

【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_78
  列向量的第一行和第三行都有
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_79
,这就是
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_79
对误差的影响。写到这其实就很明显,前馈控制表达式:

【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_81
  此时,
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_82
。其中,
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_83
是反馈行向量
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_77
中的
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_83

【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
,然后再算前馈
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_87

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

  再来看一下误差的第三行:

【自动驾驶】控制算法(六)前馈控制与航向误差_算法_88
  可以发现
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_89
不受
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_28
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
的影响,表达式里没有
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_28
,也没有
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
。即无论前馈和反馈取什么值,
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_89
都永远不可能为零。因为能控制的就是前馈以及反馈。

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_89
的表达式,似乎感觉能控制的只有
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_96
,因为侧偏刚度是负的,如果
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_96
取特定值,那么有可能
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_98
,意味着
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_96

注意

【自动驾驶】控制算法(六)前馈控制与航向误差_算法_100
不是航向误差,
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_100
定义的是
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_102
,而航向误差应该是
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_103
。我们的目的是想让航向误差和横向误差都为
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_104

  • 横向误差为
    【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_105
    :可以通过前馈控制。就是
    【自动驾驶】控制算法(六)前馈控制与航向误差_算法_106
    取那后面那一坨东西解决,横向误差可以为
    【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_105
  • 航向误差为0:航向误差如果按真正的定义
    【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_108
    ,那么
    【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_109
    就不为
    【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_105

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_111
,那么
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_112
的稳态物差应该是
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_113
才对,那么问题是现在式子是不是等于
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_113

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_89
表达式进行更进一步的化简,在第四节讲到
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_116
和它的投影
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_117
之间的关系:
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_118
  
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_119
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_120

  在直角坐标系下曲率的计算式:

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_121
  大家都非常熟悉,但是曲率有定义式:
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_122
  这是曲率最原始的定义式,由此可得:
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_123
  其中,
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_117

【自动驾驶】控制算法(六)前馈控制与航向误差_算法_125
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_126
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_127
,假设车辆没有漂移,所以:
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_128
  这样直接得到
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_129
,那么 :
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_130
  又因为
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_131
可得:
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_132
  又因为无漂移的假设,所以把
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_133
直接忽略掉:
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_134
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_135
  所以
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_136
  到这一步离最终结果越来越近了,因为
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_137
是侧向力
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_138
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_137
除以
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_140
是侧边角,但是这样还是不够,因为
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_137
是总侧向力,包括前轮和后轮,而
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_140

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

3、车辆质量等效处理

  对车辆质量进行等效处理

【自动驾驶】控制算法(六)前馈控制与航向误差_算法_143
是不是感觉有点熟悉? 比如有个质量块:

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_144

  质量为 m,质心到前边的距离为 a,到后边距离为 b。只考虑质心的话,可以完全等效成叠加的两个质量块,质量是

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

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_145
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_146
,使得质心和原来大质量块的质心完全一样,并且
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_149
,如果能做到这一点,在质量分布维度上,这两个东西完全等效。

  以质心为原点建立坐标系,等效前提是

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

【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_151
  这就正好可以把四轮车把按照质心分成上半和下半:

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

  上半质量为

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_145
,下半质量为
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_146
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_155
就等于后轮侧向力,严格来说应该是后轮侧向力之和。因为我们把汽车模型简化为自行车模型:

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

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_157
是单个轮子的侧向力,并且自行车模型的侧偏刚度是单个轮的侧偏刚度的两倍,即把两个轮子合并成一个轮子,可直接得到
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_89
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_159

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

  自行车模型如下:

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

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_161
,因为用的是右手系,以左为正,以右为负,在轮胎中轴线右边,所以是
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_161

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_163
,根据弧度的定义,上面的角
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_164

【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_165
度,所以
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_166
  所以
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_167

  这样正好:

  • 【自动驾驶】控制算法(六)前馈控制与航向误差_算法_168
    不是航向误差,
    【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_169
    ,航向误差是
    【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_170
    【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_171
  • 【自动驾驶】控制算法(六)前馈控制与航向误差_算法_168
    的稳态误差为
    【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_173
    ,这样的话会得到
    【自动驾驶】控制算法(六)前馈控制与航向误差_算法_174
    这就是想要的结果。

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_175
不可能通过
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_28
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
去调节,但是不用去理会事情,因为最终的目的是
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_178
,就意味
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_179
,而推导出来的
【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_175
稳态误差正好就是
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_113

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_175

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

5、前馈控制表达式化简

  前馈控制表达式:

【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_81
若令
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_185
,则可进一步化简为
【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_186

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

【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_13
【自动驾驶】控制算法(六)前馈控制与航向误差_笔记_188

  • 【自动驾驶】控制算法(六)前馈控制与航向误差_运动控制_189
    通过 LQR 算出来,称为 反馈控制
  • 【自动驾驶】控制算法(六)前馈控制与航向误差_算法_190
    根据上面公式算出来,称为 前馈控制

  通过反馈和前馈控制就可以将误差变成

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

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_175
不是航向误差,但最终导致航向误差为
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_37


五、总结

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

【自动驾驶】控制算法(六)前馈控制与航向误差_人工智能_194
【自动驾驶】控制算法(六)前馈控制与航向误差_算法_03
通过 LQR 解决,
【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_87

【自动驾驶】控制算法(六)前馈控制与航向误差_自动驾驶_35
,误差在前面第四节讲解过误差如何计算,但遗憾的是基于连续曲线的误差,而一般规划点都是离散的。

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

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


参考资料

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


后记:

🌟 感谢您耐心阅读这篇关于 前馈控制与航向误差 的技术博客。 📚
🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢
🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀
🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡
🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀