自动驾驶——【规划】记忆泊车特殊学习路径拟合

1.Back ground

在这里插入图片描述
如上图,SLAM学习路线Start到End路径,其中曲线SDAB为D档位学习路径,曲线BC为R学习路径,曲线AE为前进档D档学习路径。
为了使其使用记忆泊车时,其驾驶员体验感好,需去除R档倒车部分轨迹,并拟合一条可用的曲线

2.Algorithm Introduction

在这里插入图片描述
D点作为起点,D(XD,YD,theta_D),C点作为终点(XC,YC,theta_C),使用y = a0 + a1 * x + a2 * x^2 + a3 * x^3拟合曲线DC,有:
YC = a0 + a1 * XC+ a2 * XC ^2 + a3 * XC^3
YD = a0 + a1 * XD + a2 * XD ^2 + a3 * XD ^3
tan(theta_C) = a1 + 2 * a2 * XC + 3 * a3 * XC^2
tan(theta_D) = a1 + 2 * a2 * XD + 3 * a3 * XD^2
即可求解a0 a1 a2 a3,进而得出曲线DC。
最后优化的曲线为SDCE。

3.Coding using MATLAB

%Function:记忆泊车学习路径拟合
%Create by:Juchunyu
%Date:2023-09-01 17:00:42


%设计轨迹x,y
% y = 2 (10>=x>=0)
% y = -1.2/50 *x^2 - 4.4/10 *x   (10>=x>=5)
% y = 1.6 (20>=x>=5)
slam_x     = [];
slam_y     = [];
slam_theta = [];
GearInfo   = [];%D:4 R:2
D  = 4;
R  = 2;
%Generate trajpoint
for i = 0 : 0.2 :10
    slam_x   = [slam_x i];
    slam_y   = [slam_y 2];
    GearInfo = [GearInfo D];
    slam_theta = [slam_theta 0];
end
for i =10:-0.2:5
    slam_x   = [slam_x i];
    y_temp   = -1.2*i*i/50 + 4.4 * i/10;
    slam_y   = [slam_y y_temp];
    GearInfo = [GearInfo R];
    slam_theta_temp = -2.4*i/50 - 4.4/10;
    slam_theta = [slam_theta slam_theta_temp];
end
    
for i = 5:0.2:20
    slam_x   = [slam_x i];
    slam_y   = [slam_y 1.6];
    GearInfo = [GearInfo D];
    slam_theta = [slam_theta 0];
end

figure(1)
plot(slam_x,slam_y);
title('SLAM学习曲线')
hold on 
%%处理算法


%检测倒车 只检测一次倒车
Index_start = 0;
Index_end   = 0;
Index_startArr = [];
Index_endArr   = [];

[m_ size_] = size(slam_x);

while i < size_
    Index_start = 0;
    Index_end   = 0;
    finish_Flag = 0;
    if(GearInfo(1,i) == R)
        Index_start = i;
        j = Index_start;
        while j < size_
            if GearInfo(1,j) == D
                Index_end   = j;
                finish_Flag = 1;
                break;
            end
            j = j + 1;  
        end
        if(finish_Flag == 1)
            Index_startArr = [Index_startArr Index_start];
            Index_endArr   = [Index_endArr Index_end];
        end
        i = j;
    end
    i = i + 1;
end


PointCIndx = Index_endArr(1,1);
PointBIndx = Index_startArr(1,1); 
PointAIndx = 0;
%处理算法
% find near Point
min_ = 1000000;
for i = 1:1:Index_startArr(1,1)
    dist = ((slam_x(1,PointCIndx) - slam_x(1,i))^2 + (slam_y(1,PointCIndx) - slam_y(1,i))^2)^(0.5);
    if(dist < min_)
        min_       =  dist;
        PointAIndx = i;
    end
end

%计算DA

distDA = ((slam_x(1,PointAIndx) - slam_x(1,1))^2 + (slam_y(1,PointAIndx) - slam_y(1,1))^2)^(0.5);

%往前推算1m
PointDIndx = PointAIndx;
if(distDA > 1.0)
   for i = PointAIndx:-1:1
        dist_  = ((slam_x(1,PointAIndx) - slam_x(1,i))^2 + (slam_y(1,PointAIndx) - slam_y(1,i))^2)^(0.5);
        if(dist_ > 1.0)
          PointDIndx = i;
          break; 
        end
   end
end

%处理D点到C点曲线平滑
PointDx = slam_x(1,PointDIndx);
PointDy = slam_y(1,PointDIndx);

PointCx = slam_x(1,PointCIndx);
PointCy = slam_y(1,PointCIndx);
%A*X = B

A(1,1) = 1;
A(1,2) = PointCx;
A(1,3) = PointCx * PointCx;
A(1,4) = PointCx * PointCx * PointCx;

