[algorithm] 自动驾驶 规划 非线性优化学习系列之1 :车辆横向运动动力学详细解释

写在前面

最近时空联合规划很火,想学习。由于在学校主打学习新能源电力电子方向,转行后也想好好零散的知识体系。计划从车辆运动动力学习,模型预测控制(经典控制目前看主打应用,不会再去深入),非线性优化开始梳理,到最后复现时空联合规划的论文。知识梳理会进行的比较快,实际复现和代码编写会慢慢来完成。

当中如果遇到和实际问题有关的细节知识,作为自己的未来解决方案储备也会强调一下。

目前计划借助的资料有(每本书阅读相关章节):
在这里插入图片描述

车辆动力学及控制第二版

在这里插入图片描述

数值优化
在这里插入图片描述
模型预测控制
在这里插入图片描述
控制之美卷2

1月25日更新书单:

加入
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

其他资料:深蓝学院:机器人中的数值优化

本文是车辆动力学及控制第二版学习的笔记,优先学习2-6章:

主要内容是:车辆侧向简单常用模型

第二章 车辆侧向动力学

车辆侧向运动的运动学模型

在这里插入图片描述
图片来源 Vehicle Dynamics and Control 第二版

这里书上的推导思路复现如下左图
在这里插入图片描述
感觉书上求解目的性不强,这里把为求beta的过程直接利用r相等替换掉未知的r求beta
在这里插入图片描述

此外关于求yawrate的时候我感觉一个小三角形即在知道beta后不需要联立就可以没有必要如书中相加来求,可能是为了简化,可以快速估计,tan近似为线性,而lr+lf 可以直接用轴距而不需要找质心

如果后轮不能转向则有两种思考方式, 那么还是按照左边求法,直接然后忽略后轮转角即可。或者同时由于忽略了后轮转角,角boc就是纯b,同时角obc也是直角,所以通过tan(前轮转角)=ob/ab 求出ob,再用勾股求出oc即为转弯半径。 同时b也可求出了。 有了r的同时我们还有v,所以i也可求出来w了。

对于以上这个模型的假设为:
在这里插入图片描述
在这里插入图片描述

总结:
在这里插入图片描述
图片来源 Vehicle Dynamics and Control 第二版

此外我对这个模型名字有一个疑惑,如果把车视为整个刚体的话,他有三个自由度,为什么叫二自由度模型呢?网上解说是因为横向运动是由纵向和转弯导致的。但是我依然认为如果认真来说 整车为刚体且忽略z向和 pitch roll,这个刚体还剩三个自由度。

答: 我觉得这个自由度和力学里不太一样。按照力学定义必然是三个自由度。但是这里由于该模型研究对象为横向。车辆纵向速度恒定的时候,只关注车辆yawrate和横向速度两个变化量。故称为”二“自由度。

补充 忽略后轮转向和侧偏角时可以进一步简化

见下图左图
在这里插入图片描述
见我的总结

车辆侧向运动的动力学模型

对于高速的应用最好采用动力学模型,因为车轮速度方向不再好假设为车轮朝向。

这里要求一步轮胎侧偏角,其中前轮转角知道 还要多求一步theta vf
在这里插入图片描述
这里如果认为车辆没有后轮转向则有

在这里插入图片描述
图片来源 Vehicle Dynamics and Control 第二版
注意轮胎有两个
在这里插入图片描述

整体推导见我的总结

主要是利用四个方程 :两个轮胎侧向受力模型和横向受力平衡以及转矩平衡。用已知量:车身几何,魔术系数,来表达四个被选取作为车辆运动状态的状态量回头控制量间的关系。即状态转移矩阵和控制输入矩阵。见下图。

结果为
在这里插入图片描述
对于以上这个模型的假设为:车辆自身侧偏移角不大。

如果道路有侧倾

可以在横向受力里带入侧倾公式

在这里插入图片描述
在实际工程中,该角度可以从地图(如果有)或者车道线曲率和速度求得量和总线横向加速度之差获得。但是,试验过不那么准确。或者imu有这个自由度也可以测量。同时当坡度过大的时候,轮胎模型也需要改变,在书的第13章有介绍,但是不是本次学习重点,实际有需要的时候再行学习。

定义误差模型

表述车横向状态的空间状态方程服务目的改为基于横向误差得状态描述的话,需要做如下调整:

定义状态量为从车道中心线到车辆质心的距离,相对车道的车辆方向误差。

该模型要基于三个假设,车速恒定,半径恒定,半径r不是很小,让tan可以线性化。
在这里插入图片描述
在这里插入图片描述
结果为
在这里插入图片描述
结果可以整理为上图。

当所走路线为直线的时候 则认为我期待一个不存在heading的状态(忽略beta侧偏角)那么Pi des 为0.

