基于PID控制的无人车侧向运动阿克曼转向控制仿真

 写在前面,本文为研一下智能控制课程的课程作业报告,主要为基于无人车侧向运动模型的PID控制器设计,控制器设计比较简单,主要是对阿克曼转向模型进行搭建,PI参数调节部分的研究。设计内容分为两部分,分别是简单的转向角单闭环控制,以及基于其设计的位置规划控制。

        这个报告一开始还是想着好好写的,但是到后面模型搭完以后反而懒得折腾报告了,后面做的有点不太好,多多包涵啦

        欢迎关注评论留言点赞哦,模型我就不在这里发了,收费不好下载,有需要的私聊即可,不过我文中说的基本也比较清楚了,照着做应该就行。

1 横摆角速度控制

1.1 模型搭建

 首先根据PPT中的如式所示的横向运动的状态方程,搭建Simulink模型如下图 1所示:

 图 1 横向运动的Simulink仿真模型

         模型中的所有给定参数,使用模型设置中的初始化回调函数进行参数初始化,界面如图 2所示:

 

图 2 初始化回调函数界面

        再根据补充的x、y轴速度和位置的计算公式建立速度计算和位置计算方程如下图 3所示:

 

 图 3位置与速度计算的Simulink仿真模型

 

        这里其实有个小问题,就是对于横向运动而言,物体的前进速度应该是一个给定的量,并不作为系统的输入或是控制量进行考虑。但是在模型的理解上,究竟是Vx作为给定量,再通过角度β计算V和Vy,还是以V作为给定量,再计算Vx和Vy,这里我是有个疑问的,询问了无人所教研室得一位同学,也没有得到确切得答案。

        若是前一种情况则相对较简单,上面涉及到的状态方程可以直接通过Simulink中的state-space模块生成,因为状态空间方程中ABCD这四个矩阵均为定值;而当情况为后一种时,则相对更为复杂,无法通过状态空间模块直接构建系统模型,需要通过积分等模块按照计算公式搭建。因此考虑到前面的两种分歧,我还是选择了更为全面考虑的完整搭建的方式,方便实现两种不同情况。

        最终通过给定转向角观察角速度输出的开环系统仿真,我发现在本道题小角度低速运动的两种情况下,两种不同的考虑并没有太大的差别,最后我选择了前面的给定Vx的方案进行下一步的闭环程序设计,横摆角速度单环系统的框图如下图 4所示:

图 4 横摆角速度单环控制框图

         通过Simulink搭建角速环如下图 5所示:

 图 5 角速度外环Simulink仿真模型

 1.2 PID参数对控制性能的影响

         为了验证控制器的控制性能,调节合适的PID控制器参数,角速度输入采用幅值为0.1的方波信号,仿真模型截图和实验结果如下。

         首先仅考虑P环节,取kp=1,得到输出如下图 6所示:

图 6 kp=1,仿真波形

        可以看出波形上总体稳定且无超调,但存在较大静态误差。继续增加kp的取值,分别取1,10,100,1000得到仿真波形如下图 7所示:

(a)kp=1

(b)kp=10

(c)kp=100

(d)kp=1000

图 7 不同kp下的仿真波形

        从仿真结果可以看出随着kp参数的增大,静差逐渐减小,因此理论上仅设计P环节就可以达到比较好的控制效果,但是在实际仿真中我发现kp增大也会使系统的仿真时间大大增加。

        进一步观察kp=1和kp=1000两种情况下,导向角控制量的输出波形,可以看出,kp增大时会使导向角控制量的波动增加。因为我在仿真中采用的是连续系统仿真的方式,并没有考虑到实际控制系统的离散情况,而且实际控制器也存在控制频率的限制,过高频率的震荡会导致控制性能不佳,甚至会使系统发散。

(a)kp=10

(b)kp=1000

图 8 不同kp下导向角的输出波形

        因此实际控制系统设计时,为了减小静态误差量,kp不宜取得过大,应通过设计积分I环节来进一步调整静态误差。

        接下来进行I环节的设计,为了更清楚的观察ki对于控制性能的影响,下面我选择kp=50,存在适量稳态误差的情况进行ki参数的设计。

        设分别取ki=0,1,10,100,得到如所示的四个输出:

(a)kp=50,ki=0

(b)kp=50,ki=1

(c)kp=50,ki=10

(d)kp=50,ki=100

图 9 不同kp下导向角的输出波形

        可以看出,I环节的加入可以有效的改善稳态误差,系统响应迅速,且此时导向角输入的抖振也不大。

        控制系统设计中,D环节一般很少使用,其主要用于减少系统输出的超调和振荡,在此系统中此问题并不明显。通过仿真也可以看出D参数对于系统的输出确实没有很大的影响。且加入D参数之后,控制器的计算量大大增加,仿真时长也随之变长。因此在该模型中,不使用D环节。

        综上所述,对于角速度而言,使用单个P环节就可以实现较好的跟踪效果,但是由于在实际控制系统设计中,单个P环节可能会导致系统输出的超调和振动。结合我的课题背景,在我所接触到的控制器设计中,磁浮列车悬浮控制器的电流环为了追求更快的响应速度,采用单个P环节的电流内环,而直线电机控制的电流环则采用PI环节,I环节的存在就是为了实现更小的静差,进而减小电机输出的推力波动。

        结合本系统的实际应用,在低速运动下对于系统的响应速度要求不是很高,所以我还是加上了一个相对较小的I环节调节静差,虽然在实际控制器中这有可能会导致控制器计算速度的下降。在我所搭建Simulink连续系统仿真模型中,选择角速度环控制参数为kp=100,ki=10,可以达到比较好的控制效果,最终的仿真结果如下图 10所示。

