AUV运动控制仿真(PID控制)

news/2025/3/9 10:34:53/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、研究对象描述

二、总体思路

三、仿真实现

1.获得误差

2.设计PD控制器

3.控制力传入模型进行解算

4.通过艏向角速度得到艏向角

5.Solver设置

四、仿真结果分析


前言

本文对AUV的运动控制仿真过程进行介绍,采用PID控制方法,实现水平面上的简单的AUV的运动控制。


提示:以下是本篇文章正文内容,下面案例可供参考

一、研究对象描述

研究AUV的水平面运动,AUV为欠驱动,具备纵向推力和转艏力矩的输入,即具有主推和垂直舵。

二、总体思路

给定AUV期望的纵向速度和艏向角的值,与模型解算出的实时纵向速度和艏向角做差,得到误差值,随后利用PD控制设计控制器,产生期望推力和力矩,作用到AUV模型上,形成闭环。

三、仿真实现

以下依笔者的思路,对整个仿真程序进行介绍。

1.获得误差

直接将期望值与AUV的速度和艏向角进行做差得到

这里设置的期望速度:ud=1,期望艏向角:yawd=pi/6

2.设计PD控制器

得到两者误差后,根据PD控制知识,设计控制器。需要误差值及误差值的导数信息。

将误差及其导数传入控制器的S函数,在S函数内设置相关的控制增益,具体为:

 S函数依次输出推力和力矩。

在仿真图中,输出的力经过了积分的处理,而力矩却没有,这里进行详细地说明。

了解控制过程其实很好理解,当AUV的速度小于期望速度时,需要增加推力,而控制器的推力是通过速度的误差获得的,在AUV运动时,会不断受到航行阻力的作用,因此AUV的推力需要保持,不能消失。

而不同于速度的控制,艏向角就不会出现这种情况,给到一个力矩作用AUV就会转艏,且AUV保持艏向角是不需要力矩的,这是关键,而AUV的速度想要保持需要纵向推力的保持。

3.控制力传入模型进行解算

在得到控制器设计出的控制力和力矩之后,执行机构做出反应,此时AUV的运动状态发生变化,这是通过AUV的动力学模型体现出来的。

AUV的水平动力学模型是具备三个自由度的,即纵向运动、横向运动和转艏运动。本文的AUV是欠驱动的,只用纵向推力和转艏力矩,横向无控制输入,因此横向的输入设计为0。

关于AUV的模型的S函数,实质上就是用于解算微分方程的,这个微分方程就是AUV的动力学模型,其中的未知数就是AUV的这三个自由度u,v,r,以及他们的导数,在得到所有自由度上的控制力后,除u,v,r其他的未知数都是可以获得的,三个方程三个未知数,可以进行解算,这部分交给S函数的微分模块。

常用的AUV动力学模型一般为:

在S函数中的体现为:

其中的一系列的水动力系数选自特定的AUV模型,这是事先针对具体的AUV 通过试验测得的。

4.通过艏向角速度得到艏向角

AUV模型输出了纵向速度和艏向角速度,其中纵向速度是我们想要的,但是还需要AUV的艏向角。通过对艏向角速度进行积分同时设计初始值便可以得到实时的艏向角信息。

初始值在积分器中进行设置, 这里设置为0。在经过积分处理后传入名为‘xianzhi’的S函数,这是由于AUV的艏向角的范围为[-pi,pi],需要做出限制。在S函数内:

 在做出限制后,就得到了AUV的艏向角yaw的信息,随后又传入了一个增益,其大小为180/pi,其作用是将弧度制转化为角度制,因为在SIMULINK仿真过程中使用的都是弧度制,转化为角度制会更加直观。

5.Solver设置

至此,列出了所有的仿真程序,按照上述方法搭建即可完成AUV水平面的运动控制。但实际上搭建完后还要对Solver进行设置。

在SIMULINK中CTRL+E,或点击鼠标右键打开Model Configuration Parameters,在Solver栏进行如下设置:

四、仿真结果分析

搭建完成后运行,可以得到仿真结果。

AUV的纵向速度:

 AUV的艏向角:

纵向推力: 

 转艏力矩:

转艏角速度:

从仿真结果来看,各方面表现良好,在艏向角的控制上存在略微超调,但在合理范围内,基本实现了良好的AUV的水平面的运动控制。



http://www.ppmy.cn/news/835020.html

相关文章

Python错误处理的艺术:使用retrying库实现高效重试机制

简介 学习如何使用 Python 的 retrying 库来处理在程序运行过程中可能出现的各种异常和错误。 retrying 是一种简单、易于使用的重试机制,帮助我们处理由网络问题或其他暂时性错误引起的失败。在很多情况下,简单的重试可能就是解决问题的最好方式。通过…

auv的设计

auv的设计: 带机翼的auv多种auv造型轴封,是水下推进的重要技术有刷电机好像功率更大。参见这里写链接内容提到的电机。水下推进器 的设计。无刷不怕水,外转子转矩大。故无刷外转子电机可以作为水下推进器,另外,由于外…

AUV 配置过程

此文章写在装好ROS的基础上 系统:Ubuntu18 ros:melodic 创建项目 mkdir -p ~/catkin_ws/srccd ~/catkin_ws/srccatkin_init_workspacecd ..catkin_makesource ~/catkin_ws/devel/setup.bash更改bashrc terminal里跑 gedit ~/.bashrc添加: source /…

滑模方法设计AUV路径跟踪转艏力矩

文章目录 前言一、滑模控制的基本原理介绍二、几种典型的趋近率2.1等速趋近率2.2指数趋近率2.3幂次趋近率2.4一般趋近率 三、滑模方法设计转艏力矩 前言 本文通过滑模方法对AUV的直线路径跟踪的转艏力矩进行设计,主要目的是介绍滑模变结构控制的基本原理和滑模方法…

AUV控制中的反步法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、问题描述 二、反步法的简单介绍 三、AUV中的反步法 1.纵向速度 2.艏向角 前言 本文简单介绍AUV控制中常见反步法的使用。 提示:以下是本篇文章…

水下机器人ROV和AUV

水下机器人,也可以称为无人水下潜航器(Unmanned Underwater Vehicle,UUV),是在水下的极限环境中运行并能潜入水面替代人进行某种动作的可控机器结构。水下无人潜航器通常可分为三类:遥控水下机器人&#xf…

7.1JavaEE——Spring中的Bean的管理——Spring IoC容器

一、BeanFactory接口 BeanFactory接口的常用方法 方法名称 描述 getBean&#xff08;String name&#xff09; 根据参数名称获取Bean getBean&#xff08;String name,Class<T> type&#xff09; 根据参数名称、参数类型获取Bean <T>T getBean&#xff0…

基于Hololen2 unity vuforia空间生成大型物体,以及打开内部浏览器的打开教程

1.简介 1.1 功能介绍 本文主要做了两个功能&#xff1a; 1.扫描一张二维码生成一个操作台&#xff08;桌子&#xff09;&#xff0c;这张桌子比二维码尺寸大非常多&#xff08;就是实际物体大小的桌子&#xff09;&#xff0c;所以需要定位 好桌子和操作台之间的位置关系。并且…