若考虑坡度则要再横向受力维度加上 sin bank
在这里插入图片描述
书中随后还有提供侧偏角的动力学推导方式,本人实际尚未使用,但原理和之前一样,带入受力和转矩平衡中,以及加入轮胎受力分析,这里要考虑车的速度方向与轴向不一致带来的不同,截图如下(同时还有侧倾角度)在大速度和大弯道下未来可以尝试一下。在MPC建模的时候考虑。
在这里插入图片描述
书中2.7的坐标转化本人理解所讲述意思,但是实际中坐标车辆坐标系和全局坐标系转换另有方法,待未来遇到这种做法再行研究,因为这里的e1 e2 不是一个直观的量,需要量测手段来求
而2.8 我接触的常见道路模型有散点,有三次多项式,有向量。暂时没有接触,且与我复现论文的最终目标关系不大,此两章节省略。

第三章 自动车道保持系统的转向控制

该章节本意在分析使用pid的稳定性和可控性。实际中车辆难以被优化为一个线性时不变系统,同时也不写传递函数,pid一版是在估算前馈后直接调参,虽然有很多工程细节,但是再次收敛于我的目的,不过多研究学习。同时控制我们在使用MPC时候,发现稳定性会比pid好很多。

动力学方程的稳态误差

对于在这里插入图片描述
控制输入为前轮转角 delta,其中把delta是写成状态加控制律的形式,则有
在这里插入图片描述
PI des之前提到是道路弯道有关,如果是直线则不用考虑。
书中研究使用前馈是否可确保弯道行驶的零稳态误差。文中做了拉普拉斯变换以及matlab求解,这里不深入,结果是可以确保稳态横向误差为0但是heading稳态不能保证。
在这里插入图片描述
红框下 我的理解是,稳态过弯道的时候,可以通过前馈来让横向误差为0,但是方向误差会存在。

用几何法来找到稳态转向角的方法见下图
在这里插入图片描述

基于假设半径很大,但是可以有轮胎侧偏角(带入横向动力学),且车辆处于稳态
在这里插入图片描述
则有
在这里插入图片描述
之后较为细节的讨论不做深入。只用PD不开积分足以解决大部分问题。侧倾和死区可以略微开I但是I要比较小做好饱和处理和过点清零工程我见过的简单应用基本到此为止,未来有机会再深入。
一个闭环的pid带前馈的示意图(实际我们用mpc了)
在这里插入图片描述

关于横向的控制总结到此,未来有机会深入学习,也希望大家指正批评!关于离散化空间状态方程可以用欧拉法和龙格库卡等近似,可以见老王或其他笔记,同不过深入,还可见之前总结https://blog.csdn.net/weixin_46479223/article/details/135293785

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/654415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【方法论】费曼学习方法

费曼学习方法是由诺贝尔物理学奖得主理查德费曼提出的一种学习方法。这种方法强调通过将所学的知识以自己的方式解释给别人来提高学习效果。 费曼学习方法的步骤如下: 选择一个概念:选择一个要学习的概念或主题。 理解和学习:用自己的方式学…

随机生成UI不重叠

注释 简单的随机生成UI且不发生重叠&#xff0c;可以修改算法进行更深入的探索 using System.Collections; using System.Collections.Generic; using UnityEngine;public class CellInfo {/// <summary>/// 物体位置/// </summary>public Vector2 pos;/// <s…

Ubuntu本地部署Nextcloud并结合内网穿透实现远程访问搭建个人云盘

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访…

【服务器APP】利用HBuilder X把网页打包成APP

目录 &#x1f33a;1. 概述 &#x1f33c;1.1 新建项目 &#x1f33c;1.2 基础配置 &#x1f33c;1.3 图标配置 &#x1f33c;1.4 启动界面配置 &#x1f33c;1.5 模块配置 &#x1f33c;1.6 打包成APP &#x1f33a;1. 概述 探讨如何将网页转化为APP&#xff0c;这似乎…

[嵌入式系统-4]:龙芯1B 开发学习套件-1-开发版硬件介绍

目录 前言&#xff1a; 一、龙芯 1B 开发学习套件简介 1.1 概述 二、龙芯1B 200开发板硬件组成与接口介绍 2.1 概述 2.2 核心板 2.2.1 CPU 2.2.2 什么是核心板 2.2.3 龙芯1B 200核心板 2.2.4 龙芯1B核心板的接口定义 2.3 开发板 2.3.1 龙芯1B0200开发板 2.3.2 龙芯…

《设计模式的艺术》笔记 - 策略模式

介绍 策略模式定义一系列算法类&#xff0c;将每一个算法封装起来&#xff0c;并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化&#xff0c;也称为政策模式。策略模式是一种对象行为模式。 实现 myclass.h // // Created by yuwp on 2024/1/12. //#ifndef DES…

