【无人水面艇路径跟随控制10】(Matlab)USV代码阅读:testUSV仿真无人水面艇在一定时间内的运动,使用欧拉法对状态进行积分,并绘制仿真结果

【无人水面艇路径跟随控制10】(Matlab)USV代码阅读:仿真无人水面艇在一定时间内的运动,使用欧拉法对状态进行积分,并绘制仿真结果

  • 写在最前面
  • testUSV.m
    • 总结
    • 代码详解
      • 1. **初始化部分**
      • 2. **仿真循环**
      • 3. **仿真数据提取**
      • 4. **绘制仿真结果**
      • 5. **绘制其他图像**
    • 全部代码


请添加图片描述

🌈你好呀!我是 是Yu欸
🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

写在最前面

版权声明:本文为原创,遵循 CC 4.0 BY-SA 协议。转载请注明出处。

USV-path-following
USV路径跟踪LOS控制算法仿真

阅读代码:https://github.com/quyinsong/USV-path-following
运行效果:

在这里插入图片描述

请添加图片描述

testUSV.m

这段 MATLAB 代码用于测试 USV(Unmanned Surface Vehicle,无人水面艇) 的运动模型。代码通过仿真无人水面艇在一定时间内的运动,使用欧拉法对状态进行积分,并绘制仿真结果。

总结

  • 该代码实现了对无人水面艇(USV)的运动仿真,模拟了船舶在风、流等干扰下的运动过程。
  • 使用 PID 控制器来调节船舶的推进力和航向角力矩,通过调用 USV 函数计算船舶状态导数,再使用欧拉法更新状态。
  • 仿真过程中动态调整控制输入(如航向力矩),并实时绘制船舶的运动轨迹和相关状态变量的变化。

代码详解

下面逐步解释代码的各个部分:

1. 初始化部分

ts = 0.1;                 % 采样时间
tfinal = 20;              % 仿真结束时间
Ns = tfinal/ts;           % 仿真步数
Vw = 0; betaw = 30 * pi / 180;
wind = [Vw betaw]';       % 风的速度和角度
Vc = 0; betac = 30 * pi / 180;
current = [Vc betac]';    % 水流的速度和角度tao = [10 0 0]';          % 初始控制输入力矩
tao0 = tao;
d = [0 0 0]';             % 扰动(假设无扰动)
x = [0 0 0 2 5 0]';       % 初始状态:[u v r x y psai]
x0 = x;
  • ts:仿真时间步长。
  • tfinal:仿真总时间,单位是秒。
  • Ns:仿真步数,即仿真总时长除以步长。
  • windcurrent:分别表示风速和水流速度,风和水流的角度(弧度制)通过 betawbetac 指定。
  • tao:控制输入向量,分别是船舶的推进力、横向力和航向力矩。
  • x:初始状态向量,包含速度(u, v, r)以及位置(x, y)和航向角 psai

2. 仿真循环

disp('Simulation ... ');
for k = 1:1:Nstime(1) = 0;time(k+1) = k * ts;if x(6)*180/pi >= 360x(6) = x(6) - 2*pi;endif x(6)*180/pi <= -360x(6) = x(6) + 2*pi;endif k * ts >= 5tao = [10 0 1 * pi / 180]';  % 调整控制力矩,增加航向力矩endTtao(1,:) = tao0';Ttao(k+1,:) = tao';% 计算状态导数xdot = USV(x, tao, wind, current, d);% 使用欧拉法更新状态x = euler2(xdot, x, ts);% 存储每步状态xout(1,:) = x0;xout(k+1,:) = x';
end
  • time:记录每一步的仿真时间。
  • x(6) 的航向角超过 360 度或小于 -360 度时,通过减去或加上 2*pi 来归一化航向角。
  • 当时间超过 5 秒时,控制输入 tao 中的航向力矩被调整为 1 * pi / 180,引入了一个小的航向力矩。
  • USV(x, tao, wind, current, d):调用 USV 函数计算状态导数 xdot
  • euler2(xdot, x, ts):使用欧拉法数值积分,更新状态 x
  • xout:用于存储每一步的状态。