图 10 最终调参后的仿真结果

2 位置规划控制 

 

        位置外环的构建上我一开始是没有什么头绪,最后也是请教了无人所的一位同学才搞明白位置规划控制的方式,具体实现如下。当然这里的“位置外环”的理解是我根据电机控制中的双闭环矢量控制给出的自己的理解,这里实际上只是完成了内环给定量的寻优计算,并没有实质上的控制的过程。

        首先我在程序的初始化回调函数InitFcn中加入我所需要的初始化位置规划函数如图 11所示:

图 11 位置规划的初始化函数

        可以看到,我在初始化函数中一些基本参数的基础上,将规划轨迹离散成多个目标点,其中直线轨迹为等步长的离散点,圆形规划则为沿角度的等角度离散点。外环控制器采用for循环遍历所有目标点和当前位置的距离,选取其中最小,也即距离当前位置最近的目标点作为位置期望,并计算此时角速度内环的给定值,最终实现双闭环完成控制。

        双闭环控制器和位置规划的程序如下图所示:

function [r_ref,x_ref,y_ref] = fcn(X_ref,Y_ref,x,y,phi)
Err = [];
for i = 1:length(X_ref)
  Err = [Err, sqrt((X_ref(i)-x)^2+(Y_ref(i)-y)^2)];
end
[l_d,j] = min(Err);
x_ref = X_ref(j);
y_ref = Y_ref(j);
alpha = atan2(y_ref-y,x_ref-x);
theta_e = alpha - phi;
r_ref = l_d*sin(theta_e);

 

        完整实现位置规划的仿真模型如下图所示:

        得到直线规划下的位置跟踪情况,其中左图为XY坐标图,右图为位移时间图:

 

分别得到两种圆形规划下的位置跟踪情况,如所示,其中左图为XY坐标图,右图为位移时间图,下方为InitFcn的规划函数:

 

        可以看出内环的参数调节合理后,位置规划的控制效果较好,系统响应速度较快。

        但是仿真后也发现了几个挺有意思的问题,就是采用这种位置规划的方法进行位置控制时,直线规划并不会存在这个问题,但在圆形规划中,会出现绕圆运动方向不可控的情况,以上仿真仅仅实现了对于圆形位置规划的简单控制,但没人实现方向的进一步判断,由于时间问题我也没有进一步做出改进,我猜想简单的改进方式就是在位置规划时加入更多的判断和限制条件,应该可以改善绕圆方向不可控的问题。

 

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

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

相关文章

Digimat在电池壳体SMC复合材料成型工艺中的应用

SMC工艺介绍及挑战 SMC(Sheet Molding Compound的缩写,即片状模塑料)是一种复合材料制造工艺。该工艺可以有效地代替金属,实现车辆轻量化目标。该工艺不仅能够显著降低车身重量,而且设计灵活,操作简单、易…

市场领先者MySQL的挑战者:PostgreSQL的崛起

最新的DB-Engines的排名,可以看到有个DB的上升趋势非常的猛,那就是PostgreSQL。今天我们就来看看这个数据库。 “The worlds most advanced Open Source Database” 这简介比较霸气:世界上最先进的开源数据库 发展史 PostgreSQL&#xff0c…

【Linux】进程间通信(一)---- 匿名管道

【Linux】进程间通信(一)---- 匿名管道 一.序1什么是进程间通信2.进程间通信的标准3.为什么需要进程通信 二.匿名管道1.原理2.使用3.四种情况4.五个特点 一.序 1什么是进程间通信 进程间通信 通信我们大致知道是啥,就是互相传递信息 那进程…

MySQL 8.4参考手册

5.1 连接到服务器和断开服务器连接 host 和 user 表示主机名,其中 MySQL服务器正在运行,并且您的MySQL帐户的用户名。 为您的设置替换适当的值。代表您的密码;输入它 当 MySQL 显示提示时。********Enter password: 5.2 输入查询 mysql> SELECT VERSI…

哪些软件格式在win跟linux上都能运行?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 有一些软件格式在Windows和Li…

什么是Google SEO优化,如何做好谷歌seo排名?2024年谷歌搜索引擎优化(谷歌SEO)3分钟速通教程指南

1 - 什么是SEO? 谷歌排名优化(SEO:Search Engine Optimization)是指当您在谷歌搜索那里输入一个您正在推广的产品或服务的关键词时,如何在使您的站在Google里获得一个较高的排名位置而做的优化过程。谷歌排名优化的意…

