手把手教你做python无人驾驶车辆控制之车辆运动学模型(一)
车辆控制简述
车辆控制包含横向控制与纵向控制。横向控制用于对方向盘的控制,纵向控制主要对油门、刹车的控制,两者协同控制保证无人车按照预定的参考轨迹行驶。
比如横向控制可以直观的分为两类:
- 无模型的横向控制(即PID控制)
- 有模型的横向控制(基于运动学模型与基于动力学模型)
基于运动学与动力学模型的控制中,选取模型参考点的不同构建的跟踪误差模型也不相同,根据以往的经典控制方法可分为:
- 基于前轮反馈的控制(以车辆前轮为参考点)
- 基于后轮反馈的控制(以车辆后轮为参考点)
- 基于车辆质心的控制(以车辆质心为参考点)
二轮自行车运动学模型
下面建立简化的二轮自行车模型 ,以便后面的控制 。
首先对模型进行假设:
(1)车辆无垂向运动,只考虑x-y平面运动
(2)车辆运动符合自行车运动,以后轮中心为研究点
(3)车辆无滑移,车身方向则为速度方向
![](https://i-blog.csdnimg.cn/blog_migrate/d89e2a9334e82822266912a872f53db2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a4249863d76fcdf1858e269dbe0669e2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/66f8a1aff4c3eb58f30c2af09c16c899.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/582b9280d1e2397393ccec6b78c4bc0e.png)
python代码实现
class vehicle:
def __init__(self,x=0.0,y=0.0,yaw=0.0,v=0.0):
self.x = x
self.y = y
self.yaw = yaw
self.v = v
self.dt = 0.1
def update(self,a,delta):
self.x = self.x + self.v*math.cos(self.yaw)*dt
self.y = self.y + self.v*math.sin(self.yaw)*dt
self.yaw = self.yaw + self.v/L*math.tan(delta)*dt
self.v = self.v + a*dt