3. 仿真数据提取

u = xout(:,1);
v = xout(:,2);
r = xout(:,3);
N = xout(:,4);
E = xout(:,5);
psai = xout(:,6);
  • 从仿真结果 xout 中提取各个状态变量的时间序列,包括:
    • u:纵向速度。
    • v:横向速度。
    • r:航向角速度。
    • N:北向位置。
    • E:东向位置。
    • psai:航向角。

4. 绘制仿真结果

disp('plot ...');
for k = 1:1:Nspos = [N(k) E(k)]';if k == 1modelplot(pos, psai(k));  % 初始位置的船舶模型绘制endif rem(k,10) == 0modelplot(pos, psai(k));  % 每 10 步绘制一次end
endplot(E, N, 'r', 'linewidth', 2)  % 绘制航迹线
hold off;
  • modelplot(pos, psai(k)):调用 modelplot 函数绘制船舶模型,在第一个位置和每 10 步时绘制一次船舶的位置。
  • plot(E, N, 'r', 'linewidth', 2):绘制仿真过程中船舶的航迹,红色线条表示船舶在仿真过程中的运动轨迹。

5. 绘制其他图像

figure(2);
plot(time, psai * 180 / pi, 'r', 'linewidth', 2);  % 绘制航向角随时间变化
xlabel('time/s'); ylabel('psai/deg');figure(3);
plot(E, N, 'r', 'linewidth', 2)  % 绘制东、北坐标的变化
xlabel('E'); ylabel('N');figure(4);
plot(time, u, 'r', 'linewidth', 2)  % 绘制纵向速度随时间变化
xlabel('time/s'); ylabel('u (m/s)');figure(5);
plot(time, Ttao(:,1), 'r', time, Ttao(:,2), 'k', time, Ttao(:,3), 'b', 'linewidth', 2)  % 绘制控制输入
xlabel('time/s'); ylabel('u (m/s)');
  • 图 2:绘制航向角 psai 随时间的变化,显示船舶的转向行为。
  • 图 3:再次绘制东向 E 和北向 N 的变化轨迹。
  • 图 4:绘制纵向速度 u 随时间的变化。
  • 图 5:绘制控制输入 tao 的变化,包括三个力矩分量:推进力(红色)、横向力(黑色)和航向力矩(蓝色)。

全部代码

% Author: Quyinsong
% Data: 14th Jan 2022
% test the USV function
clc 
clear all
close all
% initial
ts=0.1;                 % sample time
tfinal =20;             % simulation final time
Ns =tfinal/ts;          % step number of simulation
Vw=0; betaw=30*pi/180;
wind=[Vw betaw]';       % wind
Vc=0; betac=30*pi/180;
current=[Vc betac]';    % currenttao=[10 0 0]'; 
tao0=tao;
d=[0 0 0]';
x=[0 0 0 2 5 0]';
x0=x;
% simulation start
disp('Simulation ... ');
for k=1:1:Nstime(1)=0;time(k+1)=k*ts;if x(6)*180/pi>=360x(6)=x(6)-2*pi;endif x(6)*180/pi<=-360x(6)=x(6)+2*pi;endif k*ts>=5tao=[10 0 1*pi/180]';endTtao(1,:)=tao0';Ttao(k+1,:)=tao';% time derivativesxdot=USV(x,tao,wind,current,d);% update statesx=euler2(xdot,x,ts);% store time seriesxout(1,:)=x0;xout(k+1,:)=x';end
u=xout(:,1);
v=xout(:,2);
r=xout(:,3);
N=xout(:,4);
E=xout(:,5);
psai=xout(:,6);
% testUSV plot
disp('plot ...');
for k=1:1:Nspos =[N(k) E(k)]';if k==1modelplot(pos,psai(k));endif rem(k,10)==0modelplot(pos,psai(k));end   
end
plot(E,N,'r','linewidth',2)
hold off;
figure(2);
plot(time,psai*180/pi,'r','linewidth',2);
xlabel('time/s');ylabel('psai/deg');
figure(3);
plot(E,N,'r','linewidth',2)
xlabel('E');ylabel('N');
figure(4);
plot(time,u,'r','linewidth',2)
xlabel('time/s');ylabel('u (m/s)');
figure(5);
plot(time,Ttao(:,1),'r',time,Ttao(:,2),'k',time,Ttao(:,3),'b','linewidth',2)
xlabel('time/s');ylabel('u (m/s)');

