基于智能优化算法实现自动泊车的路径动态规划(Matlab代码实现)

news2024/12/26 11:42:01

 目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码


💥1 概述

作为一种方便、快捷的交通工具,汽车已成为人们生活和工作的重要组成部分。随着汽车数量的逐年增加,有限的城市空间显得日趋拥挤,车辆平均分配到的停放空间也日趋缩小,车辆泊车入位困难问题在人们生活中逐渐显现。人们对车辆使用轻便性及安全性要求促使越来越多汽车生产商、科研机构及高校对泊车系统进行研究。目前,国外已有部分汽车生产商推出自己的自动泊车系统,但仅装配于高端车型,我国暂时还未具有自主知识产权的汽车自动泊车系统。因此,本文以低端车型为研究平台,针对自动平行泊车系统的核心技术——泊车控制策略进行探索,目的为提高泊车操作轻便性和泊车过程安全性。 本文采用泊车路径规划和泊车路径跟踪控制方法进行泊车系统控制器控制策略设计。

 本文旨在通过一个简单的脚本实现自动泊车的路径规划动态演示,并对泊车路线进行曲线拟合。

📚2 运行结果

 

🎉3 参考文献

[1]李红. 自动泊车系统路径规划与跟踪控制研究[D].湖南大学,2014.

👨‍💻4 Matlab代码

主函数部分代码:

clc;clear;close all
%   main_line.m
%   一个简单的脚本实现自动泊车的路径规划动态演示,并对泊车路线进行曲线拟合。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 参数设定
up_limit = 6;%上边界纵坐标
front_p = [5, 2]; % 车位信息C点, 参见说明文档最后碰撞检测第二部分
right_limit = 11; % 横坐标右边界

o_3 = [0.5, 1]; % 泊车点
ini = [6, 4];   % 初始点

c_l = 3; % 车长
c_w = 1.4; % 车宽
r_min = 2;    % 最小转弯半径
plot_vec = 0.01; % 动画速度, 数越小, 越快, 为0直接出图
fit_model = 0; % 拟合形式, 1位高次多项式, 其他数为傅里叶级数拟合, 图中最后出现的红色曲线为拟合曲线
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1)
hold on
grid on
%% 泊车区域限定
% 左下角坐标, 沿x长度, 沿y长度
line([0, right_limit],          [up_limit, up_limit]    ,'LineWidth',2, 'Color',[0 0 0]);
line([0, front_p(1)],           [0, 0]                  ,'LineWidth',2, 'Color',[0 0 0]);
line([front_p(1), front_p(1)],  [0, front_p(2)]         ,'LineWidth',2, 'Color',[0 0 0]);
line([front_p(1), right_limit], [front_p(2), front_p(2)],'LineWidth',2, 'Color',[0 0 0]);
axis([0 right_limit 0 up_limit], 'equal');
%% 参数
x = ini(1); y = ini(2); % 车辆后轴中心点坐标
c_o = [x, y];

c_line(1,:) = [x,       x,       y - c_w/2, y + c_w/2];
c_line(2,:) = [x,       x + c_l, y + c_w/2, y + c_w/2];
c_line(3,:) = [x + c_l, x + c_l, y + c_w/2, y - c_w/2];
c_line(4,:) = [x + c_l, x,       y - c_w/2, y - c_w/2];

for i = 1:4
    car(i) = line([c_line(i,1),c_line(i,2)], [c_line(i,3), c_line(i,4)],'LineWidth',1.5, 'Color',[0 0 0]);
end
%% 弧长确定
% 倒推法, 根据最小转弯半径确定弧2的圆心
cir2 = [o_3(1), o_3(2) + r_min];
% plot(cir2(1), cir2(2), 'ro');

% 根据过初始点和泊车点的圆的圆心确定最大半径
k_1 = (c_o(2) - o_3(2)) / (c_o(1) - o_3(1));
k_2 = - 1/k_1;
r_max = y - (k_2 * x + ((c_o(2) + o_3(2))/2 - k_2*(c_o(1) + o_3(1))/2)); % 第一次转弯最大半径

% 弧1, 根据最大最小转弯半径确定的圆心
p_rmin = [x, y - r_min];
p_rmax = [x, y - r_max];

% 最小转弯半径对应的到圆心2-r_min的距离和到初始点的距离, 以及所对应的转角
v_min = p_rmin - cir2;
l_min = norm(v_min) - r_min; % 最小转弯半径时, 与o_3连线得到的半径对比
d_min = y - p_rmin(2);
alpha_min = pi/2 - atan2(abs(v_min(2)), abs(v_min(1)));
% alpha_min*180/pi

% 最大转弯半径对应的到圆心2-r_min的距离和到初始点的距离, 以及所对应的转角
v_max = p_rmax - cir2;
l_max = norm(v_max) - r_min;
d_max = y - p_rmax(2);
alpha_max = pi/2 - atan2(abs(v_max(2)), abs(v_max(1)));
% alpha_max*180/pi

