当前位置: 首页 > news >正文

【无人机设计与技术】四旋翼无人机,UAV仿真,轨迹跟踪PID控制

摘要

本文探讨了四旋翼无人机(UAV)在轨迹跟踪中的PID控制仿真方法。通过设计三轴方向的PID控制器,调节无人机的姿态与位置,使其能够准确跟踪预设轨迹。本文使用MATLAB/Simulink进行了建模与仿真,验证了PID控制算法在无人机轨迹跟踪中的有效性。实验结果表明,设计的控制器可以保证无人机在复杂轨迹下的平稳飞行,同时保持较好的跟踪精度。

理论

四旋翼无人机动力学模型

四旋翼无人机是一种由四个对称安装的旋翼产生推力的飞行器,其动力学模型较为复杂。无人机的运动包括六个自由度:三个平移自由度(x, y, z)和三个旋转自由度(俯仰角、滚转角、偏航角)。这些运动由旋翼的转速控制,通过调节每个旋翼的转速,可以控制无人机的姿态和位置。

四旋翼无人机的动力学方程可以通过牛顿-欧拉方程推导得到。姿态控制主要涉及旋转自由度的控制(俯仰、滚转、偏航),而位置控制则涉及平移自由度的控制(x, y, z)。

PID控制器

PID控制器是一种经典的反馈控制器,通过调节比例(P)、积分(I)和微分(D)三个参数来控制系统的输出。其核心思想是通过当前的误差信号来调节控制输出,从而使系统跟踪期望轨迹。在四旋翼无人机的控制中,PID控制器分别用于姿态和位置控制:

  • 比例控制:与误差成正比的输出调节,加快系统响应速度。

  • 积分控制:消除稳态误差。

  • 微分控制:对误差的变化率进行响应,减少超调和震荡。

PID控制器通过调节这三个参数可以实现对无人机的平稳控制。

实验结果

实验通过MATLAB/Simulink搭建了四旋翼无人机的动力学模型,并使用PID控制器进行轨迹跟踪仿真。实验结果展示了无人机在轨迹跟踪中的位置和姿态响应情况。以下是主要实验结果:

  1. 位置跟踪:如图所示,x、y、z三个方向的实际位置与预设轨迹进行了比较,红色虚线为期望轨迹,蓝色实线为无人机的实际轨迹。可以看出,PID控制器能够实现对期望轨迹的良好跟踪,误差较小。

  2. 姿态响应:无人机的俯仰角(phi)、滚转角(theta)和偏航角(psi)的响应曲线显示,PID控制器能够快速稳定姿态,并且在有扰动的情况下能够迅速恢复到平衡状态。

  3. 三维轨迹:如图1所示,无人机在三维空间中的螺旋轨迹表现出了平稳的控制效果,表明控制器在复杂轨迹跟踪中的表现良好。

部分代码

以下是基于MATLAB实现的四旋翼无人机轨迹跟踪的PID控制部分代码:

% 定义PID参数
Kp_x = 1.2; Ki_x = 0.1; Kd_x = 0.05;
Kp_y = 1.2; Ki_y = 0.1; Kd_y = 0.05;
Kp_z = 1.5; Ki_z = 0.1; Kd_z = 0.08;% 期望轨迹
t = 0:0.1:150; 
x_d = sin(0.05*t);
y_d = cos(0.05*t);
z_d = 0.1 * t;% 初始化无人机位置和速度
x = 0; y = 0; z = 0;
vx = 0; vy = 0; vz = 0;% PID控制器实现
for k = 1:length(t)% 计算位置误差ex = x_d(k) - x;ey = y_d(k) - y;ez = z_d(k) - z;% PID控制输出ux = Kp_x * ex + Ki_x * sum(ex) + Kd_x * diff(ex);uy = Kp_y * ey + Ki_y * sum(ey) + Kd_y * diff(ey);uz = Kp_z * ez + Ki_z * sum(ez) + Kd_z * diff(ez);% 更新无人机状态vx = vx + ux * dt;vy = vy + uy * dt;vz = vz + uz * dt;x = x + vx * dt;y = y + vy * dt;z = z + vz * dt;% 存储数据x_data(k) = x;y_data(k) = y;z_data(k) = z;
end% 绘制轨迹图
figure;
plot3(x_data, y_data, z_data, 'b-', 'LineWidth', 2);
hold on;
plot3(x_d, y_d, z_d, 'r--', 'LineWidth', 1.5);
xlabel('X [m]'); ylabel('Y [m]'); zlabel('Z [m]');
title('3D Trajectory Tracking');
legend('Actual Path', 'Desired Path');

