手把手教你做python无人驾驶车辆控制之车辆运动学模型(一)

手把手教你做python无人驾驶车辆控制之车辆运动学模型(一)

    • 车辆控制简述
    • 二轮自行车运动学模型
    • python代码实现

车辆控制简述

车辆控制包含横向控制与纵向控制。横向控制用于对方向盘的控制,纵向控制主要对油门、刹车的控制,两者协同控制保证无人车按照预定的参考轨迹行驶。
比如横向控制可以直观的分为两类:

  • 无模型的横向控制(即PID控制)
  • 有模型的横向控制(基于运动学模型与基于动力学模型)

基于运动学与动力学模型的控制中,选取模型参考点的不同构建的跟踪误差模型也不相同,根据以往的经典控制方法可分为:

  • 基于前轮反馈的控制(以车辆前轮为参考点)
  • 基于后轮反馈的控制(以车辆后轮为参考点)
  • 基于车辆质心的控制(以车辆质心为参考点)

二轮自行车运动学模型

下面建立简化的二轮自行车模型 ,以便后面的控制 。

首先对模型进行假设:
(1)车辆无垂向运动,只考虑x-y平面运动
(2)车辆运动符合自行车运动,以后轮中心为研究点
(3)车辆无滑移,车身方向则为速度方向

手把手教你做python无人驾驶车辆控制之车辆运动学模型(一)_第1张图片
由简化阿克曼转向几何关系:
手把手教你做python无人驾驶车辆控制之车辆运动学模型(一)_第2张图片
建立直角坐标系:
手把手教你做python无人驾驶车辆控制之车辆运动学模型(一)_第3张图片
很容易得出运动学模型状态方程:
手把手教你做python无人驾驶车辆控制之车辆运动学模型(一)_第4张图片

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

你可能感兴趣的:(原创)