一种改进多旋翼无人机动态仿真的模块化仿真环境研究(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、Simulink实现


💥1 概述

多旋翼无人机(UAV)由于其多功能性和机械简单性而在研究和商业应用中都获得了极大的普及。然而,尽管有这些优势,多旋翼系统在设计保证安全可靠飞行性能的强大控制架构方面仍然是一个相当大的挑战。按照今天的惯例,制导、控制和导航算法(GNC)的设计主要在仿真中进行。为了保证在仿真环境中生成的控制解决方案与真实飞行性能之间的无缝转换,仿真应以足够的保真度再现真实世界的行为。
该仿真包括任意多旋翼无人机的改进动态模型。仿真非常模块化,允许用户指定几乎任何可以想象的多旋翼机身,无论对称性或特定布局如何。与在室外飞行真正的无人机相比,所包含的环境效果也有助于使模拟行为更自然。模拟包括随附论文文本中描述的所有场景。其中包括:任意非对称机身,改变机身质量或惯性矩或在飞行过程中引入执行器故障的能力,机身上的空气动力阻力,动态推力产生,不同的空气动力学螺旋桨模式,如涡环状态和叶片拍打效应。如果需要,用户可以关闭所有这些效果。
当前实现的控制器仅是内环角速率控制。由用户决定实施他们选择的更高级的控制方案。

📚2 运行结果

 

 

 

 

部分代码:

clear all;close all;clc
%--------------------------------------------------------------------------
t_control = 1/500;          % Controller/state estimation frequency 500Hz [s]
t_sim = t_control/2;        % Simulation frequency 1000Hz [s]
sim_time = 10.0;            % Duration of simulation [sec]
r2d = 180/pi;               % Conversion factor radians to degrees [deg/rad]
d2r = pi/180;               % Conversion factor degrees to radians [rad/deg]
g = 9.80665;                % Acceleration of gravity [m/s^2]
rpm2radpersec = 2*pi/60;    % Conversion factor RPM to rad/sec [rad/(s*rpm)]
rho = 1.225;                % Density of air [kg/m^3]
%--------------------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%               Quad specific configuration parameters                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The coordinate system used in this model is defined as follows:
% X: pointing forward, Roll axis
% Y: pointing to the right, Pitch axis
% Z: pointing down, Yaw axis
% To define the geometry of the airframe, the following convention is used:
% - the base airframe is assumed to be somewhat symmetric
% - the CoG for the base airframe coincides with the geometric center in X/Y plane (but is shifted along Z axis)
% - the motor arm length in X/Y plane is defined as the distance to the geometric center of the base airframe
% - motor thrust is generated at the prop, which is offset a distance (along Z) from the geometric center
% - motor thrust vector may be misaligned from purely Z direction, so a set of rotation angles is given for each motor
% - real position of CoG is given as a position vector from geometric center
% - everything is expressed in body coordinate system described above
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Noise_flag = 0;                 % Set to 1 for sensor/estimation noise, to 0 for no noise
Coriolis_correction = 1;        % Set to 1 to cancel omega x (J*omega) term in control law, 0 if not
Dyn_thrust = 0;                 % Set to 1 to engage dynamic thrust effects, to 0 to disengage
Blade_flapping = 0;             % Set to 1 to engage blade flapping effects, to 0 to disengage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Initial conditions
Att_init = [0;0;0] * d2r;       % Initial airframe attitude in Euler angles Roll/Pitch/Yaw for 6DOF block [deg]
omega_init = [0;0;0];           % Initial angular rates in Body frame for 6DOF block [rad/s]
Vb_init = [0;0;0];              % Initial velocity in Body frame for 6DOF block [m/s]
Xi_init = [0;0;0];              % Initial position in Inertial frame for 6DOF block [m]
rpm_init = 3104.5025852;        % Initial motor speed [rpm]
q_init = rpy2quat(Att_init);    % Compute the initial attitude quaternion
R_IB_init = rpy2rot(Att_init);  % Compute the initial rotation matrix R_IB
Vi_init = R_IB_init' * Vb_init; % Compute the initial velocity in Inertial axes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Parameters for aerodynamic drag computation
a = 0.060;                      % Surface area of airframe visible along the Body x axis [m^2]
b = 0.060;                      % Surface area of airframe visible along the Body y axis [m^2]
c = 0.060;                      % Surface area of airframe visible along the Body z axis [m^2]
C_D = 0.40;                     % Drag coefficient [dimensionless]
Surface_params = [a;b;c];       % Combine the surface area parameters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Parameters for dynamic thrust computation
v_h = 4.0;                      % Induced aerodynamic velocity at hover [m/s]
kappa = 1.00;                   % Value for induced power factor in hover (chosen to make transition from different states continuous)
k1 = -1.125;                    % Empirical values taken from Hoffmann_2011
k2 = -1.372;                    % Empirical values taken from Hoffmann_2011
k3 = -1.718;                    % Empirical values taken from Hoffmann_2011
k4 = -0.655;                    % Empirical values taken from Hoffmann_2011
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Parameters for blade flapping computation
k_a1s = 1.5 / 4.0;              % Gain in linear relationship between wind velocity and flapping angle [deg/(m/s)]
k_beta = 0.23;                  % Stiffness of the propeller blades [Nm/rad]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Real airframe data
CoG_real = [0;0;0.001];         % Location of center of gravity w.r.t. geometric center (in Body axes) [m]
mass_real = 0.550;              % Complete airframe mass [kg]
Jxx = 0.003960;                 %
Jxy = 0;                        %
Jxz = 0;                        %
Jyx = 0;                        %
Jyy = 0.003845;                 % Moment of inertia for multirotor w.r.t center of gravity [kg*m^2]
Jyz = 0;                        %
Jzx = 0;                        %
Jzy = 0;                        %
Jzz = 0.007350;                 %
J_real = [Jxx Jxy Jxz;Jyx Jyy Jyz;Jzx Jzy Jzz]; % Moment of inertia matrix
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MotorMatrix_real holds all the information about the actual performance
% of each actuator. The data is arranged as one row per motor/prop combo:
% 1      : Motor arm angle measured clockwise (looking from above) from the positive X axis (forward direction) [deg]
% 2      : Distance of prop/motor in X/Y plane from the geometric center of the airframe [m]
% 3      : Distance of prop/motor in Z direction from the geometric center of the airframe [m]
% 4      : Direction of prop rotation: -1 for CW, +1 for CCW [unitless]
% 5      : Control effectiveness of the actuator (nominally 1.0)
% 6      : First-order motor transfer function time constant [sec]
% 7..8   : Two coefficients that describe the RPM to thrust [N] transfer function for static conditions [a1 a2]
%          Thrust = a1 * RPM + a2 * RPM^2
% 9..10  : Two coefficients that describe the RPM to torque [Nm] transfer function for static conditions [b1 b2]
%          Torque = b1 * RPM + b2 * RPM^2
% 11     : Minimum RPM value of the actuator
% 12     : Maximum RPM value of the actuator
% 13..15 : Rotations of thrust vector around Body-fixed axes away from nominal direction [deg]
%          Nominal direction of thrust vector is [0;0;-1]
%          Rotation order from body to motor axes is Yaw/Pitch/Roll (Euler angle sequence (1,2,3))
% 16     : Propeller diameter [m]
% 17     : Propeller mass [kg]
MotorMatrix_real = [045 , 0.170 , -0.028 , -1 , 1.0 , 0.010 , [9.6820 , 0.010872]*1e-5 , [1.4504 , 0.0016312]*1e-6 , 0000 , 6000 , [0.0 , 0.0 , 0.0] , 8*2.54/100 , 11/1000; ...
                    135 , 0.170 , -0.028 , +1 , 1.0 , 0.010 , [9.6820 , 0.010872]*1e-5 , [1.4504 , 0.0016312]*1e-6 , 0000 , 6000 , [0.0 , 0.0 , 0.0] , 8*2.54/100 , 11/1000; ...
                    225 , 0.170 , -0.028 , -1 , 1.0 , 0.010 , [9.6820 , 0.010872]*1e-5 , [1.4504 , 0.0016312]*1e-6 , 0000 , 6000 , [0.0 , 0.0 , 0.0] , 8*2.54/100 , 11/1000; ...
                    315 , 0.170 , -0.028 , +1 , 1.0 , 0.010 , [9.6820 , 0.010872]*1e-5 , [1.4504 , 0.0016312]*1e-6 , 0000 , 6000 , [0.0 , 0.0 , 0.0] , 8*2.54/100 , 11/1000];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Nominal airframe data (without disturbance/uncertainties)
CoG_nominal = [0;0;0.001];      % Location of center of gravity w.r.t. geometric center (in Body axes) [m]
mass_nominal = 0.550;           % Complete airframe mass [kg]
Jxx = 0.003960;                 % 

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1] Vervoorst J W .A modular simulation environment for the improved dynamic simulation of multirotor unmanned aerial vehicles[J].  2016.

