03Frenet与Cardesian坐标系(Frenet转Cardesian公式推导)
Frenet转Cardesian
1 明确目标
已知车辆质点在Frenet坐标系下的状态:
- Frenet 坐标系下的纵向坐标: s s s
- 纵向速度: s ˙ \dot{s} s˙
- 纵向加速度: s ¨ \ddot{s} s¨
- 横向坐标: l l l
- 横向速度: l ˙ \dot{l} l˙
- 横向加速度: l ¨ \ddot{l} l¨
- 横向坐标变化率: l ′ l' l′
- 横向坐标的二阶变化率: l ′ ′ l'' l′′
已知参考线上任意点状态(下述状态在参考线生成后都可以通过计算得到):
- 参考线上的任意点: s r s_r sr和其对应的 r r ⃗ \vec{r_r} rr
- 参考线上任意点的单位切向量: τ r ⃗ \vec{\tau_r} τr
- 参考线上任意点的单位法向量: n r ⃗ \vec{n_r} nr
- 参考线上任意点的曲率: κ r \kappa_r κr
- 参考线上任意点的曲率变化率: κ r ′ \kappa_r' κr′
求解车辆质点在Cardesian坐标系下的状态:
- 位置向量: r h ⃗ \vec{r_h} rh
- 速度向量: v h ⃗ \vec{v_h} vh
- 切线方向与 x x x轴夹角: θ h \theta_h θh
- 加速度向量: a h ⃗ \vec{a_h} ah
- 曲率: κ h \kappa_h κh
2 公式推导
2.1 基础公式汇总
为了方便查阅,现将前文《01》推导的Frenet基础公式汇总如下:
- 核心关系
r h ⃗ = r r ⃗ + l n r ⃗ (2-1) \vec{r_h} = \vec{r_r} + l\vec{n_r}\tag{2-1} rh=rr+lnr(2-1)
- Frenet最小状态集
l ˙ = l ′ s ˙ (2-2) \dot{l} = l'\dot{s}\tag{2-2} l˙=l′s˙(2-2)
l ¨ = l ′ ′ s ˙ 2 + l ′ s ¨ (2-3) \ddot{l} = l''\dot{s}^2+l'\ddot{s}\tag{2-3} l¨=l′′s˙2+l′s¨(2-3)
-
车辆在Cardesian下的向量导数
r h ⃗ ˙ = v h ⃗ = ∣ v h ⃗ ∣ τ h ⃗ = v h τ h ⃗ (2-4) \dot{\vec{r_h}} = \vec{v_h}= |\vec{v_h}|\vec{\tau_h}=v_h\vec{\tau_h}\tag{2-4} rh˙=vh=∣vh∣τh=vhτh(2-4)τ h ⃗ ˙ = κ h v h n h ⃗ (2-5) \dot{\vec{\tau_h}} = \kappa_hv_h\vec{n_h}\tag{2-5} τh˙=κhvhnh(2-5)
n h ⃗ ˙ = − κ h v h τ h ⃗ (2-6) \dot{\vec{n_h}} =-\kappa_hv_h\vec{\tau_h}\tag{2-6} nh˙=−κhvhτh(2-6)
v h ⃗ ˙ = a h ⃗ = a τ τ h ⃗ + κ h v h 2 n h ⃗ (2-7) \dot{\vec{v_h}} = \vec{a_h} = a_{\tau}\vec{\tau_h} +\kappa_h v_h^2 \vec{n_h}\tag{2-7} vh˙=ah=aττh+κhvh2nh(2-7)
-
匹配点在Cardesian下的向量导数
r r ⃗ ˙ = v r ⃗ = ∣ v r ⃗ ∣ τ r ⃗ = s ˙ τ r ⃗ (2-8) \dot{\vec{r_r}} = \vec{v_r}= |\vec{v_r}|\vec{\tau_r}=\dot{s}\vec{\tau_r}\tag{2-8} rr˙=vr=∣vr∣τr=s˙τr(2-8)τ r ⃗ ˙ = κ r s ˙ n r ⃗ (2-9) \dot{\vec{\tau_r}} = \kappa_r \dot{s} \vec{n_r}\tag{2-9} τr˙=κrs˙nr(2-9)
n r ⃗ ˙ = − κ r s ˙ τ r ⃗ (2-10) \dot{\vec{n_r}} =-\kappa_r \dot{s}\vec{\tau_r}\tag{2-10} nr˙=−κrs˙τr(2-10)
2.2 求解 r h ⃗ \vec{r_h} rh
根据(2-1)有:
r h ⃗ = r r ⃗ + l n r ⃗ (2-11) \vec{r_h} = \vec{r_r} + l\vec{n_r}\tag{2-11} rh=rr+lnr(2-11)
2.3 求解 v h ⃗ \vec{v_h} vh
v h ⃗ = r h ⃗ ˙ = r r ⃗ ˙ + l ˙ n r ⃗ + l n r ⃗ ˙ = s τ r ⃗ + l ˙ n r ⃗ − κ r s ˙ τ r ⃗ (2-12) \begin{align} \vec{v_h} &= \dot{\vec{r_h}}\\ &= \dot{\vec{r_r}} + \dot{l}\vec{n_r} + l\dot{\vec{n_r}}\\ &= s\vec{\tau_r} + \dot{l}\vec{n_r} -\kappa_r\dot{s}\vec{\tau_r} \end{align}\tag{2-12} vh=rh˙=rr˙+l˙nr+lnr˙=sτr+l˙nr−κrs˙τr(2-12)
可以进一步求得
v h = ∣ v h ⃗ ∣ θ h = a r g ( v h ⃗ ) (2-13) \begin{align} v_h &= |\vec{v_h}|\\ \theta_h&=arg(\vec{v_h}) \end{align}\tag{2-13} vhθh=∣vh∣=arg(vh)(2-13)
其中,arg代表求向量的相位角。
求出了 v h ⃗ \vec{v_h} vh,可以进一步求得
τ h ⃗ = v h ⃗ v h (2-14) \vec{\tau_h} = \frac{\vec{v_h}}{v_h} \tag{2-14} τh=vhvh(2-14)
对于二维平面,
n h ⃗ = A τ h ⃗ = [ 0 − 1 1 0 ] τ h ⃗ (2-15) \begin{align} \vec{n_h} &= A\vec{\tau_h} \\ &= \left[ \begin{array}{cc} 0 & -1 \\ 1 & 0 \\ \end{array} \right]\vec{\tau_h} \end{align}\tag{2-15} nh=Aτh=[01−10]τh(2-15)
其中, A A A 是一个二维变换矩阵
Tips:如果是编码的话,(2-15)的乘法也可以直接通过调换坐标进行等价替换,可以进一步提升计算效率。例如, τ h ⃗ = ( x x 2 + y 2 , y x 2 + y 2 ) \vec{\tau_h}=(\frac{x}{\sqrt{x^2+y^2}},\frac{y}{\sqrt{x^2+y^2}}) τh=(x2+y2x,x2+y2y),则 n h ⃗ = ( − y x 2 + y 2 , x x 2 + y 2 ) \vec{n_h}=(\frac{-y}{\sqrt{x^2+y^2}},\frac{x}{\sqrt{x^2+y^2}}) nh=(x2+y2−y,x2+y2x)。
2.4 求解 a h ⃗ \vec{a_h} ah
a h ⃗ = v h ⃗ ˙ = s ˙ τ r ⃗ + s τ r ⃗ ˙ + l ¨ n r ⃗ + l ˙ n r ⃗ ˙ − κ r ( s ¨ τ r ⃗ + s ˙ τ r ⃗ ˙ ) = s ˙ τ r ⃗ + s κ r s ˙ n r ⃗ + l ¨ n r ⃗ + ( − κ r s ˙ τ r ⃗ l ˙ ) + ( − κ r s ¨ τ r ⃗ ) + ( − κ r s ˙ κ r s ˙ n r ⃗ ) = [ ( 1 − κ r l ˙ ) s ˙ − κ r s ¨ ] τ r ⃗ + ( κ r s s ˙ + l ¨ − κ r 2 s ˙ 2 ) n r ⃗ (2-16) \begin{align} \vec{a_h} &= \dot{\vec{v_h}}\\ &= \dot{s}\vec{\tau_r}+s\dot{\vec{\tau_r}} + \ddot{l}\vec{n_r} + \dot{l}\dot{\vec{n_r}} - \kappa_r(\ddot{s}\vec{\tau_r} + \dot{s}\dot{\vec{\tau_r}})\\ &= \dot{s}\vec{\tau_r} + s\kappa_r \dot{s} \vec{n_r} + \ddot{l}\vec{n_r} +(-\kappa_r \dot{s}\vec{\tau_r}\dot{l})+(-\kappa_r\ddot{s}\vec{\tau_r}) + (-\kappa_r\dot{s}\kappa_r \dot{s} \vec{n_r})\\ &=[(1-\kappa_r\dot{l})\dot{s}-\kappa_r\ddot{s}]\vec{\tau_r} + (\kappa_rs\dot{s}+\ddot{l}-\kappa_r^2\dot{s}^2)\vec{n_r} \end{align}\tag{2-16} ah=vh˙=s˙τr+sτr˙+l¨nr+l˙nr˙−κr(s¨τr+s˙τr˙)=s˙τr+sκrs˙nr+l¨nr+(−κrs˙τrl˙)+(−κrs¨τr)+(−κrs˙κrs˙nr)=[(1−κrl˙)s˙−κrs¨]τr+(κrss˙+l¨−κr2s˙2)nr(2-16)
可以进一步求得
a τ = a h ⃗ τ h ⃗ a n = a h ⃗ n h ⃗ (2-17) \begin{align} a_\tau &= \vec{a_h}\vec{\tau_h} \\ a_n &=\vec{a_h}\vec{n_h} \end{align}\tag{2-17} aτan=ahτh=ahnh(2-17)
2.5 求解 κ h \kappa_h κh
由(2-7)可得
κ h = a n v h 2 (2-18) \kappa_h = \frac{a_n}{v_h^2} \tag{2-18} κh=vh2an(2-18)
3 总结
- 还是坚持使用向量推导的一贯作风,不引入三角函数,会使得表达式更简洁;
- 编码时使用向量实现是否比三角函数更快还需要进一步实验(理论上会更快)。
相关文章:
03Frenet与Cardesian坐标系(Frenet转Cardesian公式推导)
Frenet转Cardesian 1 明确目标 已知车辆质点在Frenet坐标系下的状态: Frenet 坐标系下的纵向坐标: s s s纵向速度: s ˙ \dot{s} s˙纵向加速度: s \ddot{s} s横向坐标: l l l横向速度: l ˙ \dot{l} l…...
knowLedge-Vue I18n 是 Vue.js 的国际化插件
1.简介 Vue I18n 是 Vue.js 的国际化插件,它允许开发者根据不同的语言环境显示不同的文本,支持多语言。 Vue I18n主要有两个版本:v8和v9。v8版本适用于Vue2框架。v9版本适用于Vue3框架。 2. 翻译实现原理 Vue I18n 插件通过在 Vue 实例中注…...

