四、规划控制——车辆轨迹追踪优化控制(1)

概述:本文主要学习车辆轨迹追踪的优化控制——横向动力学模型。


前言

本文将继续深入研究自动驾驶车辆基于动力学模型横向运动的轨迹追踪优化控制——横向动力学模型。


回顾:
车辆运动学建模(不考虑受力情况):通过车辆的转角和速度确定运动关系。
在这里插入图片描述

由于车辆在低速行驶,车辆受力影响小,而在高速时外力对于车辆行驶的影响大,所以,车辆在低速情况下是可行的,可以使用运动学模型;在高速情况下使用运动学模型建模是不准确的,需要动力学建模。

如:在运动学模型中,默认轮胎的朝向和轮胎的速度是一致的,实际在高速行驶时,由于轮胎的侧偏特性,轮胎的朝向并不是轮胎的速度方向,需要对轮胎进行建模。

车辆横向动力学模型(Lateral dynamic model)

动力学主要研究作用于物体的力和物体之间的运动关系。
在这里插入图片描述
车辆的动力学模型是研究车辆的轮胎和其他部件的受力情况,如车辆纵向控制是控制轮胎转速实现,横向控制是控制轮胎转角实现。
正常情况下,车辆的作用力是沿着车辆的三轴(纵轴、横轴、立轴)进行分布,:

  1. 纵轴(Longitudinal axis):主要是驱动力(Motive force)和制动力(Braking force);
  2. 横轴(Transverse axis):主要是转向离心力、侧推力(Lateral force)等等,导致车辆侧向转动。
  3. 立轴(Vertical axis):主要是振动力(Vertical vibration)。

车辆的动力学模型分析的是:

  1. 车辆的平顺性(悬架系统模型——弹簧质量阻尼模型):是对立轴上的力进行分析;
  2. 车辆操纵的稳定性(车轮轮胎模型):是对纵轴,横轴上的力进行分析,目的是让控制车辆沿期望轨迹行驶,保证轨迹路线满足车辆动力学特性。

动力学自行车模型(Dynamic bicycle model)

把车辆简化成自行车模型,为了对横向动力学模型进行建模,我们对其做出假设:

  1. 左右两轮集中在一个轮上,将四轮模型简化成自行车模型(左右两个轮胎的转向角是相似的);
  2. 对道路的倾斜度、悬架运动、空气动力学的影响进行忽略,大大简化建模任务;
  3. 忽略轮胎力的横纵向耦合关系(横纵向力是相互作用的),分为横向动力学和纵向动力学模型,能够更加清楚简单的描述车辆的动力学特性,也能基于该特性进行控制器的设计和分析;

以车辆质心为参考点进行动力学建模:
在这里插入图片描述
因为忽略了空气动力,所以其外力来自于轮胎受到地面的作用力,基于y轴根据牛顿第二定律:

对于横向(平移)表达式(y轴):在这里插入图片描述

其中:

  1. Fyf,Fyr是前后轮受到y方向上的侧向力;
  2. ay是质心在y方向上的惯性加速度,它受到两个因素的影响:
    (1)沿着y轴的运动加速度;
    (2)向心加速度(车辆沿着圆心进行旋转可以看成偏航角(横摆角)转了一圈)
    所以其表达式:
    在这里插入图片描述
    对于横摆(旋转)表达式(z轴):
    在这里插入图片描述

其中:

  1. lf,lr是前后轮对于质心的轴距;
  2. Iz是转动惯量、还有横摆角速度;

所以,综上所述,该模型是由横向运动(y轴)和横摆运动(z轴)两部分运动组成。一般称为2自由度模型。

模型分析

轮胎受力是车辆动力学建模中最重要的部分,轮胎受力分为纵向力和侧向力,纵向力实现车辆加速和制动,侧向力负责车辆的转向,保持车辆行驶的稳定性。
侧向力一般由于路面的侧向倾斜、侧向风、曲线行驶时的离心率作用产生的,
在这里插入图片描述
如图所示,

  1. 前轮纵向力为Fxf,后轮纵向力是Fxr;
  2. 前轮侧向力为Fyf,后轮侧向力是Fyr;
  3. 前轮y方向的力为Fyf’,后轮y方向上的力为Fyr’;

在这里插入图片描述
如图可知:

  1. 转向角δ:轮胎纵轴方向和前轮的转角;
  2. 前轮速度转角θvf:轮胎纵轴方向和前轮速度方向的夹角;
  3. 轮胎侧偏角αf:轮胎方向和前轮速度方向的夹角。

由图可知:
在这里插入图片描述
在侧偏角不超过5°时,侧偏角和侧向力时成线性关系,并且在正常行驶过程中,侧偏角不会超过4-5°,所以,通常认为侧偏角和侧向力成线性关系。(侧偏角在0度时,侧偏斜率称为侧偏刚度。)则侧偏角和侧向力的关系为:
在这里插入图片描述
其中,cf为前轮的侧偏刚度,cr为后轮的侧偏刚度。

已知侧偏刚度为常数,转向角可以测量,要求侧向力,还需要求出速度转角。
在这里插入图片描述
如图所示,可以将前后轮轮胎速度Vf、Vr分解为x轴和y轴上的分速度。
在x轴上,轮胎的速度等于车自身的速度Vx。则,
则,Vfx=Vrx=Vx
在y轴上,轮胎的速度与车自身的速度Vy和绕质心转动的速度lf×r有关,而转速简化为横摆角速度。则,
前轮速度:
在这里插入图片描述
后轮速度(相反):
在这里插入图片描述
所以,可以得出:
在这里插入图片描述
在这里插入图片描述
由上图可知,前轮轮胎侧向力与轮胎y轴方向的力存在一个夹角,后轮不存在,所以:
在这里插入图片描述
可推出:
在这里插入图片描述
上式就建立起了车辆侧向力与车辆运动(速度和转动)之间的关系(横摆角速度近似于车辆绕质心转速)。

