车辆运动学自行车模型

在简要了解了PID控制以后,我们就要接触一些现代的控制算法。在了解高级的车辆控制算法之前,掌握车辆运动模型是非常有必要的。车辆运动模型就是一类能够描述我们的车辆的运动规律的模型。显然,越复杂的模型就越接近现实中的车辆运动规律,本节我们一起了解一下两个广泛使用的车辆模型——运动学自行车模型(Kinematic Bicycle Model) 

无人驾驶系统往往分成感知,决策和控制三个模块,其中无人车的路径规划和底层控制是工作在不同的层的,路径规划层往往会基于更加高层的(感知层,定位层)的信息和底层的(控制层)的实时信息指定行驶的路径,那么从路径规划层传来的就是车辆的参考路径,控制系统需要做的就是严格按照这个参考路径(以及速度等控制输入量)去驾驶我们的车辆,一般来说,我们会用多项式的行驶来描述这个路径曲线,如下所示的三次多项式就可以描述绝大多数的路径了:


无人车的控制依赖于一项称为 模型预测控制(Model Predictive Control) 的简单技术,这种控制的方法是产生一系列的可行的(也就是说在实际上车辆能够做到的)控制输入,基于一定的算法(往往是带约束的非线性优化算法)来调整这一系列的控制输入,使得一个 损失函数(cost function) 最小化,这个损失函数的求解就要依赖于车辆的运动学或者动力学模型的输出和参考的路径的差值求得,这些模型正是本节介绍的内容。

自行车模型(Bicycle Model)
首先我们要简化汽车运动,其中自行车模型就是简单且有效的简化方式。自行车模型基于如下几个假设:

车辆在垂直方向的运动被忽略掉了,也就是说我们描述的车辆是一个二维平面上的运动物体(可以等价与我们是站在天空中的俯视视角)
我们假设车辆的结构就像自行车一样,也就是说车辆的前面两个轮胎拥有一直的角度和转速等,同样后面的两个轮胎也是如此,那么前后的轮胎就可以各用一个轮胎来描述
我们假设车辆运动也和自行车一样,这意味着是前面的轮胎控制这车辆的转角
首先我们简单的在一个二维平面上描述一个车辆:

这里写图片描述

其中 θ是其在 Yaw方向的偏转角度,它是相对于 x轴的逆时针方向的角度,v 是 θ 方向的速度,L 是车辆的轴距(前后轮胎的距离), (x,y) 是车辆的坐标。

下图是该车辆的自行车模型:

这里写图片描述

运动学自行车模型


作为一种自行车模型,运动学自行车模型也假定车辆形如一辆自行车,整个的控制量可以简化为 (a, δf)(a, δf),其中 aa 是车辆的加速度,踩油门踏板意味着正的加速度,踩刹车踏板意味着负的加速度。δfδf 是我们的方向盘转角,我们假定这个方向盘转角就是前轮胎当前的转角。这样,我们使用两个量描述了车辆的 控制输入(control input)。

然后我们定义我们模型中的状态量,运动学自行车模型使用四个状态量来描述车辆的当前状态:


一个简单的运动学自行车模型如图所示:

这里写图片描述

其中 lf和 lr为前轮和后轮到车辆重心的距离。那么更具运动学定理,运动学自行车模型中的各个状态量的更新公式如下:


其中 ββ 可以由如下公式计算求得:


由于绝大多数的汽车后轮都不能够偏转,所以我们的自行车模型就假定后轮的转角控制输入 δr=0,也就是说,方向盘上的控制输入,都反映到了前轮的转角上了。

那么基于这个简单的运动学自行车模型,在给定了一个时刻的控制输入以后,我们可以计算求得 dt 时间以后我们车辆的状态信息(坐标,偏航角以及速度),那么这个模型就可以作为我们模型预测控制下的基础车辆模型了。

运动学自行车模型的Python实现