🌈4 Matlab代码、Simulink实现

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文解读 | KPConv——点云上的可形变卷积网络

原创 | 文 BFT机器人 《KPConv: Flexible and Deformable Convolution for Point Clouds》是一篇发表于2019年的研究论文,作者为Hugues Thomas、Charles R. Qi、Jean-Emmanuel Deschaud、Beatriz Marcotegui和Franois Goulette。这篇论文关注于点云数据上的卷积操作…

小白学go基础04-命名惯例对标识符进行命名

计算机科学中只有两件难事:缓存失效和命名。 命名是编程语言的要求,但是好的命名却是为了提高程序的可读性和可维护性。好的命名是什么样子的呢?Go语言的贡献者和布道师Dave Cheney给出了一个说法:“一个好笑话,如果你…

Java学习笔记——34多线程01

多线程 实现多线程进程和线程的区别多线程的实现方式方式一:继承Thread类设置线程名称线程调度线程控制线程生命周期 方式二:实现Runnable接口 实现多线程 进程和线程的区别 进程:是正在运行的程序 是系统进行资源分配和调用的独立单位每一…

SpringMvc进阶

SpringMvc进阶 SpringMVC引言一、常用注解二、参数传递三、返回值 SpringMVC引言 在Web应用程序开发中,Spring MVC是一种常用的框架,它基于MVC(Model-View-Controller)模式,提供了一种结构化的方式来构建可维护和可扩…