% 2分法找满足相切的两个弧的, 弧1的半径和圆心
l_middle = inf;
d_middle = 0;
% 由于弧1以最小转弯半径对应圆心构成的到初始点的长一般小于到圆心2的点, 同理, 另一个相反. 以此判断条件, 是否满足泊车最低要求.
if (l_min > d_min) && (l_max < d_max)
    while abs(l_middle - d_middle) > 0.000001
        % 根据中间角度对应的射线与x = x交点作为圆心, 计算l和d
        alpha_middle = (alpha_max + alpha_min)/2;
        k_middle = -tan(pi/2 - alpha_middle);
        y_middle = k_middle*c_o(1) + (cir2(2) - k_middle*cir2(1));
        d_middle = y - y_middle;
        v_middle = [x, y_middle] - cir2;
        l_middle = norm(v_middle) - r_min;
        
        if l_middle > d_middle
            v_min = [x, y_middle] - cir2;
            l_min = norm(v_min) - r_min; % 最小转弯半径时, 与o_3连线得到的半径对比
            d_min = y - y_middle;
            alpha_min = pi/2 - atan2(abs(v_min(2)), abs(v_min(1)));
        else
            v_max = [x, y_middle] - cir2;
            l_max = norm(v_max) - r_min;
            d_max = y - y_middle;
            alpha_max = pi/2 - atan2(abs(v_max(2)), abs(v_max(1)));
        end
    end

完整代码:

链接:https://pan.baidu.com/s/1RZPIlULB91qSE9XWwm3ohg 
提取码:4ujz 
--来自百度网盘超级会员V2的分享

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

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

相关文章

在ubuntu上用QT写一个简单的C++小游戏(附源码)

最近老师让用Qt写一个可视化界面&#xff0c;然后就给了一个小视频&#xff0c;好奇的不得了&#xff0c;就照着做了一下 视频链接如下&#xff1a;C案例教学–一个类游戏小程序的设计与实现全过程–用到QT-简单的STL容器 创建项目 1、打开QT 如果不知道怎么下载的话&#xff…

【牛客网刷题】VL8-VL10 generate for语句、比较数大小、function的使用

&#x1f449; 写在前面 &#x1f449; 本系列博客记录牛客网刷题记录 &#x1f449; 日拱一卒&#xff0c;功不唐捐&#xff01; 目录 VL8 使用generate for语句简化代码 题目描述 输入描述 输出描述 RTL 设计 testbench 设计 仿真测试 VL9 使用子模块实现三输入数的大…

【C++ 程序设计入门基础】- Chapter One

目录 一、什么是 C&#xff1f; 1、概念 2、标准库 二、第一个 C 程序 1、下载 C 开发工具 2、开始下载好之后&#xff0c;我们先设置一下编码&#xff0c;解决中文注释不显示的问题。 3、下面我们就可以新建一个源代码 4、 编写完成后&#xff0c;我们就可以运行查看结果…

MyBatis:缓存机制详解

本篇内容包括&#xff1a;MyBatis 缓存机制概述、一级缓存与二级缓存的介绍、配置和具体流程。 一、MyBatis 缓存机制概述 在我们常见的 OLTP&#xff08;on-line transaction processing&#xff0c;联机事务处理&#xff09;类型的 Web 应用中&#xff0c;性能的瓶颈往往来源…

【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

目录前言一、注意力机制&#xff1a;Attention二、自注意力机制&#xff1a;Self-Attention三、多头注意力机制&#xff1a;Multi-Head Self-Attention四、位置编码&#xff1a;Positional EncodingReference前言 最近在学DETR&#xff0c;看源码的时候&#xff0c;发现自己对…

【码上掘金编程挑战赛】- 前端可冲【简历加分项】

【码上掘金编程挑战赛】1.比赛报名2. 比赛介绍赛题一&#xff1a;码上游戏赛题二&#xff1a;码上创意赛题三&#xff1a;码上文言文赛题四&#xff1a;码上10243.报名4.提交作品1.比赛报名 比赛报名链接 https://juejin.cn/challenge/1?utm_source3169 2. 比赛介绍 赛题一…

Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】

Spring5入门到实战------12、使用JdbcTemplate操作数据库&#xff08;增删改查&#xff09;。具体代码讲解 【上篇】 Spring5入门到实战------13、使用JdbcTemplate操作数据库&#xff08;批量增删改&#xff09;。具体代码讲解 【下篇】 以上两篇采用的是注解开发形式xml配置…

自己动手写操作系统系列第3篇,实现时钟和键盘中断

对应labOS版本1.3 程序源码可以私聊我 picirq.h int 0x20~0x2f接收中断信号IRQ0~15&#xff0c;因为int 0x00~0x1f不能用于IRQ。 picirq.c pic0_mask0xfb即1111 1011&#xff1b;PIC1以外全部禁止。pic1_mask0xff即1111 1111&#xff1b;禁止所有中断 pic_enable函数就是将…