公式总结

动力学公式:
在这里插入图片描述

侧偏角:
在这里插入图片描述
侧向力:
在这里插入图片描述
y轴运动加速度:
在这里插入图片描述
转动角加速度:
在这里插入图片描述

线性化模型(Linearized dynamic bicycle model)

  1. 小角度线性模型建立

假设,转向角相对较小,则
在这里插入图片描述
小角度线性模型:
在这里插入图片描述

  1. 模型重组(输入变量和状态量都分开)
    在这里插入图片描述
  2. 状态空间方程表达

(1)速度和转动量为状态量,转向角为输入量,建立状态方程。
在这里插入图片描述

在这里插入图片描述
注意:上述时两轮自行车模型,四轮车模型(×2)在这里插入图片描述
(2)距离、速度、转角、转动量(绕z轴)为状态量,转向角为输入量,建立状态方程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型参数识别(Model parameters identification)

动力学模型中有一些参数往往比运动学模型中的参数难以实时测量识别。所以,这里提供了一些参数如何在现场识别的方法。

  1. 质心估计
    (1)将车辆的四个轮子进行称重,求出每个轮子的质量;
    (2)将每个轮子的质量加起来就是总质量,并把两个前轮和两个后轮分别加起来,得到前轮总质量mf和后轮总质量mr。
    在这里插入图片描述
    (3)求出前轮距离质心的距离lf和后轮距离质心的距离。

在这里插入图片描述
在这里插入图片描述

  1. 转动惯量
    在这里插入图片描述
  2. 侧偏刚度cf,cr
    车厂合作
    (1)侧偏刚度是和轮胎有关,可以通过增加侧向力观察侧偏角的变化情况。
    在这里插入图片描述
    (2)选择适中的侧向力下的较小的侧偏角那一部分的斜率来代表大多数路况下的侧偏刚度。
    在这里插入图片描述
    不和车厂合作
    如果不和车厂合作,上述的图是很难拿到的。
    (1)需要将下式重组
    在这里插入图片描述
    在这里插入图片描述
    (2)根据欧拉定律将上述离散化,以侧偏刚度为系数,转化成最小二乘法的线性回归问题
    在这里插入图片描述
    (3)通过多组实验进行侧偏刚度估计,选择适应于更多路况下的数据(速度不应过快,加减速不应猛烈)尽量保持在线性过程中。
    在这里插入图片描述
    在这里插入图片描述

总结

本文主要是对于自动驾驶规划控制中轨迹追踪的优化控制的学习,主要介绍了横向动力学模型的建模,以及模型分析和参数识别等知识,这篇文章希望可以对想要学习自动驾驶规划控制方向的同学们有一定的帮助。
喜欢的朋友们动动小手点个关注,我会定期分享我的一些知识总结和心得体会,感谢大家!

### OmegaConf 配置管理简介 OmegaConf 是一个强大的 Python 库,用于处理复杂的配置文件。它支持多种数据结构(如字典、列表)以及 YAML 文件的解析和操作。以下是有关如何使用 OmegaConf 的详细介绍。 #### 创建配置对象 可以通过 `OmegaConf.create` 方法创建一个新的配置对象。该方法可以接受字典、YAML 字符串或其他兼容的数据结构作为输入[^1]。 ```python import omegaconf from omegaconf import OmegaConf config_dict = {"database": {"host": "localhost", "port": 6379}} config = OmegaConf.create(config_dict) print(OmegaConf.to_yaml(config)) # 将配置转换为 YAML 格式的字符串 ``` #### 加载外部 YAML 文件 如果需要加载外部 YAML 文件,可使用 `OmegaConf.load` 方法。这使得程序能够轻松读取并应用存储在磁盘上的配置文件。 ```python yaml_file_path = "./example_config.yaml" file_conf = OmegaConf.load(yaml_file_path) # 打印加载后的配置内容 print(file_conf.database.host) # 输出 'localhost' ``` #### 合并多个配置源 当存在多个配置来源时(例如默认设置与命令行参数),可以使用 `OmegaConf.merge` 来无缝合并它们。此功能允许开发者优先级较高的配置覆盖较低级别的配置项。 ```python default_configs = OmegaConf.create({"model": {"type": "resnet50"}}) cli_args = OmegaConf.from_dotlist(["model.type=vgg16"]) merged_config = OmegaConf.merge(default_configs, cli_args) assert merged_config.model.type == "vgg16" # 命令行参数成功覆盖默认值 ``` #### 动态更新配置 除了静态定义外,还可以通过访问器动态修改现有配置中的字段。这种灵活性非常适合运行时调整某些超参数或环境变量。 ```python dynamic_update = file_conf.copy() dynamic_update.database.port = 8080 print(dynamic_update.database.port) # 输出新的端口号 8080 ``` #### 错误处理机制 为了防止非法赋值破坏整个系统的稳定性,OmegaConf 提供了严格的模式控制选项。启用严格模式后,任何未声明过的键都将引发异常提示用户修正错误。 ```python strict_mode_enabled = file_conf.copy() strict_mode_enabled.set_struct(True) # 开启只读保护状态 try: strict_mode_enabled.new_field = True # 此处会抛出 AttributeError 异常 except AttributeError as e: print(f"Catch expected error: {e}") ``` --- ### 总结 以上展示了 OmegaConf 在不同场景下的典型用法,包括但不限于初始化配置实例、加载外部资源、融合多层设定逻辑以及实施安全防护措施等方面的功能特性。希望这些例子能帮助快速掌握其核心概念和技术要点!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值