【开源免费】基于SpringBoot+Vue.JS微服务在线教育系统(JAVA毕业设计)
本文项目编号 T 060 ,文末自助获取源码 \color{red}{T060,文末自助获取源码} T060,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
expressjs 中的mysql.createConnection,execute 怎么使用
在 Express.js 应用中使用 MySQL 数据库,你通常会使用 mysql 或 mysql2 这样的库来创建和管理数据库连接,并执行查询。然而,mysql.createConnection 并不直接提供 execute 方法。相反,你可以使用 query 方法来执行 SQL 语句。 以…...

每日一题|983. 最低票价|动态规划、记忆化递归
本题求解最小值,思路是动态规划,但是遇到的问题是:动态规划更新的顺序和步长,以及可能存在的递归溢出问题。 1、确定dp数组含义 dp[i]表示第i天到最后一天(可能不在需要出行的天数里),需要花费…...
oracle 正则 匹配 身份正 手机号
1.正则匹配身份证号: regexp_like(card_id,^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$) ^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$ ^[1-9]:第一位数字不能为0。 \d{5}:接下来…...

在树莓派上部署开源监控系统 ZoneMinder
原文:https://blog.iyatt.com/?p17425 前言 自己搭建,可以用手里已有的设备,不需要额外买。这套系统的源码是公开的,录像数据也掌握在自己手里,不经过不可控的三方。 支持设置访问账号 可以保存录像,启…...

