纯跟踪算法(Pure persuit)

news2025/3/1 15:57:49

纯跟踪局部路径规划器

在得到局部路径之后,本项目使用纯跟踪算法通过横向控制器反馈控制小车的转角,从而达到跟踪局部路径的效果,经实验确认,跟踪效果很好。

纯跟踪算法原理如下:

在搭建模型时可以将小车看作车辆运动学自行车模型

运动学是从几何学的角度研究物体的运动规律,包括物体在空间的位置、速度等随时间而产生的变化,因此,车辆运动学模型能反映车辆位置、速度、加速度等与时间的关系。基于运动学模型设计出的控制器也能保证对车辆底层执行层下发的指令是符合车辆运动学约束的。对于运动学自行车模型,我们一般做出如下假设:

不引入任何会影响到车辆动作的力

车辆只在xy平面上运动,在z轴(垂直方向)上的侧倾,前后俯仰等不考虑。

车辆结构就像自行车,左右前轮的转角和转速一致,后轮也是一样。所以两个前轮和后轮各可只用一个轮胎来描述。(转向角小)

前后轮的各自速度矢量和各自轮胎朝向一致,即假设轮胎无侧滑。

而一般只有在低速状态下,轮胎产生的侧向力很小可忽略,所以该模型也主要应用于低速场景。

模型简化图如下:

                              

 

其中符号表示物理意义如下

 

公式推导:

通过正弦定理可以推出:

                

即:

                            

  

其中k为转弯圆弧的曲率。由上图还可以推出:

                                  

那么:

        

 

由上式可知,本控制器的本质是对转角进行控制,以减少横向误差为目标的横向控制器。其中2L/ld2可视为控制器P的参数,L为车辆的轴距,为设定的预瞄距离。本控制器的控制效果主要取决于预瞄距离的取值,一般来说预瞄距离越长,控制效果越平滑,预瞄距离越短,控制效果会越精确(同时也会带来一定的震荡),预瞄距离的选取也和当前车速有关,以下式为例:

                       

其中v为当前车速,g为一可调节的参数,lf为一预设前视距离。

在一些文献中,预瞄距离的选取方式表现如下形式:

                                                                                      

 

上式中常数A=1/(2amax),amax为最大制动加速度。Av2表示最短车辆制动距离。B表示车辆遇到异常时需要的反应时间,Bv为对应的反应距离,C表示车辆的最小转弯半径。

本算法在实际应用中,通常不要求跟踪的目标点到本车后轴中心的距离切实等于预瞄距离。而是会选择采样好的一系列目标点中到后轴中心距离最接近预瞄距离的那个点来近似跟踪。这样做的好处是可以不需要目标轨迹的函数方程来求解真实预测距离坐标,极大地提升了算法的效率。

算法在运用到车辆之前,已经通过实验测试,测试结果如下:

根据实验得出结论:通过纯跟踪法,处理过小拐角处我们可以基本上无误的跟踪曲线。并且在实际车辆运行过程中,我们发现也可以做到基本无误的跟踪。

 部分参考如下博客(165条消息) 无人驾驶之车辆控制(1)纯跟踪(Pure Pursuit)算法与Stanley算法_纯跟踪算法在高速效果不佳_小郑同学爱学习的博客-CSDN博客

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

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

相关文章

MySQL 8.0原理与实战一网打尽,甲骨文数据库专家硬刚5年之作

根据权威数据库技术排名网站DB-Engines今年4月的最新数据,MySQL是全球最流行的开源数据库,没有之一。在所有数据库排名中,MySQL仅次于Oracle,“屈居”亚军之位。但大家从截图中可以看出,MySQL与Oracle的得分差距已经非…

【C语言】分支语句和循环语句(上)

【C语言】分支语句和循环语句(上)前言1.分支语句和循环语句2.什么是语句3.分支语句(选择语句)3.1 if语句3.1.1 悬置else3.1.2 if的书写形式对比3.1.3 在线练习3.2 switch语句3.2.1 switch语句中的break的作用3.2.2 default子句3.2…

记一次csdn图片访问失败问题

前言 家里电脑写博客 一直图片查看不了 以为csdn问题 后来发现可能是网络的问题 公司电脑访问都是正常的,并且换个浏览器也是一样 记录一下排查过程 过程 法1 chrome 关闭对csdn不安全访问 回归一下 可能要找img-blog.csdnimg.cn这个地址的试一下 法2 换dns …

Linux:centos 关闭 防火墙 关闭SELinux 配置临时ip

1.关闭防火墙 systemctl status firewalld.service 查看防火墙状态 这个是运行中,使用 systemctl stop firewalld.service 临时关闭防火墙 这个样子的话重启之后就会再次自动开启防火墙 systemctl disable firewalld.service 永久关闭防火墙 然后重启centos 可以看…

【Python实战】2022年中国富豪榜出炉,首富竟是他......教你一键采集榜单并做可视化效果图(今天是拉仇恨的一天鸭~)

前言 哈喽,我是你们的栗子同学~ 今天是拉仇恨的一天: 教大家一键采集(爬虫数据分析基础实战)新CaiFu中国500富人榜,中国首富竟然是他...... 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利…

深度学习入门之感知机