参考文献

  1. Bouabdallah, S., Murrieri, P., & Siegwart, R. (2004). Design and Control of an Indoor Micro Quadrotor. Proceedings of the 2004 IEEE International Conference on Robotics and Automation.

  2. Hoffmann, G. M., Waslander, S. L., & Tomlin, C. J. (2008). Quadrotor Helicopter Flight Dynamics and Control: Theory and Experiment. AIAA Guidance, Navigation and Control Conference.

  3. Mahony, R., Kumar, V., & Corke, P. (2012). Multirotor Aerial Vehicles: Modeling, Estimation, and Control of Quadrotor. IEEE Robotics & Automation Magazine*, 19(3), 20-32.

相关文章:

【无人机设计与技术】四旋翼无人机,UAV仿真,轨迹跟踪PID控制

摘要 本文探讨了四旋翼无人机(UAV)在轨迹跟踪中的PID控制仿真方法。通过设计三轴方向的PID控制器,调节无人机的姿态与位置,使其能够准确跟踪预设轨迹。本文使用MATLAB/Simulink进行了建模与仿真,验证了PID控制算法在无…...

回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提取特征与原始特征进行融合预测

回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提取特征与原始特征进行融合预测 文章目录 一、基本原理原理流程总结 二、实验结果三、核心代码四、代码获取五、总结 回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提…...

javaScript基础知识汇总

一、基础语法 1、区分大小写:无论是变量、函数名还是操作符,都区分大小写。 2、标识符:就是变量、函数、属性或函数参数的名称。标识符可以由一个或多个字符构成,但需要满足以下条件: 第一个字符必须是一个字母、下…...

《动手学深度学习》笔记2.2——神经网络从基础→进阶 (参数管理-每层的权重/偏置)

