写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~
文章目录
- 引言
- 一、不等式约束的构建
- 1、安全距离约束
- 2、速度约束
- 3、横向约束
- 4、加速度约束
- 5、转向角速度约束
- 二、不等式约束详细解析
- 1、纵向空间约束
- a)直接距离法
- b)速度反向计算法
- 2、速度约束
- 3、横向空间约束
- a)软硬约束的设计
- b)横向空间约束的计算
- 4、加速度约束
- a)硬约束
- b)软约束
- 三、MPC车辆控制约束完整形式
- 四、总结
- 参考资料
引言
本篇博客将介绍自动驾驶车辆控制中MPC约束的构建和松弛因子的考量。
一、不等式约束的构建
在MPC中,除了要满足输入输出和系统状态的约束:
还要考虑以下约束:
1、安全距离约束
这个安全距离约束用于确保车辆与其他车辆保持足够的安全距离,以防止碰撞。
2、速度约束
车辆速度的软约束,用于限制车辆的速度在一定范围内,以保证行驶的安全性和舒适性:用来保证车辆速度在安全范围之内。
3、横向约束
在横向上有一个被称为 管道 (tube) 的约束,用于限制车辆在横向方向上的移动,以保持车辆在车道内的稳定行驶:这个Tube约束包括软约束和硬约束两部分,确保车辆的轨迹保持在一定的空间范围内。
4、加速度约束
加速度约束则同时考虑了安全性能和舒适性能,确保车辆的加速行为既安全又舒适:
5、转向角速度约束
当然还有转向角约束,以保证车辆在转弯时不会超过安全范围,从而确保驾驶的安全性:这里的转向角变化量的约束通常与行驶速度有关,以确保在不同的行驶速度下,车辆的转向行为都是安全且可控的。
二、不等式约束详细解析
接下来将针对每个约束进行详细的讲解:
1、纵向空间约束
首先来看纵向空间约束表达式:在纵向方向上,构建硬约束通常有两种方法:
a)直接距离法
这种方法是通过直接测量与前车的距离来构建硬约束。
例如,如果车辆检测到前方有车辆切入其前进道路,它可以设置一个与前车保持的相对安全距离,并根据这个距离来构建硬约束。
b)速度反向计算法
这种方法是基于相对距离,反向计算出一个合理的速度值作为硬约束。即使用速度作为硬约束,通过积分来表示碰撞约束。这种方法可能会引入由积分引起的误差,尤其是在速度约束推导出行驶距离量时。
由于直接使用速度反向计算法构建的碰撞约束可能不够准确,为了更精确地约束车辆的纵向行进距离,我们更倾向于使用真实环境中的距离约束,即第一种方法。这种方法可以直接基于实际距离进行硬约束的构建,从而避免在优化过程中初始条件不在约束范围内的问题,提高了约束的准确性和优化效率。
2、速度约束
下面来看速度约束,一般把速度约束写成以下形式:也就是
,其中
是车辆的速度,
是最大允许速度,
可以帮助MPC在遇到这样的情况时,即使速度超过可行区域范围,也能成功地找到一个解。这意味着在找到解和违反约束之间进行权衡。同时,松弛因子还可以帮助MPC在初始条件不在可行域范围内时收敛,从而提高了算法的鲁棒性和适应性。
3、横向空间约束
a)软硬约束的设计
在横向空间约束中,我们通常采用两种类型的约束:硬约束和软约束。
- 硬约束:不可违反的边界条件,用于限制车辆行驶的物理边界,如道路边缘的障碍物(如路牙子)或其他不可穿越的障碍。这些约束确保车辆不会超出预定的安全边界,防止车辆偏离车道或与其他物体发生碰撞。
- 软约束:允许一定程度的违反,用于限制车辆行驶的虚拟边界,如车辆的轮胎轨迹。这些约束的目的是在车辆接近车道边缘时提供预警,而不是强制车辆保持在车道中心。
无论是硬约束还是软约束,它们都是基于车辆的“Footprint”与“Bound”之间的距离来描述的:
- Footprint 是指车辆在横向行驶时轮胎接触地面的区域
- Bound 是指车辆行驶时必须遵守的物理或虚拟边界
硬约束确保车辆不会触碰到这些边界,而软约束则允许车辆在一定范围内接近这些边界,但不会实际触碰到它们,如下图所示:
软约束通常用来描述一个更加舒适或适合人类驾驶的行驶范围,它与硬约束之间通常保持一定的距离。这种设计考虑了驾驶员的驾驶习惯和车辆行驶的舒适性,允许车辆在接近硬约束之前做出一定的调整,从而避免因过于严格的硬约束导致的频繁调整和驾驶不适。
软约束的设置为驾驶员提供了一定的操作空间,使他们能够在遵守硬约束的同时,更加自然和流畅地驾驶。这种设计有助于提高驾驶体验,减少因硬约束过于严格而导致的驾驶员疲劳和驾驶压力。
b)横向空间约束的计算
那么怎样来计算横向空间的约束呢?
其中,
,计算车辆四个角的位移
,包括由于转弯而未引入的横向偏差。然后,将这四个角的位移加上横向偏差
,确保这一项的值小于等于在这一点上的边界
。这样做的目的是确保车辆在横向行驶时不会超出预定的边界:
对于软边界来说,车辆的四个角的位置不能超过预定的边界。为了处理这种情况,引入松弛因子(Slack)。通过这种方式,确保车辆的横向位置运动受到有效约束,同时考虑到实际情况中可能出现的微小偏差。
4、加速度约束
a)硬约束
下面来看施加在加速度上的硬约束,在车辆行驶过程中,纵向加速度较高时,横向加速度通常会相应减少。这是因为高速行驶时,车辆需要保持稳定,因此驾驶员不会对方向盘进行剧烈操作。这种情况下,硬约束有助于确保车辆在加速过程中保持横向稳定性,避免因横向加速度过大而导致的失控风险。横纵向加速度的关系如下如所示:
当车辆进行大角度的横向加速运动,例如在急转弯时,我们也会对纵向加速度施加限制。这是因为急转弯时,车辆的速度会相应下降,以避免发生漂移并进入非线性控制区域。
在这样的情况下,对横向和纵向加速度的约束有助于保持车辆的稳定性,确保在复杂路况下的安全行驶。通过这种方式,我们可以确保车辆在各种驾驶条件下都能保持安全,避免因加速度过大而导致的失控风险。
因此,加速度的硬约束定义为如下形式:其中,
那这样做有什么好处呢?
和
相当于以下形式:同时,我们还对横向和纵向加速度的合成加速度进行了有效的约束,以保证车辆的安全性和舒适性。
b)软约束
这种约束是针对舒适度的加速度考量,通常定义为软约束。在这种情况下,我们设定一个加速度的阈值,当车辆的加速度超过这个值时,认为是不舒适的。即:这种软约束的目的是在确保车辆安全的前提下,尽量减少乘客的不适感。
对于减速度也同理:来保证对加速度舒适度的约束,将上面两个式子整合成如下形式:
其中,
三、MPC车辆控制约束完整形式
这样就完整的构建出运用 MPC 的车辆控制约束:
四、总结
可以看一下,首先有了这样的模型:
例如,在之前博客中介绍的曲线坐标车辆模型,就是一个能够有效的把纵向和横向的运动耦合起来,并且很好地描述车辆运动与相对参考轨迹之间的关系。
接着定义了目标函数:
通过之前的讲解,我们将标准的MPC目标函数扩展到了包含松弛因子的软约束,并引入了终端目标函数来保证系统的稳定性和可行性。这种扩展的目标函数允许在预测时域的最后一个阶段施加额外的成本,以确保系统状态在预测结束时达到预定的目标状态。
- 引入松弛因子:可以在硬约束无法完全满足的情况下,通过软约束提供一定的灵活性,从而找到一个可行的解。
- 终端目标函数:确保系统在预测时域结束时能够稳定地达到预期的状态,即使初始条件不在可行域内。
,以及状态约束
和输入约束
,这些约束条件确保了系统在预测时域内和预测时域外的稳定性和可行性。
,选择最优的控制值
这种方法使得MPC能够在有限预测时域内实现对系统状态的优化控制,同时确保系统在预测时域结束时能够稳定地达到预期的状态,从而提高整个控制过程的稳定性和效率。
参考资料
后记:
🌟 感谢您耐心阅读这篇关于 不等式约束和松弛因子 的技术博客。 📚
🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢
🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀
🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡
🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