自动驾驶决策规划——坐标转换

以下内容来自b站up主忠厚老实的老王,视频链接:自动驾驶决策规划算法序章 总纲与大致目录_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1hP4y1p7es/?spm_id_from=333.999.0.0&vd_source=d36e625f376908cfa88ef5ecf2fb0ed8侵删。

决策规划算法概述

数学基础

五次多项式

 其中隐含的限制就是f(t)的定义域和值域都应该是实数,因为s和t都是真实空间中的轨迹和时间坐标,不能有虚数。

要想使得上面的那个jark最小,积分号中是平方项,也就是当其为0时最小,也就是f(t)的三阶导数为0,也就是f(t)是二次或者二次以下的函数时,三阶导数才为0。

 

 

也就是求泛函 在后面的那三个约束条件下极小值对应的f(t)。

上面把一个带约束的泛函化成了一个无约束的泛函,但是L和f点、f两点、f三点都有关,不能直接使用上面只能处理一阶导数的欧拉——拉格朗日方程。要使用广义的欧拉——拉格朗日方程:

 凸优化

 所以一般求复杂函数在复杂约束条件下的最小值问题都采用迭代法。迭代法的求解速度要比求导法快很多。

以梯度下降法为例说明大概原理:

紫色区域是约束,所以迭代法对初值比较敏感,有可能收敛到局部最小值。

 凸优化是最简单的非线性规划方法。自动驾驶的规划求解不是一个凸优化问题,凸优化必须满cost function是一个凸函数,约束空间是一个凸空间,以避障工况为例:

 整个过程就是:

上述方法也有一定的缺点:

采样点少的话会比较容易收敛到局部最优,采样点多的话会发生维度灾难,如下:

frenet坐标系和Cartesian坐标系坐标转换

概述和基本量

也就是在直角坐标系下想对一个函数求导,那它只有一个dx,这个dx是不区分点在x坐标上的位移还是点的实际位移在x坐标上的分量,因为这两者一样;但是在frenet坐标系中,它们是一样的所以在frenet坐标系中会有d/ds和d/dsx之分。在直角坐标系中可能只有一个dx,但是在frenet坐标系中,可能会有多个ds,举例说明如下:

这里使用dsx和ds来区分不同的s,在很多推导教程中可能中只用ds,会造成理解困难。

预备知识1

证明这个质点位矢r的导数等于v的模乘以τ,τ是质点在切线方向的单位向量。

当dt趋近于0时,ds和dr无限的接近,比值为1,方向会无限的趋近于在位矢r处的切线方向,也就是τ。

 预备知识2:frenet坐标系

其中ds是黑色曲线的弧微分,证明如下:

其中τ+dτ和τ以及dτ形成的三角形是一个等腰三角形,可以求出dτ的大小(也即使dτ的模),方向趋近于τ的法线方向。

其中当dτ无限趋近于0时,sin(dθ/2)等价无穷小于(dθ/2)。

其中 kh是质点轨迹的曲率,kr是道路中心线的曲率,这里的曲率都是在直角坐标系下的曲率。

 这里的ds指的是frenet坐标轴下的弧微分。  

其中ρ是曲率半径,法向加速度是向心加速度。

预备知识总结

 坐标转换(从直角坐标转为frenet坐标)

下面的问题就是已知在笛卡尔坐标系下的,以及frenet坐标系下的坐标起点算这个点在frenet坐标系下的,其中

其中向量三角形是黄色区域,由向量三角形可以得到核心的公式:

得到上面的核心公式,可以该公式和微积分依次求出,但是这个公式还不能直接使用,因为只知道rh,rr和nr未知,此时要找到投影点的相关信息。

投影点及其相关的信息的确定方法如下:

最后计算得到rr的原理如下:

为什么可以原理如下:

 至此投影点的信息已经基本求值完毕。

 下面可以使用上面的核心公式来计算相关量。

s的计算方法是从离散规划点起点开始把各个点的长度累加起来一直累加到投影点(xr,yr)为止。也就是以直线长度近似代替弧长:

 小结

坐标变换(从frenet转换到直角坐标)

 ​​​​​​

 

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

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

相关文章

C++干货--引用

