规划决策算法(四)---Frenet坐标系

知乎:坐标系转换

1.Frenet 坐标系

什么是 Frenet 坐标系:
为什么使用 Frenet 坐标系: 通常情况,我们只会关注车辆当前距离左右车道线的距离,来判断是否偏离车道,是否需要打方向盘进行方向微调。而不是基于汽车的出发点,那样就太远了
往往道路是弯曲的,在直角坐标系下要计算出车辆行驶的距离要考虑道路曲率会非常麻烦。而在Frenet坐标系中,原点所在参考线与车道中心线平行,容易确定车辆偏离车道中心线的距离以及车辆沿车道中心线的行驶距离。因此使用Frenet坐标系可以忽略道路曲率的影响,让道路表达更加直观、简洁。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Frenet 坐标系相当于把道路抻直了

在这里插入图片描述

2.笛卡尔坐标系

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

3.两者转换

在实践中只需要记住结论
推导博客
在这里插入图片描述
某一时刻,假设车辆质心在全局笛卡尔坐标系下的坐标为(x,y)
**原点:**车辆质心到参考线上的投影点称为
原点切线方向称为s轴方向或纵轴方向
原点法线方向称为d轴方向或横轴方向
s:值指的是参考线上的原点与起点之间曲线的长度,也就是车辆在道路上的纵向行驶距离。
d:值指的是原点与车辆质心之间的距离,也就是车辆偏离道路中心线的距离。
车辆质心随着时间在不断变化,因此Frenet坐标系的原点也在不断变换,所以Frenet坐标系是一个移动坐标系。

4.存在的问题

输入的坐标往往是笛卡尔坐标,在中间预测轨迹时使用 Frenet 坐标,最后输出给下游时还要转换成笛卡尔坐标,所以需要将 Frenet 和笛卡尔坐标之间相互转换,但是将 Frenet 坐标转为笛卡尔坐标会有以下问题
在这里插入图片描述

5.参考线生成

如果 Frenet 坐标建立的不够精确就会导致问题越明显,所以参考线的生成要满足一下约束,最终效果生成一条平滑的曲线 :
在这里插入图片描述

S1 :插值扩充点的个数

在这里插入图片描述
S2:将点与点之间变得平滑

