单车模型及其线性化

文章目录

  • 1 单车模型
  • 2 线性化
  • 3 实现效果
  • 4 参考资料

1 单车模型

  这里讨论的是以后轴为中心的单车运动学模型,由下式表达:

S ˙ = [ x ˙ y ˙ ψ ˙ ] = [ v c o s ( ψ ) v s i n ( ψ ) v t a n ( ψ ) L ] \dot S = \begin{bmatrix} \dot x\\ \dot y\\ \dot \psi \\ \end{bmatrix} = \begin{bmatrix} vcos(\psi)\\ vsin(\psi)\\ v\frac{tan(\psi)}{L} \\ \end{bmatrix} S˙= x˙y˙ψ˙ = vcos(ψ)vsin(ψ)vLtan(ψ)

其中 S S S代表系统状态, δ \delta δ为单车模型的前轮转角, x , y x,y x,y是车辆在世界坐标系下的位置, L L L为轴距, v v v为车辆速度, ψ \psi ψ代表航向角,单车模型中应该是假设了质心侧偏角为0,所以 ψ \psi ψ应该也等于横摆角,即车头朝向。

  如果把加速度和前轮转角的变化加上,则可以写成:
S ˙ = [ x ˙ y ˙ ψ ˙ v ˙ δ ˙ ] = [ v c o s ( ψ ) v s i n ( ψ ) v t a n ( ψ ) L a γ ] = [ f 1 f 2 f 3 f 4 f 5 ] = f ( S ) \dot S = \begin{bmatrix} \dot x\\ \dot y\\ \dot \psi \\ \dot v \\ \dot \delta \end{bmatrix} = \begin{bmatrix} vcos(\psi)\\ vsin(\psi)\\ v\frac{tan(\psi)}{L} \\ a \\ \gamma \end{bmatrix} = \begin{bmatrix} f_1\\ f_2\\ f_3 \\ f_4 \\ f_5 \end{bmatrix} =f(S) S˙= x˙y˙ψ˙v˙δ˙ = vcos(ψ)vsin(ψ)vLtan(ψ)aγ = f1f2f3f4f5 =f(S)
这里 γ \gamma γ是我自己取的名字,看别的博客把速度和前轮转角用额外的矩阵表示了,这里我放在一起推一推。

2 线性化

  将上述系统 S ˙ = f ( S ) \dot S = f(S) S˙=f(S) S = S r = [ x r y r ψ r v r δ r ] S = S_r = \begin{bmatrix}x_r\\y_r\\\psi_r\\v_r\\\delta_r\end{bmatrix} S=Sr= xryrψrvrδr 处泰勒展开,忽略高次项:

S ˙ ≈ f ( S r ) + d f d S ( S − S r ) \dot S \approx f(S_r) + \cfrac{df}{dS}(S - S_r) S˙f(Sr)+dSdf(SSr)

进而有:
S ˙ − S ˙ r = ( d f 1 d x d f 1 d y d f 1 d ψ d f 1 d v d f 1 d δ d f 2 d x d f 2 d y d f 2 d ψ d f 2 d v d f 2 d δ d f 3 d x d f 3 d y d f 3 d ψ d f 3 d v d f 3 d δ d f 4 d x d f 4 d y d f 4 d ψ d f 4 d v d f 4 d δ d f 5 d x d f 5 d y d f 5 d ψ d f 5 d v d f 5 d δ ) [ x − x r y − y r ψ − ψ r v − v r δ − δ r ] \dot S - \dot S_r = \begin{pmatrix} \frac{df_1}{dx} & \frac{df_1}{dy} & \frac{df_1}{d\psi} & \frac{df_1}{dv} & \frac{df_1}{d\delta} \\ \frac{df_2}{dx} & \frac{df_2}{dy} & \frac{df_2}{d\psi} & \frac{df_2}{dv} & \frac{df_2}{d\delta} \\ \frac{df_3}{dx} & \frac{df_3}{dy} & \frac{df_3}{d\psi} & \frac{df_3}{dv} & \frac{df_3}{d\delta} \\ \frac{df_4}{dx} & \frac{df_4}{dy} & \frac{df_4}{d\psi} & \frac{df_4}{dv} & \frac{df_4}{d\delta} \\ \frac{df_5}{dx} & \frac{df_5}{dy} & \frac{df_5}{d\psi} & \frac{df_5}{dv} & \frac{df_5}{d\delta} \\ \end{pmatrix} \begin{bmatrix}x - x_r\\y - y_r\\\psi - \psi_r\\v - v_r\\\delta - \delta_r\end{bmatrix} S˙S˙r= dxdf1dxdf2dxdf3dxdf4dxdf5dydf1dydf2dydf3dydf4dydf5dψdf1dψdf2dψdf3dψdf4dψdf5dvdf1dvdf2dvdf3dvdf4dvdf5dδdf1dδdf2dδdf3dδdf4dδdf5 xxryyrψψrvvrδδr