一. 感知机的定义 感知机接收多个输入信号,输出一个信号。这里所说的“信号”可以想象成电流或河流那样具备“流动性”的东西。像电流流过导线,向前方输送电子一样,感知机的信号也会形成流,向前方输送信息。但是,和实…

后缀数组的应用:在哪个位置插入字符串使得字典序最大

题目描述 给定两个字符串 str1 和 str2,想把 str2 整体插入到 str1 中某个位置,形成最大的字典序,返回字典序最大的结果。其中 str1 长度为 NNN, str2 长度为 MMM,且 N>>MN >> MN>>M。 思路分析 …

【排序算法 下】带你手撕常见排序 (冒泡,快排,归并排序) (动图详解)

欢迎来到 Claffic 的博客 💞💞💞 “只要有花可开,就不允许生命与黯淡为伍。” 前言: 承接上篇,继续带大家手撕常见排序算法,这次讲剩余的两类:交换排序和归并排序。 注:…

C++——模板初阶与泛型编程

文章目录💐专栏导读💐文章导读🌷引例🌷函数模板🌺函数模板的概念🌺函数模板的格式🌷函数模板的原理🌷函数模板的实例化🌺隐式实例化🌺显式实例化&#x1f33a…

Maven安装

目录 1.Maven安装 1.1下载 1.2 安装步骤 1、解压 apache-maven-3.6.1-bin.zip(解压即安装) 2、配置本地仓库 3、配置阿里云私服 4、配置环境变量 1.3 安装检测 1.Maven安装 认识了Maven后,我们就要开始使用Maven了,那么首…

基于OpenCv的图像分割(分水岭算法)

文章目录图像分割distanceTransform()connectedComponents()watershed()查看图像的矩阵图像分割 图像分割对于图像处理和计算机视觉领域非常重要,可以用于对象识别、图像分析、图像压缩等应用。 注意:通常我们把前景目标的灰度值设为255,即白…

网络原理与网络通信

目录 网络互连原理 网络通信 IP地址和端口号 网络协议 五元组 协议分层 OSI七层模型 TCP/IP五层模型 封装和分用 网络互连原理 计算机在最开始的时候是没有网络的,每个计算机之间相互独立。这样处理信息就非常的麻烦,为了能够更高效的利用计算…

一个基于Java线程池管理的开源框架Hippo4j实践

文章目录概述定义线程池痛点功能框架概览架构部署Docker安装二进制安装运行模式依赖配置中心接入流程个性化配置线程池监控无中间件依赖接入流程服务端配置三方框架线程池适配拒绝策略自定义概述 定义 Hippo4j 官网地址 https://hippo4j.cn/ 最新版本1.5.0 Hippo4j 官网文档地…

硬件系统工程师宝典(17)-----你的PCB符合工艺要求吗?

各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。上篇我们说到PCB设计中板子要符合EMC,信号的走线要平顺,信号回流阻抗尽量小。今天我们开始看看板子在生产制造时的工艺问题。…

【安全防御】防火墙(二)

目录 1、防火墙如何处理双通道协议 2、防火墙如何处理nat 3、防火墙支持哪些NAT,主要应用的场景是什么? 4、当内网PC通过公网域名解析访问内网服务器的时候,会存在什么问题,如何解决?请详细说明 5.防火墙使用VRRP…

面试题总结-JS

文章目录一、JS 系列1、原型、原型链2、闭包3、this指向4、call、 apply、 bind 的作用与区别?5、数组扁平化6、var、let、const 区别7、对称加密和不对称加密的区别8、js 的栈和堆9、对象的深拷贝和浅拷贝10、浏览器的事件循环机制11、宏任务和微任务12、script 标…

StringBuilder、StringBuffer、String的区别

StringBuilder与StringBuffer的append方法源码分析 #mermaid-svg-N8145OzAyMWzlewt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-N8145OzAyMWzlewt .error-icon{fill:#552222;}#mermaid-svg-N8145OzAyMWzlewt .er…

C#基础学习--泛型

目录 C#中的泛型 泛型类 声明泛型类 创建构造函数 创建变量和实例 类型参数的约束 Where 子句 泛型方法 声明泛型方法 ​编辑 调用泛型方法 扩展方法和泛型类 泛型结构 泛型委托 泛型接口 协变 逆变 接口的协变和逆变 C#中的泛型 泛型允许我们声明 类型参数化 的代码&…

Jetpack Compose大师乘势而上,创建引人入胜和直观的UI;实用技巧和技术

简述 Jetpack Compose 是 Android 上的一种全新的 UI 工具箱,旨在简化 Android UI 开发流程,提高开发效率和应用性能,并且提供更直观、更灵活、更强大的 UI 定义方式。 Jetpack Compose 提供了一套新的声明式 UI 编程模型,采用 …

【Redis】多级缓存(nginx缓存、redis缓存及tomcat缓存)

【Redis】多级缓存 文章目录【Redis】多级缓存1. 传统缓存的问题2. 多级缓存方案2.1 JVM进程缓存2.1.1 本地进程缓存2.1.2 Caffeine2.2 Nginx缓存2.2.1 准备工作2.2.2 请求参数处理2.2.3 nginx发送http请求tomcat2.2.3.1 封装http查询函数2.2.3.2 使用http函数查询数据2.2.4 ng…