A(2,1) = 1;
A(2,2) = PointDx;
A(2,3) = PointDx * PointDx;
A(2,4) = PointDx * PointDx * PointDx;

A(3,1) = 0;
A(3,2) = 1;
A(3,3) = 2 * PointCx;
A(3,4) = 3 * PointCx * PointCx;

A(4,1) = 0;
A(4,2) = 1;
A(4,3) = 2 * PointDx;
A(4,4) = 3 * PointDx * PointDx;

B(1,1) = PointCy;
B(2,1) = PointDy;
B(3,1) = tan(slam_theta(1,PointCIndx));
B(4,1) = tan(slam_theta(1,PointDIndx));

X = A^-1 * B;

%%拟合曲线系数
a0 = X(1,1);
a1 = X(2,1);
a2 = X(3,1);
a3 = X(4,1);

%重组轨迹曲线
slam_Xfinal = [];
slam_Yfinal = [];
slam_thetaFinal = [];
for i = 1:1:PointDIndx
    slam_Xfinal = [slam_Xfinal slam_x(1,i)];
    slam_Yfinal = [slam_Yfinal slam_y(1,i)];
    slam_thetaFinal = [slam_thetaFinal slam_theta(1,i)];
end

%拟合曲线DC
for x = PointDx:0.2:PointCx
    slam_Xfinal = [slam_Xfinal x];
    y_temp      = a0 + a1 * x + a2 * x^2 + a3 * x^3;
    theta_temp  = a1 + 2 * a2 * x + 3 * a3 *x^2;
    slam_Yfinal = [slam_Yfinal y_temp];
    slam_thetaFinal = [slam_thetaFinal theta_temp]; 
end

%组合后部分曲线
for i = PointCIndx:1:size_
    slam_Xfinal = [slam_Xfinal slam_x(1,i)];
    slam_Yfinal = [slam_Yfinal slam_y(1,i)];
    slam_thetaFinal = [slam_thetaFinal slam_theta(1,i)];
end

hold on 

figure(2)
plot(slam_Xfinal,slam_Yfinal,'r');
title('处理后的SLAM学习曲线')

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

4.Exist Problems

但是存在问题,
(1) AC距离很小的时候的处理
(2) 学习路线中多次倒车的处理
(3) DC在X轴方向投影距离很小时的处理。

2030901
鞠春宇

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

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

相关文章

画流程图都可以用哪些工具?

在日常生活中&#xff0c;我相信我们很多人都看到过流程图。对于设计师来说&#xff0c;它还需要涉及流程图来反映用户的旅程和交互方式。那么你知道哪些流行的流程图设计软件呢&#xff1f;作为高级设计师&#xff0c;我今天推荐10款流程图设计软件。你可以和我一起读这篇文章…

Aidex 移动端快速开发框架# RuoYi-Uniapp项目,uniapp vue app项目跨域问题

参考地址&#xff1a; manifest.json官方配置文档&#xff1a;manifest.json 应用配置 | uni-app官网 Chrome 调试跨域问题解决方案之插件篇&#xff1a; uni-app H5跨域问题解决方案&#xff08;CORS、Cross-Origin&#xff09; - DCloud问答 其实uni-app官方有解决跨域的办…

【C++心愿便利店】No.4---C++初谈类和对象

文章目录 前言一、面向过程和面向对象初步认识二、类的引用三、类的定义四、类的访问限定符及封装五、类的作用域六、类的实例化七、类对象模型八、this指针 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&…

uniapp 配置并使用 VueX

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 uni-app 内置了 VueX 1、创建需要的文件 右键点击 根目录【我的是 uni-shop】&#xff0c;然后新建 目录&a…

OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV,为 DeckLink 提供 HDR 回放功能

导读OBS Studio 30.0 现已推出公开测试版&#xff0c;承诺为这款广受欢迎的免费开源截屏和流媒体应用程序提供多项令人兴奋的新功能&#xff0c;以及大量其他更改和错误修复。 OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV&#xff08;快速同步视频&#xff09;、WHIP/WebRT…

对战ChatGPT,创邻科技的Graph+AI会更胜一筹吗?

大模型&#xff08;大规模语言模型&#xff0c;即Large Language Model&#xff09;的应用已经成为千行百业发展的必然。特定领域或行业中经过训练和优化的企业级垂直大模型则成为大模型走下神坛、真正深入场景的关键之路。 但是&#xff0c;企业级垂直大模型在正式落地应用前…

idea --Git Commit Template插件

Git Commit Template是一款免费的IntelliJ IDEA插件&#xff0c;用于提供Git提交模板。该插件可以帮助开发者编写规范的Git提交信息&#xff0c;提高代码管理效率。 首先安装插件&#xff1a; 使用Git Commit Template插件: 注&#xff1a;long description和Breaking changes…

新能源汽车动力总成系统及技术