代码随想录算法训练营|day15二叉树相关推荐

二叉树相关推荐 107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II总结 107.二叉树的层次遍历II 切片本质是一个结构体&#xff0c;包含…

如何使用Everything随时随地远程访问本地电脑搜索文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…

【前沿技术杂谈:解释性人工智能】透视未来:解释性人工智能(XAI)在构建透明、可信AI世界中的角色

【前沿技术杂谈&#xff1a;解释性人工智能】透视未来&#xff1a;解释性人工智能&#xff08;XAI&#xff09;在构建透明、可信AI世界中的角色 引言揭开可解释性人工智能的面纱&#xff1a;定义、重要性与应用什么是可解释性AI&#xff1f;定义XAIXAI的目标 为什么需要可解释性…

蓝桥杯---三国游戏

问题描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件&#xff0c;每个事件之 间相互独立且最多只会发生一次&#xff0c;当第 i 个事件发生时会分别让 X, Y, Z 增加 Ai , Bi ,Ci 。…

智能水龙头行业研究:预计2028年将达到4.8亿美元

智能水龙头(智能水龙头)一般指智能感应水龙头。智能感应水龙头&#xff0c;智能节水&#xff1a;自动感应控制开、关&#xff0c;将手或盛水容器、洗涤物品伸入感应范围内&#xff0c;龙头即自动出水&#xff0c;离开后即停止出水。这种智能水龙头&#xff0c;伸手就来水&#…

Kotlin快速入门5

Kotlin的继承与重写 kotlin的继承 Kotlin中所有类都继承自Any类&#xff0c;Any类是所有类的超类&#xff0c;对于没有超类型声明的类是默认超类&#xff08;Any 不是 java.lang.Object&#xff09;&#xff1a; class LearnKotlin // 默认继承自Any Any类默认提供三个函数…

字符串排序。

#include<stdio.h> #include<stdlib.h> #include <string.h> void swap(char*str1,char*str2); int main() { char str1[20],str2[20],str3[20]; printf("请输入3个字符串,每个字符串以回车结束!:\n"); fgets(str1, (sizeof str1 / …

PyInstaller 将 Python 程序生成可直接运行的程序

图标转换地址&#xff1a;https://convert.app/#google_vignette 官方文档&#xff1a;https://readthedocs.org/projects/pyinstaller/downloads/pdf/stable/#page20 安装pyinstaller pip install pyinstaller执行打包 pyinstaller -i ./resource/w.icns -w -F whv.py --a…

开始学习第二十五天(番外)

今天分享一下写的小游戏啦 头文件game.h #include<stdio.h> #include<time.h> #include<stdlib.h> #define H 3 #define L 3 void InitBoard(char Board[H][L], int h, int l); void DisplayBoard(char Board[H][L], int h, int l); void playermove(cha…

JavaScript的dom基础知识

一、dom概念 概念:DOM全称Document Object Model(文档对象模型),是一种用于HTML和XML文档的编辑接口,给文档提供可一种结构化的表示方法,可以修改文档的内容和结构&#xff0c;DOM开发中主要用于操作元素 二、获取元素 1.根据id获取 getElementById 返回元素对象(获取到匹配…

幻兽帕鲁越玩越卡,内存溢出问题如何解决?

近期幻兽帕鲁游戏大火&#xff0c;在联机组队快乐游玩的同时&#xff0c;玩家们也发现了一些小问题。由于游戏有随机掉落材料的设定&#xff0c;服务器在加载掉落物的过程中很容易会出现掉帧、卡顿的情况。某些玩家甚至在游戏1&#xff5e;2时后就出现服务器崩溃的情况&#xf…

代码随想录算法刷题训练营day18

代码随想录算法刷题训练营day18&#xff1a;LeetCode(257)二叉树的所有路径、LeetCode(404)左叶子之和 LeetCode(257)二叉树的所有路径 题目 代码 import java.util.ArrayList; import java.util.List;/*** Definition for a binary tree node.* public class TreeNode {* …

代码小技巧

1、秒换算小时&分钟 int Time; int Hour,Minutes; HourTime/3600;//小时 Minutes(Time/60)%60;//分钟 Minutes(Time%3600)/60;//分钟 2、C当中比较大小 法一&#xff1a;利用库函数 int main() {int array[] { 5, 2, 9, 1, 7 }; cout << "最大值: "…

STP生成树协议实验

实验大纲 一、什么是生成树协议 二、生成树原理 1.STP工作原理 2.STP主要参数 3.STP根网桥 4.STP协议版本 三、实验 1.构建网络拓扑结构图 2.配置IP地址&#xff08;8台PC机&#xff09;&#xff1a;192.168.7.1~192.168.7.8 3.配置SW1 4.配置SW2 5.配置SW3 6.配置…