求导可得:
S ˙ − S ˙ r = ( 0 0 − v s i n ( ψ ) c o s ( ψ ) 0 0 0 v c o s ( ψ ) s i n ( ψ ) 0 0 0 0 t a n ( δ ) L v L c o s 2 ( δ ) 0 0 0 0 0 0 0 0 0 0 ) [ x − x r y − y r ψ − ψ r v − v r δ − δ r ] = J Δ S \dot S - \dot S_r = \begin{pmatrix} 0 & 0 & -vsin(\psi) & cos(\psi) & 0 \\ 0 & 0 & vcos(\psi) & sin(\psi) & 0 \\ 0 & 0 & 0 & \frac{tan(\delta)}{L} & \frac{v}{Lcos^2(\delta)} \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ \end{pmatrix}\begin{bmatrix}x - x_r\\y - y_r\\\psi - \psi_r\\v - v_r\\\delta - \delta_r\end{bmatrix} = J\Delta S S˙S˙r= 0000000000vsin(ψ)vcos(ψ)000cos(ψ)sin(ψ)Ltan(δ)0000Lcos2(δ)v00 xxryyrψψrvvrδδr =JΔS

最后可得线性化表示

Δ S ˙ = S ˙ − S ˙ r = J Δ S \Delta \dot S = \dot S - \dot S_r = J\Delta S ΔS˙=S˙S˙r=JΔS

在实际应用中需要把它写成差分的形式,假设采样时间间隔为 Δ t \Delta t Δt,则有:

Δ S k + 1 − Δ S k Δ t = J Δ S k \cfrac{\Delta S_{k+1} - \Delta S_{k}}{\Delta t} = J \Delta S_k ΔtΔSk+1ΔSk=JΔSk
最后得到车辆状态变化的差分方程形式
Δ S k + 1 = ( J Δ t + I ) Δ S k \Delta S_{k+1} = (J\Delta t + I)\Delta S_k ΔSk+1=(JΔt+I)ΔSk

3 实现效果

  现在假设采样时间为0.1秒,车辆初始状态在原点,车头朝向是45度,运行1.5秒,分别用单车模型和线性化方法实现两个单车模型,看看跑出来的误差是怎样的。这里给的加速度是 4 m / s 2 4m/s^2 4m/s2,前轮转角不变。效果如下红色是单车模型,绿色是线性化后的单车模型,这里的动画运行时间间隔是0.2s,方便看效果。可以看到在前1秒内这个线性化算出来的车辆状态和单车模型本身的误差还是可以的。
在这里插入图片描述

4 参考资料

  • 无人车系统(一):运动学模型及其线性化
  • 汽车运动学模型的线性化推导过程
  • 上面的视频制作软件是manim,3B1B的视频制作软件哦,用来自己做做简单的动画还是ok的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【vue_3】关于超链接的问题

1、需求2、修改前的代码3、修改之后(1)第一次(2)第二次(3)第三次(4)第四次(5)第五次 1、需求 需求:要给没有超链接的列表添加软超链接 2、修改前…

单片机的串口通信

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、串口是什么?二、单片机结构讲解2.1 串口发送2.2串口接收2.3 还差点什么?2.3.1控制寄存器2.3.1.1 配置方式2.3.1.1 波特率 三、测试通…

Scanner常用知识点

在Java中,Scanner类是用于读取用户输入的工具类,可以从多种输入源读取数据,如标准输入流、文件或字符串。以下是一些Scanner类的常用知识点: Scanner的初始化:在使用Scanner类之前,需要先将其导入到你的Ja…

机器学习——多元线性回归升维

机器学习升维 升维使用sklearn库实现特征升维实现天猫年度销量预测实现中国人寿保险预测 升维 定义:将原始的数据表示从低维空间映射到高维空间。在线性回归中,升维通常是通过引入额外的特征来实现的,目的是为了更好地捕捉数据的复杂性&#…

二十九、微服务案例完善(数据聚合、自动补全、数据同步)

目录 一、定义 二、分类 1、桶(Bucket)聚合: 2、度量(Metric)聚合: 3、管道聚合(Pipeline Aggregation): 4、注意: 参与聚合的字段类型必须是: 三、使用DSL实现聚合 聚合所必须的三要素: 聚合可配…

【读懂AUTOSAR】DoIP模块(1)-- 使用场景和链接的建立规范