需要动力系统总成的请联&#xff1a;shbinzer 拆车邦 需要动力系统总成的请联&#xff1a;shbinzer 拆车邦 需要动力系统总成的请联&#xff1a;shbinzer 拆车邦 需要动力系统总成的请联&#xff1a;shbinzer 拆车邦 需要动力系统总成的请联&#xff1a;shbinzer …

卸载Pycharm

1.运行 ‪‪D:\PyCharm 2019.3.3\bin\Uninstall.exe 2.删除相关注册表 删除 HKEY_CURRENT_USER\Environment\PyCharm 文件 删除 HKEY_CURRENT_USER\Software\JavaSoft\Prefs\jetbrains 文件夹 3.删除本地缓存 4.重启

博流RISC-V芯片Eclipse环境搭建

文章目录 1、下载 Eclipse2、导入 bouffalo_sdk3、编译4、烧录5、使用ninja编译 之前编译是通过 VSCode 编译&#xff0c;通过手工输入 make 命令编译&#xff0c;我们也可以通过 Eclipse 可视化 IDE 来编译、烧录。 1、下载 Eclipse 至 Eclipse 官网 https://www.eclipse.org…

下面是实践百度飞桨上面的pm2.5分类项目_logistic regression相关

part1:数据的引入&#xff0c;和前一个linear regression基本是一样 part2:数据解析——也就是数据的“规格化” 首先&#xff0c;打算用dataMat[]和labelMat[]数据存储feature和label&#xff0c;并且文件变量fr 然后&#xff0c;是这个for line in fr.readlines()循环&#…

kubernetes进阶 (一) 环境搭建

我是基于一台centos7.6的腾讯云主机进行操作的&#xff0c;配置为4C8G&#xff0c;之前的文档自己试着搭建发现有问题了&#xff0c;这里重新整理下笔记&#xff0c;集群版本选择1.22.2&#xff08;一年前搭的&#xff09;用的还不错 清理环境 之前我的环境可能装过docker或者什…

实现公网远程访问:Windows本地快速搭建SFTP文件服务器并配置端口映射

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

最详细Maven下载、安装、配置教程

Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的开源项目&#xff0c;其主要服务于基于Java平台的项目创建&#xff0c;依赖管理和项目信息管理。maven是Apache的顶级项目&#xff0c;解释为“专家&#xff0c;内行”&#xff0c;它是一个项目管理的工具&…

JVM调优指令参数

常用命令查找文档站点&#xff1a;https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html -XX:PrintFlagsInitial 输出所有参数的名称和默认值&#xff0c;默认不包括Diagnostic和Experimental的参数。可以配合 -XX:UnlockDiagnosticVMOptions和-XX:UnlockEx…

【JavaEE】Spring事务-@Transactional参数介绍-事务的隔离级别以及传播机制

【JavaEE】Spring 事务&#xff08;2&#xff09; 文章目录 【JavaEE】Spring 事务&#xff08;2&#xff09;1. Transactional 参数介绍1.1 value 和 transactionManager1.2 timeout1.3 readOnly1.4 后面四个1.5 isolation 与 propagation 2. Spring 事务隔离级别 - isolation…

缓存技术(缓存穿透,缓存雪崩,缓存击穿)

大家好 , 我是苏麟 , 今天聊一聊缓存 . 这里需要一些Redis基础 (可以看相关文章等) 本文章资料来自于 : 黑马程序员 如果想要了解更详细的资料去黑马官网查看 前言:什么是缓存? 缓存,就是数据交换的 缓冲区 (称作Cache [ kʃ ] ),俗称的缓存就是缓冲区内的数据,是存贮数据的…

一体化数据安全平台 uDSP 获“金鼎奖”优秀金融科技解决方案奖

近日&#xff0c;2023 年中国国际金融展“金鼎奖”评选结果揭晓&#xff0c;原点安全打造的“一体化数据安全平台 uDSP”产品获评“金鼎奖”优秀金融科技解决方案奖。该产品目前已广泛应用于银行业、保险企业、证券、医疗、互联网、政务、在线教育等诸多领域。此次获奖再次印证…

ShardingSphere——压测实战

摘要 Apache ShardingSphere 关注于全链路压测场景下&#xff0c;数据库层面的解决方案。 将压测数据自动路由至用户指定的数据库&#xff0c;是 Apache ShardingSphere 影子库模块的主要设计目标。 一、压测背景 在基于微服务的分布式应用架构下&#xff0c;业务需要多个服…

vue3渲染函数h的简单使用——定义局部组件

vue3渲染函数h的简单使用 基本用法 创建 Vnodes Vue 提供了一个 h() 函数用于创建 vnodes&#xff1a; import { h } from vueconst vnode h(div, // type{ id: foo, class: bar }, // props[/* children */] )更多用法 详情查看官方文档 在SFC中定义局部组件使用 h函数…