2022年6月 Frontier 获得性能第一的论文翻译
为百万兆级加速架构做高性能 Linpack 优化 摘要 我们详细叙述了在 rocHPL 中做的性能优化,rocHPL 是 AMD 对 HPL 基准的开源实现,主要是针对节点进行优化的架构,是为百万兆级系统而设计的,比如:Frontier suppercomput…...

B2B商城交易解决方案:赋能企业有效重塑采购与销售新生态
在电商零售领域,商城系统始终是企业搭建商城的关键利器。 伴随着电商行业的蓬勃发展,各类新模式层出不穷,各种商城系统也应运而生,其中B2B商城更是最为常见的一种。 近年来,得益于电子商务的迅猛发展,B2B商…...
初始C语言(五)
前言 本文章就代表C语言介绍以及了解正式完成,后续进行具体分析和详细解析学习。知识根深蒂固才可以应付后来的学习,地基要打好,后续才会轻松。 十四、结构体 结构体是C语言中最最重要的知识点,使得C语言有能力描述复杂的类型。 …...
mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)
1、SQL 修改表(ALTER TABLE 语句) 在编写一个SQL的ALTER TABLE语句时,你需要明确你的目标是什么。ALTER TABLE语句用于在已存在的表上添加、删除或修改列和约束等。以下是一些常见的ALTER TABLE语句示例,这些示例展示了如何修改表…...