Json字符串内容比较-超实用版

背景 之前有类似接口diff对比,数据对比的测试需求,涉及到json格式的数据对比,调研了几个大神们分享的代码,选了一个最符合自己需求的研究了下。 说明 这个对比方法,支持JsonObject和JsonArray类型的数据对比&#x…

Matlab图像处理- 高斯低通滤波器

高斯低通滤波器 高斯低通滤波器是一种更平滑的一种滤波器,高斯低通滤波器完全没有振铃现象,且边缘平滑。 示例代码 利用输入图像,构建一个截止频率为30的高斯低通滤波器的透视图如下图所示。 M 2*size(I,1); %滤波器…

Elasticsearch脑裂

文章目录 Elasticsearch脑裂 Elasticsearch脑裂 Elasticsearch脑裂是指由于网络分区或节点间通信故障导致集群中的节点无法互相正常通信,从而导致数据不一致的情况。这可能会导致集群中的多个节点同时自认为是主节点(master),并开…

javaScript:DOM中的CSS操作

目录 1.style 属性获取元素写在行间的样式 2.getComputedStyle(元素对象,null)可以获取元素的非行间样式 3.案例(定义一个div和按钮,每点击一次按钮div宽度增加) 效果预览图 代码实现 在 JavaScript 中,可以通过…

vmware设置桥接模式后ip设置

网络连接方式设置 找到虚拟机里机器的网络设置 左边是宿主机,右边是虚拟机,按照这个设置就可以上网了(IP指定一个没有占用的值,子网掩码和网关设置成一样的)就可以联网了。 over~~

【Linux详解】——共享内存

📖 前言:本期介绍共享内存。 目录 🕒 1. 共享内存的原理🕒 2. 共享内存的概念🕘 2.1 接口认识🕘 2.2 演示生成key的唯一性🕘 2.3 再谈key 🕒 3. 共享内存相关命令🕒 4. 利…

前端使用elementui开发后台管理系统的常用功能(持续更新)

前言:本次的文章完全是自己开发中遇到的一些问题,经过不断的修改终于完成的一些功能,当个快捷的查看手册吧~ elementui开发后台管理系统常用功能 高级筛选的封装elementui的表格elementui的表格实现跨页多选回显elementui的表单elementui的日…

vue3 element - plus 安装使用教程

下边是安装教程 element - plus 是针对 vue3 开发 一个 Vue 3 UI 框架 | Element Plus (element-plus.org)https://element-plus.org/zh-CN/ 安装 element - plus ui 库 # 选择一个你喜欢的包管理器# NPM $ npm install element-plus --save# Yarn $ yarn add elemen…

Verilog 基础知识

1、数值种类 Verilog HDL 有下列四种基本的值来表示硬件电路中的电平逻辑: 0:逻辑 0 或 “假”1:逻辑 1 或 “真”x 或 X:未知 x 意味着信号数值的不确定,即在实际电路里,信号可能为 1,也可能…

【系统设计系列】 DNS和CDN

系统设计系列初衷 System Design Primer: 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版: https://github.com/donnemarti…

【算法】堆排序 详解

堆排序 详解 堆排序代码实现 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录&#xff0c…

Python入门教程 | Python3 列表(List)

Python3 列表 序列是 Python 中最基本的数据结构。 序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。 Python 有 6 个序列的内置类型,但最常见的是列表和元组。 列表都可以进…

Nacos配置文件更新+热更新+多环境配置共享+集群搭建

对服务配置文件 场景: 如果多个服务对应的配置文件都需要更改时,可以利用配置管理,方便对配置文件进行更新,而且是在本地配置前先读取nacos的配置文件,优先级大于本地配置文件 配置步骤 1.首先在Nacos中的配置列表中增…

citavi合并重复文献题录

文章目录 一、宏macro的使用方法二、合并重复题录的macro代码2.1 下载并加载macro代码2.2 显示重复题录并合并2.3 合并的规则2.4 其他 附:macro代码 一、宏macro的使用方法 参考官方文档 Using macros - Citavi 6 Manual Macro files have the .cs file extension…

【ES系列】(一)简介与安装

首发博客地址 首发博客地址[1] 系列文章地址[2] 教学视频[3] 为什么要学习 ES? 强大的全文搜索和检索功能:Elasticsearch 是一个开源的分布式搜索和分析引擎,使用倒排索引和分布式计算等技术,提供了强大的全文搜索和检索功能。学习 ES 可以掌…

【性能测试】Jenkins+Ant+Jmeter自动化框架的搭建思路

前言 前面讲了Jmeter在性能测试中的应用及扩展。随着测试的深入,我们发现在性能测试中也会遇到不少的重复工作。 比如某新兴业务处于上升阶段,需要在每个版本中,对某些新增接口进行性能测试,有时还需要在一天中的不同时段分别进行…