hello,我是 是Yu欸 。如果你喜欢我的文章,欢迎三连给我鼓励和支持:👍点赞 📁 关注 💬评论,我会给大家带来更多有用有趣的文章。
原文链接 👉 ,⚡️更新更及时。

欢迎大家添加好友交流。

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

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

相关文章

【docker】存储之目录挂载和卷映射

一、前言 之所以讲Docker存储的目录挂载和卷映射&#xff0c;是因为之前我们在做关于修改下载的镜像的内容的时候&#xff0c;我们会发现&#xff0c;这个修改的过程比较复杂的&#xff0c;我们需要多个指令&#xff0c;层层深入。而且如果我们的容器一旦销毁后重新启动&#x…

全网首创Windows Powershell 批量创建、重命名和拷贝文件夹和文件到指定目录

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;。 “ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…&#xff08;每天更新不间断&#xff0c;福利…

【linux】冯诺依曼架构

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.冯诺依曼体系结构02.操作系统&#xff08;Operator System&#xff09;如何理解“管理”操作系统中实现“管理的先描述再组织” 03.系统调用与库函数系统调用库函数 01.冯诺依…

工作笔记【五】——媒体查询

更新一下今天学到的东西——媒体查询&#xff08;浅学一下~&#xff09; 今天的任务是做一个网站的footer&#xff0c;要求在类似手机的设备打开时&#xff0c;footer元素竖向排列&#xff0c;在pc类的设备打开时&#xff0c;footer元素横向排列。 PC端&#xff1a; 手机端&a…

SpringBoot+Vue智能社区服务小程序

SpringBootVue智能社区服务小程序 SpringBootVue智能社区服务小程序 项目描述 智能社区服务小程序的前台小程序是一个集成多功能的综合性平台&#xff0c;旨在提供便捷、高效的社区服务。以下是关于各个功能的简单介绍&#xff1a; 用户管理&#xff1a;用户管理模块负责社区…

你知道C++多少——栈和队列

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

数据库管理平台应该具备哪些功能

企业数据的的扁平一体化管理越来越普及。 一个企业如果想要做好数据扁平一体化管理的核心问题是如何高效地管理这些资源。构建一个能够完美整合、系统化组织数据&#xff0c;并提供直观可视分析界面的数据库管理平台&#xff0c;便是企业加速数字化转型的必备工具。 假如公司有…

json格式的post请求目前不行, 要换成form表单形式的post请求怎么改