a. 考虑为了使连接成的轨迹尽可能满足平滑的要求,参考线之间应该又怎样的性质?

    1. 直线平滑度最高,自车行驶也最容易;对应图中theta越小、|P2P4|越小则越接近直线,如果 thete 很大就会是一条直线
    1. 行驶距离越短越好,所以相邻两点距离和应该越小越好 m i n ∑ ∣ ∣ P k P k − 1 ∣ ∣ 2 min\sum ||P_{k}P_{k - 1}||_{2} min∣∣PkPk12
    1. 点间距越均匀越好 m i n { a b s ( ∣ ∣ P k + 1 P k ∣ ∣ 2 − ∣ ∣ P k P k − 1 ∣ ∣ 2 ) } min\left \{ {abs(||P_{k+1}P_{k}||_{2} - ||P_{k}P_{k-1}||_{2})} \right \} min{abs(∣∣Pk+1Pk2∣∣PkPk12)}
    1. 为了避免调整位置前后轨迹变化太大,应该限制每个点可以偏移原始点的位置,
      同时最小化偏移距离 m i n ∑ ∣ ∣ P k P k ′ ∣ ∣ 2 min\sum ||P_{k}P_{k}{'}||_{2} min∣∣PkPk2

b. 把这个问题用数学表达式写出来:考虑上面提到的性质,把不满足上述性质的程度记作J,根据上面的描述,J应该包含下面几项,注意式中都对距离取了平方,取平方可以提升计算效率
1. 平滑代价: ∑ ∣ ∣ 2 P k − P k − 1 − P k + 1 ∣ ∣ 2 2 \sum ||2P_{k} - P_{k - 1} - P_{k + 1}||_{2}^{2} ∣∣2PkPk1Pk+122
2. 偏移代价: ∑ ∣ ∣ P k P k ′ ∣ ∣ 2 2 \sum ||P_{k}P_{k}{'}||_{2}^{2} ∣∣PkPk22
3. 距离代价: ∑ ∣ ∣ P k P k − 1 ∣ ∣ 2 2 \sum ||P_{k}P_{k - 1}||_{2}^{2} ∣∣PkPk122(此部分代价同时可以反应均匀性)
c. 每个点还应该满足位置限制条件,也就是将每个点限制在框中
1. x m i n < = x k − x k ′ < = x m a x x_{min} <= x_{k} - x_{k}^{'} <= x_{max} xmin<=xkxk<=xmax
2. y m i n < = y k − y k ′ < = y m a x y_{min} <= y_{k} - y_{k}^{'} <= y_{max} ymin<=ykyk<=ymax
d. 于是,我们想让参考点变得符合我们对中心线预期的问题,就变成了下面这样一个数学问题,在满足限制条件的情况下,使得J的值最小,其中w表示各个项目的重要程度;
1. m i n { J = w 1 ∑ ∣ ∣ 2 P k − P k − 1 − P k + 1 ∣ ∣ 2 2 + w 2 ∑ ∣ ∣ P k P k ′ ∣ ∣ 2 2 + w 3 ∑ ∣ ∣ P k P k − 1 ∣ ∣ 2 2 } min\left \{ J = w_{1}\sum ||2P_{k} - P_{k - 1} - P_{k + 1}||_{2}^{2} + w_{2}\sum ||P_{k}P_{k}{'}||_{2}^{2} + w_{3}\sum ||P_{k}P_{k - 1}||_{2}^{2} \right \} min{J=w1∣∣2PkPk1Pk+122+w2∣∣PkPk22+w3∣∣PkPk122}
2. s.t. x m i n < = x k − x k ′ < = x m a x x_{min} <= x_{k} - x_{k}^{'} <= x_{max} xmin<=xkxk<=xmax y m i n < = y k − y k ′ < = y m a x y_{min} <= y_{k} - y_{k}^{'} <= y_{max} ymin<=ykyk<=ymax
e. 问题求解,这其实是一个标准的二次规划问题,调用OSQP这个运算库就可以求解出来结果
1. 二次规划问题:目标函数是凸二次函数(最高次数为2,且为凸函数),约束条件是线性函数
2. 二次规划问题的标准形式 m i n 1 2 x T H x + q T x s . t . a T x = b h T x < = t \begin{array}{l} min\ \frac{1}{2} x^{T}Hx + q^{T}x \\ s.t.\ \ \ \ a^{T}x = b \\ \ h^{T}x <= t \end{array} min 21xTHx+qTxs.t.    aTx=b hTx<=t

上方是问题的形式,下方的问题的约束

6.Frnet 坐标转笛卡尔坐标

龙格现象:
虽然高次多项式会拟合出一条更精确的曲线,但是当次数变高是会出现震荡的现象,所以我们应该使用低次多项的方式拟合一条曲线
在这里插入图片描述
微分基本公式及法则
在这里插入图片描述

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

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

相关文章

【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常

问题现象 BeetISQL中间件版本&#xff1a;2.13.8.RELEASE 客户在调用BeetISQL提供的api向yashandb的表中执行batch insert并将返回sequence设置到传入的java bean时&#xff0c;报如下异常&#xff1a; 问题的风险及影响 影响业务流程正常执行&#xff0c;无法获得batch ins…

matlab仿真 数字信号载波传输(下)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第七 章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all M8; msg[1 4 3 0 7 5 2 6]; ts0.01; T1; %t0:ts:T; t0:ts:T-ts; %x0:ts:length(msg); x0:ts:length(msg)-ts; f…

决策树基础

概述 决策树是一种树型结构&#xff0c;其中每个内部结点表示在一个属性上的测试&#xff0c;每个分支代表一 个测试输出&#xff0c;每个叶结点代表一种类别。决策树学习采用的是自顶向下的递归方法&#xff0c;其基本思想是以信息熵为度量构造一棵熵值下降最快的树&#xff…

一层5x1神经网络绘制训练100轮后权重变化的图像

要完成这个任务&#xff0c;我们可以使用Python中的PyTorch库来建立一个简单的神经网络&#xff0c;网络结构只有一个输入层和一个输出层&#xff0c;输入层有5个节点&#xff0c;输出层有1个节点。训练过程中&#xff0c;我们将记录权重的变化&#xff0c;并在训练100轮后绘制…

github简单地操作

1.调节字体大小 选择options 选择text 选择select 选择你需要的参数就可以了。 2.配置用户名和邮箱 桌面右键&#xff0c;选择git Bash Here git config --global user.name 用户名 git config --global user.email 邮箱名 3.用git实现代码管理的过程 下载别人的项目 git …

反爬虫限制:有哪些方法可以保护网络爬虫不被限制?

目前&#xff0c;爬虫已经成为互联网数据获取最主流的方式。但为了保证爬虫顺利采集数据&#xff0c;需要防范网站的反爬虫机制&#xff0c;降低IP被限制的风险&#xff0c;这样才能提高爬虫工作的效率。那么&#xff0c;如何防止网络爬虫被限制呢&#xff1f;下面介绍几种有效…

dpdk发送udp报文

dpdk接收到udp报文后&#xff0c;自己构造一个udp报文&#xff0c;将收到的报文中的源mac&#xff0c;目的mac&#xff0c;源ip&#xff0c;目的ip&#xff0c;源端口和目的端口交换下顺序填充到新的udp报文中&#xff0c;报文中的负载数据和收到的udp保持一致。 注&#xff1…

Yarn UI 时间问题,相差8小时

位置 $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-common-2.6.1.jar 查看 jar tf hadoop-yarn-common-2.6.1.jar |grep yarn.dt.plugins.js webapps/static/yarn.dt.plugins.js 解压 jar -xvf hadoop-yarn-common-2.6.1.jar webapps/static/yarn.dt.plugins.js inflated: we…

【文件解析漏洞】实战详解!

漏洞描述&#xff1a; 文件解析漏洞是由于中间件错误的将任意格式的文件解析成网页可执行文件&#xff0c;配合文件上传漏洞进行GetShell的漏洞! IIS解析漏洞&#xff1a; IIS6.X&#xff1a; 方式一:目录解析 在网站下建立文件夹的名字为.asp/.asa 的文件夹&#xff0c;其目…

传输层(port)UDP/TCP——解决怎么发,发多少,出错了怎么办

**传输层&#xff1a;**负责数据能够从发送端传输接收端. 传输层所封装的报头里一定有&#xff1a;源端口号和目的端口号的。 **端口号&#xff1a;**可以标识一台主机中的唯一一个进程&#xff08;运用程序&#xff09;&#xff0c;这样当数据传输到传输层的时候就可以通过端…

单向链表(常规和带哨兵)

1.定义 在计算机科学中&#xff0c;链表是数据元素的线性集合&#xff0c;每个元素都指向下一个元素&#xff0c;元素存储上并不连续 2.分类 链表中还有一种特殊的节点称为哨兵结点&#xff0c;也叫哑元结点、首元结点&#xff0c;它不存储数据&#xff0c;通常用作头尾&…

艾体宝干货 | 如何分析关键网络性能指标?持续接收样品试用申请!

网络性能是企业顺利运营的重要基础&#xff0c;而Allegro流量分析仪作为一款强大的网络性能分析工具&#xff0c;为企业提供了深入了解网络运行状况的途径。在本文中&#xff0c;我们将探讨如何利用Allegro 流量分析仪分析关键网络性能指标&#xff0c;以优化网络性能、提高安全…

视频监控国标GB28181平台EasyGBS如何更换默认的SQLite数据库?

视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富&#xff0c;部署灵活&#xff0c;既能作为业务平台使用&#xff0c;也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频EasyGBS平台可提供流媒体接入、处理、转发等服务&#xff0c;支持内网、公网的安防视…

Apache2之Ubuntu-XXE漏洞渗透

一、配置靶场 第一步&#xff1a;打开kali&#xff0c;作为攻击机&#xff0c;打开是黑屏不要蒙圈&#xff0c;是正常的 第二步&#xff1a;配置局域网主机 探测局域网内的所有主机-- 1、查看虚拟机的网络配置 2、查看到我的子网地址为192.168.189.0 第三步&#xff1a;使用…

文心智能体零代码开发实践,创建一个智能体:从理论到实践AI技术落地

文心智能体引领零代码智能体开发新风尚&#xff0c;诚邀您一同探索这前沿科技的魅力&#xff01;以下为实践创建一个叫”从理论到实践AI技术落地“智能体的步骤。 首先登录官网&#xff1a;文心智能体平台AgentBuilder | 想象即现实 登录后点击&#xff1a;创建智能体 输入“…

C语言例题(图形打印,逆序输出,交换数组,平均值)

一.X形图形 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。针对每行输入&#xff0c;输出用“*”组成的X形图案。 代码展示 #include <stdio.h> int main() {int i0;int j…

Vue3 + js-echarts 实现前端大屏可视化

1、前言 此文章作为本人大屏可视化项目的入门学习笔记&#xff0c;以此作为记录&#xff0c;记录一下我的大屏适配解决方案&#xff0c;本项目是基于vite Vue3 js less 实现的&#xff0c;首先看ui&#xff0c;ui是网上随便找的&#xff0c;代码是自己实现的&#xff0c;后面…

LCM接口通讯说明

LCM&#xff08;Liquid Crystal Module&#xff0c;液晶模块&#xff09;接口通讯说明涉及多种接口类型和通讯方式&#xff0c;这些接口和通讯方式的选择取决于具体的应用场景和需求。 最常见的LCD模块接口协议是&#xff1a; 1.并行接口 2.串行接口 3.串行或并行配置到微处…

基于欧氏距离的点云聚类(python)

1、背景介绍 欧式聚类是一种基于欧氏距离度量的聚类算法。它是点云处理中的一个重要步骤&#xff0c;它可以帮助我们从无序的点云数据中提取有意义的信息。一般来说&#xff0c;对点云进行欧式聚类处理&#xff0c;可以帮助后续数据处理&#xff0c;如物体检测与识别、三维重建…

<Rust><iced>基于rust使用iced构建GUI实例:一个CRC16校验码生成工具

前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本文是专栏第五篇实例,是一个CRC16校验码转换程序。 本篇内容: 1、CRC16校验码生成 代码介绍 本文的crc16校验码生成工具,主要设计两个方面,一个是crc16 modbus…