前言: C的引用,是学习C的重点之一,它与指针的作用有重叠的部分,但是它绝不是完全取代指针(后面我们也会简单的分析)。 引用的概念: 引用 不是新定义一个变量 ,而 是给已存在变量取了一个别名 &#xf…

前端铺子-uniapp移动端:跨平台开发新篇章

一、引言 在移动应用开发领域,随着技术的不断进步,用户对应用的需求也日益多样化。如何快速、高效地开发跨平台应用成为了前端开发者面临的一大挑战。uni-app作为一款使用Vue.js开发所有前端应用的框架,凭借其一次编写、多端运行的特性&…

Android:资源的管理,Glide图片加载框架的使用

目录 一,Android资源分类 1.使用res目录下的资源 res目录下资源的使用: 2.使用assets目录下的资源 assets目录下的资源的使用: 二,glide图片加载框架 1.glide简介 2.下载和设置 3.基本用法 4.占位符(Placehold…

文件夹重命名高效批量技巧:轻松实现在文件夹名称左边添加关键字

在日常工作和生活中,我们经常需要对大量的文件夹进行重命名,以便更好地组织和管理文件。然而,手动一个接一个地修改文件夹名称既费时又费力。幸运的是,有一些高效的批量重命名技巧可以帮助我们快速实现这一目标,特别是…

Python管理PVE(Proxmox VE)云平台--节点资源统计

一、前言 写本脚本的初衷是因手动查看统计已分配的PVE资源过于耗时,因此写一个脚本一劳永逸,具体实现方法:利用Python的paramiko模块进行远程命令查看、统计PVE平台各节点已分配的cpu、内存、磁盘空间。 二、步骤 1.构建shell脚本 1.1 统计…

【LangChain学习之旅】—(21)聊天客服机器人的开发(上)

【LangChain学习之旅】—(21)聊天客服机器人的开发(上) “聊天机器人”说明项目的技术实现细节技术实现步骤简述第二步:增加记忆机制第三步:增加检索机制总结“聊天机器人”说明 聊天机器人(Chatbot)是 LLM 和 LangChain 的核心用例之一,很多人学习大语言模型,学习 …

Redis:分布式系统

文章目录 认识RedisRedis和MySQLRedis的场景Redis的设计 分布式单机架构应用数据分离架构应用服务集群架构 认识Redis 在开始Redis学习前,要先认识一下Redis Redis的设计,是想要把它当做是一个数据库,一个缓存,或者说是一个消息…

Selenium + Pytest自动化测试框架实战(下)

前言 本文接上篇文章哟。 一、简单学习元素定位 在日常的工作中,我见过很多在浏览器中直接在浏览器中右键Copy Xpath复制元素的同学。这样获得的元素表达式放在 webdriver 中去运行往往是不够稳定的,像前端的一些微小改动,都会引起元素无法…

采油厂职工向媒体投稿的好方法找到了

作为一名采油厂的职工,我深知在媒体上定期投稿的重要性。这不仅是我们展示工作成果、传播企业文化的重要途径,更是上级考核我们工作表现的一项指标。然而,在投稿的过程中,我经历了不少心酸与困扰。 起初,我采用传统的邮箱投稿方式。每天,我都会花费大量时间在网络上搜索合适的媒…

浏览器执行渲染原理

一、事件循环 事件循环(Event Loop)是JavaScript的执行环境的核心概念之一,它负责处理JavaScript中的异步操作和执行顺序。事件循环使得JavaScript能够在单线程上有效地处理并发,同时保持编程模型的简单性。 以下是事件循环的一…

直播预告 | 明晚19:00,「低代码开放麦」6家低代码领军者线上论道

⏰5月14日晚19:00-20:30【低代码开放麦】邀请到 华为云Astro低代码产品经理高妍 得帆信息aPaaS业务线副总裁&PMO总监 李健达 上海博科Yigo平台研发部总经理、副总裁周志军 零赛云生态发展总监徐健林 普元信息事业部副总经理郝振明 致远互联高级咨询总监纪闪 线上论道…

netstat命令详解

netstat网络连接分析工具 工具说明: netstat 是一款命令行工具,主要是用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。除…