第二证券资讯:多模态AI应用提速 机构扎堆调研相关个股

当地时间5月13日,OpenAI发布一款名为GPT-4o的新旗舰生成式AI模型,并计划在接下来的几周内“迭代”推出到公司产品中。 据介绍,GPT-4o的文本、推理、编码才能到达GPT-4 Turbo水平,速度是上一代AI大模型GPT-4 Turbo的两倍&#xff…

短视频世上无人再似她:成都鼎茂宏升文化传媒公司

短视频世上无人再似她 —— 记忆中的光影传奇 在短视频盛行的今天,每一位创作者都在用镜头捕捉生活,记录世界,但有那么一位艺术家,她的作品如同夜空中最亮的星,即便是在信息洪流中,也依然闪耀着独一无二的…

javaSE:类和对象

面向对象 java是一种面向对象的编程语言,面向对象就是把能为我们所用的东西直接拿来使用,省去中间过程,比如洗衣服,要完成这一个动作,我们本来需要一个盆,放水,放衣服,换水&#xf…

使用 cloudflare 免费服务,搭建临时邮箱,无需暴露自己的真实邮箱地址,保护个人隐私

使用 cloudflare 免费服务,搭建临时邮箱 地址 在线演示 🌐Github地址 https://github.com/find-xposed-magisk/cloudflare_temp_email 功能/TODO Cloudflare D1 作为数据库 使用 Cloudflare Pages 部署前端 使用 Cloudflare Workers 部署后端 email 转…

一文讲懂“预测滞后性”:详细解析

当我们谈论预测时,经常会遇到一个现象叫做“预测滞后性”。简单来说,预测滞后性指的是预测结果往往落后于实际发生的事件。这可能是由于数据收集、模型训练、预测算法的时间延迟,或者是由于预测模型本身的特性导致的。 目录 一、预测滞后性的…

Google I/O 2024:有关AI的一切已公布|TodayAI

2024年谷歌I/O大会圆满落幕,谷歌在会上发布了一系列更新,涵盖从最新的人工智能技术到Android系统的多项改进。此次大会特别关注于谷歌的Gemini人工智能模型,并详细介绍了这些模型如何被融入到Workspace、Chrome等多个应用程序中,展…

IT行业现状与未来趋势分析

IT行业现状与未来趋势显示出持续的活力和变革,以下是上大学网(www.sdaxue.com)关于IT行业现状与未来趋势分析,供大家参考。 当前现状: 市场需求持续增长:随着信息时代的深入发展,各行各业对信息…

汽车电子笔记之-012:旋变工作原理及软解码硬解码

目录 1、旋变 1.1、激励的产生 1.2、旋变的标定 2、旋变解码 2.1、旋变硬解码 2.2、软解码 1、旋变 旋转变压器(旋变),是电机控制中常用的一种位置传感器,用来反应电机的转子位置,提供给软件做电机控制等相关算法…

Nginx+Keepalived高可用集群

NginxKeepalived高可用集群 服务器准备 服务器名IP软件包主从n1RIP 192.168.99.111 VIP 192.168.99.200nginx keepaliveMASTERn2RIP192.168.99.122 VIP 192.168.99.200nginx keepalivedh1RIP 192.168.99.133 VIP 192.168.99.200httpdh2RIP 192.168.32.144 VIP 192.168.99.200h…

三.Ubuntu安装MySql数据库

三.Ubuntu安装MySql数据库 1.首先进入Console,登录Ubuntu系统后,更新源,命令:apt update,如图所示。 安装MySQL命令:apt install mysql-server 执行期间按回车,进行下一步,执行过程如图所示: 选择yes或no,此步选择yes 安装完成。 2.提高MySQL安全性,该命令…

2024-简单点-MediaCrawler解构

MediaCrawler var.pyrecv_sms.pyasync_db.pydb.pymain.pybase/base_crawler.pyconfig/baseconfig.pyconfig/db_config.py有待更新 var.py from asyncio.tasks import Task from contextvars import ContextVar from typing import Listimport aiomysqlfrom async_db import As…

【脚本】使用脚本备份docker中部署的mysql数据库

v1版本明文密码方式: #!/bin/bash# 定义 MySQL 容器名称和数据库信息 container_name"mysql_container" db_user"root" db_password"your_password"# 定义要备份的数据库列表 databases("database1" "database2"…

交换机组网最常见的8大故障及解决方式

有朋友多次提到网络故障,其中在交换机组网时常见的故障比较多,为了便于大家排除这些故障,在此介绍一些常见的典型故障案例及处理思路。 故障1:交换机刚加电时网络无法通信 【故障现象】 交换机刚刚开启的时候无法连接至其他网络…

摸鱼大数据——Linux搭建大数据环境(安装zooKeeper和zookeeper shell命令)五

安装zookeeper软件 1.上传软件 使用CRT等客户端远程上传 zookeeper-3.4.6.tar.gz 文件到/export/software目录下 2.解压软件 [rootnode1 ~]# cd /export/software/ [rootnode1 software]# tar -xzvf zookeeper-3.4.6.tar.gz -C /export/server/ [rootnode1 software]# cd /ex…