【网络基础】网络常识快速入门知识清单,看这篇文章就够了
💐个人主页:初晴~ 在现在这个高度智能化的时代,网络几乎已经成为了空气一般无处不在。移动支付、网上购物、网络游戏、视频网站都离不开网络。你能想象如果没有网络的生活将会变成什么样吗🤔 然而如此对于如此重要的网络…...
OceanBase 关于一号表笔记与ERROR 1060(42S21)问题
OceanBase 关于客户端访问OceanBase 的表数据的过程说明 1.OBserver中的location cache 会保存observer 曾经访问过的实体表的位置信息(meta table 主要包括 __all_core_table、__all_root_table、__all_tenant_meta_table 三张内部表。OB 集群中所有实体表的 location&#x…...

【四】Spring Cloud OpenFeign原理分析
Spring Cloud OpenFeign原理分析 概述 Spring Cloud 微服务实践也有挺多年了,一直想着总结一下这系列的知识点,最近终于下定决心来出一个Spring Cloud 系列文章了。本文主要围绕fegin组件来进行讲解,文中将会给出基础使用的示例,还…...

EDM平台大比拼 用户体验与营销效果双重测评
本文评测了ZohoCampaigns、Mailchimp、Sendinblue、AWeber四款EDM平台,分别适合中小企业、多平台集成、多功能集成、初学者等需求。建议企业根据自身规模、技术水平和功能需求选择最适合的平台。 一、Zoho Campaigns 功能概述 Zoho Campaigns是Zoho旗下的一款专注…...
开卷可扩展自动驾驶(OpenDriveLab)
一种通用的视觉点云预测预训练方法 开卷可扩展自动驾驶(OpenDriveLab) 自动驾驶新方向?ViDAR:开卷可扩展自动驾驶(OpenDriveLab)-CSDN博客 创新点 在这项工作中,本文探索了专为端到端视觉自动…...

基于大数据的二手电子产品需求分析及可视化系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

SpringBoot——基础配置
但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架(如 Logback、Log4j2 等)中,logging.level.root主要用于设置根日志记录器的日志级别…...

Android OpenGLES2.0开发(三):绘制一个三角形
我们总是对陌生人太客气,而对亲密的人太苛刻 上一篇文章中,我们已经将OpenGL ES环境搭建完成。接下来我们就可以开始我们的绘图之旅了。该篇我们讲解最基本图形三角形的绘制,这是一切绘制的基础。在OpenGL ES的世界里一切图形都可以由三角形拼…...
数据清洗的重要性与方法
在数据分析和机器学习的世界中,数据清洗是一个不可或缺的步骤。 它涉及到对原始数据进行处理,以便使其适合进一步的分析和建模。 数据清洗的重要性 提高数据质量 数据质量直接影响分析结果的准确性。 脏数据(包含错误、重复、不完整的数据&a…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...