【Linux下安装jdk】Linux下安装jdk

Linux下安装jdk 1、-RPM安装 1.1、检查系统是否安装过jdk java -version 检查是否有安装包 rpm -qa | grep java 1.2、安装jdk 查看服务器版本: uname -a 下载jdk对应rpm包: https://www.oracle.com/java/technologies/downloads/#java8 上传安装包至任意目录下&…

用户登录权限校验 JWT【详解】

JWT &#xff08;json web token&#xff09;是当前最流行的用户登录权限校验&#xff08;用户认证鉴权&#xff09;方案。 官网 https://jwt.io/ JWT 的工作流程 客户端填写账号密码访问登录接口 login&#xff0c;将账号密码传给服务端服务端验证账号密码是否正确&#xff0c…

职言 | 校招面试有感,一个面试官的几点建议

职言&#xff1a; 最近一直在校招&#xff0c;我&#xff08;作者&#xff09;和同事说等这段时间结束&#xff0c;我不想再参与面试了&#xff0c;快面吐了。从校招开始&#xff0c;我团队前前后后陆续进了500多封学生简历&#xff0c;我经常一整天排满了面试&#xff0c;聊到…

【电子通识】芯片资料(数据手册/规格书)查询常用网站和方法

目录 1.AlldataSheet 网站&#xff08;建议使用&#xff09; 2.ICpdf 网站 3.CIC中国IC网 网站 4.datasheet&#xff08;不建议使用&#xff09; 5.半导小芯 &#xff08;建议使用&#xff09; 6.立创商城 &#xff08;建议使用&#xff09; 在做硬件的芯片选型、产品维修…

生物信息学笔记02 -- 研究的一般方法

生物信息学概述 以基因组DNA序列信息为源头&#xff0c;识别基因组序列中代表蛋白质和RNA基因的编码区&#xff0c;阐明非编码区的信息特征&#xff0c;破译隐藏在DNA序列中的遗传语言规律 生物信息学研究的内容与方法 研究主要内容 ⚫ 生物学数据的收集、存储、管理与提供 …

C++:继承

文章目录前言一、继承的概念及定义1.继承的概念2.继承的定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员总结前言 本文介绍C中的继承。 一、继承的概念及定义 1.继承的概念 继承机制是面向对象程序设计使代码可…

厨电智能化趋势下,究竟什么才是真正的“用户思维”?

文|智能相对论 作者|佘凯文 近期2022年前三季度的各项经济数据在陆续发布&#xff0c;大环境依然承压&#xff0c;各个行业都在负重前行。 厨电行业在房地产下滑、疫情反复等因素影响下&#xff0c;前三季度同样一直承受着不小的压力&#xff0c;AVC数据显示&#xff0c;202…

【面试官说实现一个顺序表,但听到要求后我沉默了】

在很多人心里&#xff0c;顺序表是数据结构最基础最简单的东西了&#xff0c;如果面试让我们手撕一道顺序表&#xff0c;相信大家心里早就乐开了花&#xff0c;但是面试官真的会出这么简单的题吗&#xff1f; 答案是&#xff1a;当然会&#xff0c;哈哈。 我们来看看面试官的要…

【精选】ARMv8/ARMv9架构入门到精通-[前言]

快速链接: . &#x1f449;&#x1f449;&#x1f449; 个人博客笔记导读目录(全部) &#x1f448;&#x1f448;&#x1f448; 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; 想不想一夜暴富&#xf…

python基于PHP+MySQL的高校公选课管理信息系统

随着我国教育质量提高,在校大学生的数量也在不断的增长。相对应的如何让学生根据自己的兴趣爱好进行在线选课,从而有目的的对学生进行培养,也是当前很多高校教务人员所关心的问题。能够让更多的大学生进行在线自主选课,选择自己所喜欢的课程和教师,我们开发了高校公选课管理系统…

强化学习论文分析3---蜂窝网络联合频谱和功率分配的深度强化学习--《Deep Reinforcement Learning for ......》

目录一、研究内容概述二、系统目标与约束1.系统描述2.系统目标三、DQN、DDPG网络设计四、性能表征本文是对论文《Deep Reinforcement Learning for Joint Spectrum and Power Allocation in Cellular Networks》的分析&#xff0c;若需下载原文请依据前方标题搜索&#xff0c;第…

深入理解java线程池+源码解读

文章目录一.线程池简介1. 什么是线程池2. 线程池的优点3. 线程池中核心关系继承4.对线程池的理解①框架的两极调度模型②核心线程和非核心线程的本质区别二. 线程池核心概念1. 线程池核心参数2.两种常见的线程池①newCachedThreadPool②newFixedThreadPool③newSingleThreadExc…