我们使用Python代码简单实现一个运动学自行车模型类,作为后期我们使用模型预测控制的车辆模型。

from __future__ import print_function

import math
class KinematicModel(object):
    def __init__(self, x, y, psi, v, f_len, r_len):
        self.x = x
        self.y = y
        self.psi = psi
        self.v = v

        self.f_len = f_len
        self.r_len = r_len

    def get_state(self):
        return self.x, self.y, self.psi, self.v

    def update_state(self, a, delta, dt):
        beta = math.atan((self.r_len / (self.r_len + self.f_len)) * math.tan(delta))

        self.x = self.x + self.v * math.cos(self.psi * beta) * dt
        self.y = self.y + self.v * math.sin(self.psi * beta) * dt
        self.psi = self.psi + (self.v / self.f_len) * math.sin(beta) * dt
        self.v = self.v + a * dt
        return self.x, self.y, self.psi, self.v

这个简易的车辆模型中,我们的控制量包含了一个前胎的转角和一个加速度a,由于受车辆机械的限制,车辆本身有很多动作是实现不了的,比如说加速度a的值不可能过大,轮胎的转角也会有极限,我们称这种性质叫做模型非完整性(model nonholonomic)
————————————————
版权声明:本文为CSDN博主「AdamShan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AdamShan/article/details/78696874

  • 2
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 离散点曲率计算是指在一系列点中,通过计算点的坐标以及它们的邻居点坐标的差值,确定曲线的曲率大小。这种计算方式适用于对于给定的点集需要确定整个曲线形状的情况。 曲率c的计算是通过求取三个相邻点的曲率半径,然后取其中最小值得到的。计算公式为:2*S/(a*b*c),其中S为三角形面积,a、b、c为三角形的边长,即三个相邻点之间的距离。 离散点曲率计算的应用场景包括数字地形模型、工程测量等领域。例如,在数字地形模型中,由于地形的复杂性,需要使用曲率计算方法来确定地形的坡度和导流方向,以便在设计和规划工程时进行参考和优化。 总之,离散点曲率计算是一种常用的计算曲线形状的方法,具有广泛的应用前景。通过使用曲率计算方法,可以更好地了解和掌握数据的形态,提高数据处理的效率和准确性。 ### 回答2: 离散点曲率计算是一种用于计算离散点曲线的曲率的方法,通常应用于机械工程、生物医学等领域。在计算离散点曲率时,需要对曲线上的每个点进行计算,这个点的曲率是由其相邻的两个点以及它们之间的距离(即弧长)所决定的。在计算曲率时,一般会用到曲率公式c=(2*sin(h/2))/L,其中c为曲率,h为线段的夹角,L为线段的长度。这个公式可以通过计算相邻两点之间的夹角和距离来得到。在实际应用中,离散点曲率计算可以被用来衡量曲线的弯曲程度,以及识别曲线上的重要特征点,从而实现对曲线的定量分析。 ### 回答3: 离散点曲率计算是一种用于研究曲线、曲面等几何对象的计算方法。它的基本思想是通过对几何对象上离散点处的曲率进行计算,来描述该对象的曲率分布特征。 在离散点曲率计算中,C值是一个重要的参数。它通常被定义为曲率的倒数,即C = 1/R,其中R是曲率半径。C值的大小与曲率半径成反比,即曲率半径越小,C值越大,反之亦然。 在实际应用中,离散点曲率计算常常被用于三维模型建模、图像处理、机器视觉等领域。例如,对于三维模型,可以通过计算其曲率C值来描述其表面的平滑程度和形状特征,从而进行优化和修改。对于图像处理和机器视觉,离散点曲率计算可以用于对图像边缘进行检测、轮廓提取等任务,从而提高图像处理的精度和效率。 总之,离散点曲率计算是一种重要的几何分析工具,可以帮助我们更好地理解和描述几何对象的形态和特征,对于许多科学、工程和技术领域都有着广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值