目录 0. 前言 正文:参数管理 1. 参数访问 1.1 [目标参数] 1.2 [一次性访问所有参数] 1.3 [从嵌套块收集参数] 2. 参数初始化 2.1 [内置初始化] 2.2 [自定义初始化] 2.3 [参数绑定-共享参数] 3. 小结(第2节) 4. 延后初始化 (原书第…...

双端之Nginx+Php结合PostgreSQL搭建Wordpress

第一台虚拟机:安装 Nginx 更新系统包列表: sudo apt update安装 Nginx及php扩展: sudo apt install nginx php-fpm php-pgsql php-mysqli -y启动 Nginx 服务: sudo systemctl start nginx检查 Nginx 是否正常运行: xdg-open http://localhost注意:终端命令打开网址 …...

Another redis desktop manager使用说明

Another redis desktop manager使用说明 概述界面介绍图示说明连接界面设置界面查看操作日志主界面信息进入redis-cli控制台更多 概述 Another Redis Desktop Manager是一个开源的跨平台 Redis 客户端,提供了简洁易用的图形用户界面(GUI)&am…...

【git】配置 Git 的换行符处理和安全性||安装 Ruby

配置 Git 的换行符处理和安全性: git config --global core.autocrlf input:这个设置确保在提交代码时,Git 会将 CRLF(Windows 的换行符)转换为 LF(Unix 的换行符),但在检出代码时不…...

VMware ESXi 8.0U3b macOS Unlocker OEM BIOS 2.7 Dell HPE 定制版 9 月更新发布

VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 Dell HPE 定制版 9 月更新发布 VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版 ESXi 8.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、IEIT SYSTEMS (浪潮信息)、Cisco …...

Unity 代码裁剪(Strip Engine Code)

文章目录 0.IL2CPP 打包运行闪退问题1.什么是代码裁剪2.为什么要使用代码裁剪3.代码裁剪设置与级别4.强制保留代码4.1 使用[Preserve]标签4.2 使用Link.xml文件 5.Strip中遇到的问题及解决方法6.注意事项 0.IL2CPP 打包运行闪退问题 Google Play要求从2019年8月1日起apk必须支…...

单目3d重建DUSt3R 笔记

目录 DUSt3R 三维重建 报错RecursionError: maximum recursion depth exceeded in comparison 报错 numpy.core.multiarray failed to import 报错Numpy is not available 解决 升级版mast3r 速度变慢 修改了参数设置脚本: 测试效果 操作技巧 DUSt3R 三维重…...

AI驱动TDSQL-C Serverless 数据库技术实战营-与AI的碰撞

目录 一、简介 二、实验介绍 三、结果展示 四、实操指导 4.1 系统设计 4.2 环境搭建(手把手教程) 4.3 应用构建 4.4 效果展示 4.5 踩坑避雷总结 五、清理资源 5.1 删除TDSQL-C Serverless 5.2 删除 HAI 算力 六、实验总结归纳 一、简介 本…...

C++之String类(上)

片头 嗨!好久不见~ 今天我们来学习C的Sting类,不过,在学习它之前,我们先来对STL库有一个简单的了解。 STL(standard template library--标准模板库),是C标准库的重要组成部分,不仅是…...

kubernets基础-ingress详细介绍

文章目录 什么是IngressIngress详细说明Ingress示例 Ingress控制器Ingress控制器的工作原理Ingress控制器的特点常见的Ingress控制器 Ingress关联Ingress控制器一、Ingress资源对象二、Ingress控制器三、Ingress与Ingress控制器的关联方式四、注意事项 多实例部署一、Ingress多…...

jenkins部署Maven和NodeJS项目

在 Java 项目开发中,项目的编译、测试、打包等是比较繁琐的,属于重复劳动的工作,浪费人力和时间成本。以往开发项目时,程序员往往需要花较多的精力在引用 jar 包搭建项目环境上,跨部门甚至跨人员之间的项目结构都有可能…...

在unity资源中发现无效引用

本文主要解决在不打开unity的情况下搜索出无效引用的资源的方法 1. 概述 一般只要遍历一下目录里所有资源,判空一下就好了但有些情况下,不希望打开unity, 尤其希望是在资源整合时,想更快验证资源的合法性, 这对合并提交及出包验证时,都要较大的需求 2. 简单的验证方法 简单来…...

C#知识|基于反射和接口实现抽象工厂设计模式

哈喽,你好啊,我是雷工! 01 应用场景 在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中; 02 抽象工厂组成 抽象工厂包括抽象产品(即业务接口,可以通过抽象类或抽象接口设计)…...

【分布式微服务云原生】gRPC vs RPC:深入探索远程过程调用的现代与经典

摘要 在分布式系统的世界里,gRPC和RPC是两个耳熟能详的术语,但它们之间有何区别和联系?本文将深入探讨gRPC和RPC的概念、关键特性、以及它们在现代软件开发中的应用。你将了解到gRPC如何作为RPC的一种实现,提供高性能的跨语言远程…...

听说这是MATLAB基础?

MATLAB(矩阵实验室)是一个强大的高性能计算环境和编程语言,广泛应用于数学计算、算法开发、数据分析、可视化以及模拟等多个领域。以下是MATLAB的一些基础知识,涵盖其功能、语法、基本操作等方面。 1. MATLAB环境 工作区&#xf…...

【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现

前沿简介 圣杯布局和双飞翼布局是前端重要的布局方式。两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局。 圣杯布局来源于文章In Search of the Holy Grail,双飞翼布局来源于淘宝UED。 两者的实现方式有差异,但是都…...

数据流和数据流处理技术

一数据流 首先明确数据流概念:数据流是连续不断生成的、快速变化的无界数据序列 数据流类型: 数据流大致可以分为四种类型 1.连续型数据流:不断地产生数据,数据稳定速度输入系统。 2.突发型数据流:在某特定时间或…...

(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案

系列文章目录 文章目录 系列文章目录一、(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案1.资料 一、(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案 1.资料…...

解决TikTok无网络连接问题解析

随着社交媒体的快速发展,TikTok已成为全球用户最喜欢的短视频平台之一,吸引了数以亿计的用户。然而,在享受这个平台时,用户经常会遇到无网络连接的问题,这不仅影响观看体验,还可能导致无法上传内容或参与社…...

k8s中,ingress的实现原理,及其架构。

图片来源:自己画的 图片来源:k8s官网 首先,什么是ingress? 是服务还是控制器? 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作,组建成一个对外提供服务的架构。 ingress提供的…...

【数据结构强化】应用题打卡

应用题打卡 数组的应用 对称矩阵的压缩存储 注意: 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意: 上/下三角压缩存储是将0元素统一压缩存储,而不是将对角线元素统一压缩存储 三对角矩阵的…...

解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found

目录 前言1. 问题描述2. 问题分析3. 解决步骤3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时,有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置文…...

Dubbo和Http的调用有什么区别

背景 我们在项目开发中,需要进行调用外部接口时,往往使用Dubbo和Http方式都能实现远程调用。那么他们在使用上,有什么区别呢? 定位不同 一个是分布式环境下的框架,一个是通信协议。 Dubbo:是一种高性能的…...

ARM 架构、cpu

一、ARM的架构 ARM是一种基于精简指令集(RISC)的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点: 精简指令集:ARM芯片使用精简指令集,即每条指令只完成一项简单的操作,从而提高指令的执行效率…...

【React】入门Day03 —— Redux 与 React Router 核心概念及应用实例详解

1. Redux 介绍 // 创建一个简单的Redux store const { createStore } Redux;// reducer函数 function counterReducer(state { count: 0 }, action) {switch (action.type) {case INCREMENT:return { count: state.count 1 };case DECREMENT:return { count: state.count -…...

u2net网络模型训练自己数据集

单分类 下载项目源码 项目源码 准备数据集 将json转为mask json_to_dataset.py import cv2 import json import numpy as np import os import sys import globdef func(file):with open(file, moder, encoding"utf-8") as f:configs json.load(f)shapes configs…...

登录功能开发 P167重点

会话技术: cookie jwt令牌会话技术: jwt生成: Claims:jwt中的第二部分 过滤器: 拦截器: 前端无法识别controller方法,因此存在Dispa什么的...

网站独立模块是什么意思/cpa推广接单平台

点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章SCCA 简介SCCA 全称 spring-cloud-config-admin,微服务下 Spring Boot 应用(包含 Spring Cloud)统一的配置管理平台。Github 地址:spring-cloud-config-admin核心贡献者&…...

wordpress pdf浏览器/网址和网站的区别

如果是新的机器,需要添加公钥到github上ssh-keygengit clone gitgithub.com:mlzboy/geilibuy-blog.git...

济南建网站/竞价托管服务多少钱

关于TypeScript【JavaScript的超集】 1、TypeScript 是 JavaScript 的一个超集,换句话说,所有的JavaScripe程序代码已经是TtypScript程序代码了,反之不行,因为TypeScript有自己的一些语法。 . 2、TypeScript 支持 ECMAScript 6 - …...

什么视频直播网站做挣钱/成人零基础学电脑培训班

pcloudy移动应用测试平台,以实现无限规模 pCloudy 是一个基于云的移动应用测试平台,在全球拥有超过 50,000 名用户。pCloudy 是一个单一平台,可为从 SMB 到大型企业的组织提供全生命周期应用程序测试,以便在公共、私有云以及本地设备上运行测…...

网站建设团队技术介绍/百度小说排行榜2021

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如&am…...

精品课程网站开发/中国十大品牌营销策划公司

当前位置:我的异常网 J2SE 怎么用java创建一个request,并用post的方法发送这个怎么用java创建一个request,并用post的方法发送这个requestwww.myexceptions.net 网友分享于:2013-03-31 浏览:151次如何用java创建一个request,并用post的方法发送这个re…...