问: 下面是我的代码 export function fetchDeleteList<T>(agentSessionId: string) {return post<T>({url: http://192.168.0.116:8089/pipe-ics/agent/delete,method: post,data: { agentSessionId },}) } 目前是json格式的post请求, 目前不行, 要换成form表单…

详解计算机组成原理中的层次化存储

第5章 大而快&#xff1a;层次化存储 5.1 引言 局部性原理&#xff1a;在任意一段时间内&#xff0c;程序都只会访问地址空间中相对较小的一部分内容&#xff0c;就如你只会查阅图书馆的一部分藏书一样。 时间局部性&#xff1a;某个数据被访问&#xff0c;在不久的将来可能…

CIME2025深圳国际热管理材料与设备展览会(2025.6.25-27)

CIME2025深圳国际热管理材料与设备展览会&#xff08;2025.6.25-27&#xff09; 2025.6.25-27 深圳国际会展中心 次世代热管理解决方案航天器热控分系统产品、基站环境级/机柜级热控产品以及基于环路热管的CPU、GPU、IGBT、T/R组件超级散热器其系统热阻、均温性、传热能力、逆…

递归 深搜 回溯练习

递归 深搜 回溯 题目一. 全排列II1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 解法&#xff1a;4.代码 题目二. 电话号码的字⺟组合1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 解法&#xff1a;4.代码 题目三. 括号⽣成&#xff08;medium&#xff09;1. 题⽬链…

论文阅读笔记- Language Modeling with Gated Convolutional Networks

前言 统计语言模型本质上是在给定前面若干个单词的条件下&#xff0c;通过概率建模来估计单词序列的概率分布&#xff0c;即&#xff1a; P ( w 0 , . . . , W N ) P ( w 0 ) ∏ i 1 N P ( w i ∣ w 0 , . . . , w i − 1 ) P(w_0,...,W_N)P(w_0)\prod_{i1}^NP(w_i|w_0,...…

dvwa:文件包含、文件上传

文件包含 本地文件包含&#xff08;敏感信息泄露&#xff09;和远程文件包含&#xff08;命令执行&#xff09; 本地文件包含一般包含一些本地的敏感文件&#xff0c;如&#xff1a;/etc/passwd或/etc/shadow等 远程文件包含能使得服务器代码执行&#xff0c;如包含黑客vps的…

文心一言 VS 讯飞星火 VS chatgpt (365)-- 算法导论24.3 7题

七、给定带权重的有向图 G ( V &#xff0c; E ) G(V&#xff0c;E) G(V&#xff0c;E)&#xff0c;其权重函数为 w : E → ( 1 &#xff0c; 2 &#xff0c; … &#xff0c; W ) w:E→(1&#xff0c;2&#xff0c;…&#xff0c;W) w:E→(1&#xff0c;2&#xff0c;…&…

2024年诺贝尔物理学奖 机器学习与神经网络领域前景面面观 如何抉择

近日&#xff0c;2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者&#xff0c;这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家&#xff0c;如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能…

基于微信小程序的家校联动平台管理系统的设计与实现(毕业论文)

目 录 第一章 绪论 1 1.1研究背景 1 1.1.1教育信息化的发展 1 1.1.2家校沟通的重要性 1 1.1.3微信小程序的优势 1 1.2国内外研究现状 1 1.2.1教育管理信息系统 1 1.2.2家校互动平台 1 1.2.3微信小程序在教育领域的应用 2 1.3本文的主要工作 2 1.3.1系统需求分析 2 1.3.2系统设计…

边缘智能(Edge Intelligence):智能计算的前沿

随着物联网&#xff08;IoT&#xff09;、5G网络和人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;边缘智能&#xff08;Edge Intelligence&#xff09;作为一种新兴的技术理念&#xff0c;逐渐成为数字化时代的重要组成部分。边缘智能通过在靠近数据生成端&#xf…

正则表达式-“三剑客”(grep、sed、awk)

1.3正则表达式 正则表达式描述了一种字符串匹配的模式&#xff0c;可以用来检查一个串是否含有某种子串&#xff0c;将匹配的子串替换或者从某个串中取出符号某个条件的子串等&#xff0c;在linux中代表自定义的模式模版&#xff0c;linux工具可以用正则表达式过滤文本。Linux…

《网络安全自学教程》- Nmap使用及扫描原理分析

《网络安全自学教程》 Nmap&#xff08;Network Mapper&#xff09;是一款免费的开源网络扫描器&#xff0c;向目标主机发送特定的数据包&#xff0c;根据返回的流量特征&#xff0c;分析主机信息。主要功能有&#xff1a;「端口扫描」、「主机探测」、「服务识别」和「系统识别…

Linux之实战命令32:chroot应用实例(六十六)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…