引子 --什么是?为什么使用DoIP? DoIP就是通过IP进行诊断的意思(Diagnostic Over IP)。我们熟悉的诊断都是通过CAN总线的啊,为什么要通过IP?IP是什么? IP就是Internet Protocol,就是”互联网协议“啦! 那DoIP就是通过互联网进行的诊断喽,也可以叫做“基于以太网的诊…

Sass基础知识详细讲解【附带表图】

文章目录 前言使用 SassRack / Rails / Merb插件缓存选项语法选择编码 Sass CSS扩展Sass 注释输出 Sass 脚本Sass -规则和指令Sass 控制指令和表达式 Sass 混入指令Sass 功能指令命名约定Sass 输出样式:nested:expanded:compact:compressedSass 扩展缓存存储自定义导入 后言 前…

电子学会C/C++编程等级考试2022年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中数的个数…

Pytorch-gpu环境篇

最最最头疼的就是配环境了 包之间的版本匹配问题 INSTALLING PREVIOUS VERSIONS OF PYTORCH 要考虑到pytorch和torchvision之间的匹配关系 显卡版本匹配问题

小航助学题库蓝桥杯题库stem选拔赛(23年8月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSD…

达索系统3DEXPERIENCE WORKS 2024电磁仿真功能

在设计工作中,将复杂的模型进行网格分割是必不可少的一步,这样可以化繁而简,也可以让后续的工作更容易开展。 电磁仿真可帮助您在复杂、嘈杂的电磁环境中提高效率,在确保兼容性的同时,保障出众性能。 一系列专用求解器…

【论文阅读】ActiveNeRF:通过不确定性估计候选新视图

【论文阅读】ActiveNeRF: Learning where to See with Uncertainty Estimation Abstract1 Introduction3 Background4 NeRF with Uncertainty Estimation5 ActiveNeRF5.1 Prior and Posterior Distribution5.2 Acquisition Function5.3 Optimization and Inference 6 Experimen…

nodejs+vue+elementui足球篮球联赛系统

系统主要是以后台管理员管理为主。管理员需要先登录系统然后才可以使用本系统,管理员可以对个人中心、用户管理、赛事信息管理、球队信息管理、球员信息管理、比赛分值板管理、系统管理等进行添加、查询、修改、删除,以保障足球联赛管理系统的正常运行。…

位图/布隆过滤器+海量数据处理总结

位图 题目: 第一种方法:二分查找。虽然二分的时间复杂度为o(log n),但是这个方法是不可行的,我们就算假设这40亿个数据是已经排序完成了的数据,但是40亿个整数在内存需要消耗的内存就是差不多16G,这个消耗是非常巨大的…

Ubuntu 22.03 LTS 安装deepin-terminal 分屏

安装 源里面自带了这个软件,可以直接装 sudo apt install deepin-terminal 启动 按下Win键,输入deep即可快速检索出图标,点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口,鼠标点击可以切换…

互联网金融智能风险防控技术要求

《互联网金融智能风险防控技术要求》 8月6日,国家市场监督管理总局和国家标准化管理委员会发布《互联网金融智能风险防控技术要求》(GB/T 42929-2023)(以下简称“《要求》”),将于2023年12月1日实施。 《要…

priority_queue优先级队列基本使用

目录 介绍 头文件 基本使用 constructor empty size top push pop swap 使用 大根堆 小根堆 结果 介绍 类似于堆 头文件 #include <queue> 基本使用 constructor empty 判空 size 元素个数 top 堆顶元素 push 入元素 pop 弹出堆顶元素 swap …

快速搭建一个SpringCloud、SpringBoot项目 || 项目搭建要点

1. 基本结构 建立springcloud项目从表入手&#xff0c;分析好需求建立表结构后&#xff0c;使用mybatis-plux生成POJO类&#xff0c;在对应的model模块中。 2. 微服务部分架构 2.1 依赖 service 微服务模块的依赖仅包含如下&#xff0c;数据库等依赖包含在model中&#xff0c…

Linux 内核栈保护

栈保护可以检测栈被写坏的情况。如果怀疑有此类情况&#xff0c;可以将栈保护打开试试 详细可参考文章 栈保护杂记-CSDN博客 栈保护开启 下图是关于strong的解释&#xff0c;在什么情况下会加入栈保护 后面由于gcc版本的原因&#xff0c;好像不支持开启栈保护。后面再进行效果…

红黑树(万字图文详解)

红黑树 1. 红黑树的概念2. 红黑树的性质3. 红黑树节点的定义4. 红黑树结构5. 红黑树的插入操作5.1 按照二叉搜索的树规则插入新节点5.2 检测新节点插入后&#xff0c;红黑树的性质是否造到破坏5.2.1 情况一: cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u存在且为红…