多旋翼无人机理论 | 四旋翼动力学数学模型与Matlab仿真

多旋翼无人机理论 | 四旋翼动力学数学模型与Matlab仿真

  • 力的来源
  • 数学模型
  • 数学模型总结
  • Matlab 仿真

力的来源

无人机的动力系统:电调-电机-螺旋桨

给人最直观的感受就是 电机带动螺旋桨转,产生升力。

螺旋桨旋转产生升力的原因,在很多年前伯努利就给出了解释,简单说就是流速大,压强小;流速小,压强大,也就是伯努利定理。
在这里插入图片描述
在这里插入图片描述
可以看到螺旋桨的桨面并不是平的,旋转时桨面上下的空气流速不一直,会产生向上的推力。

数学模型

对于四旋翼无人机刚开始的输入可以简化成四个电机的油门,每个电机的油门归一化到0-1区间。

四旋翼动力学数学模型就是: 根据电机的油门算出和升力和各轴的力矩。

这里有三个模型近似:

  1. 对于每个电机,电机稳态转速与油门成线性关系(0%油门产生0%转速,10%油门产生10%转速,100%油门产生100%转速),电机近似一阶系统逐渐达到稳态转速
    实际在0油门也会有点转速,有一点截距
    在这里插入图片描述
    电机近似一阶系统逐渐达到稳态转速,不会是阶跃那种(下面曲线把一阶加速过程放大了,实际不会这么慢达到稳态转速)
    在这里插入图片描述
    其中电机转速和油门的计算公式如下:
    在这里插入图片描述
    给电机的油门越大,电机转速越快,油门与电机稳态转速之间接近线性关系。但是给电机一个油门之后,电机并不能立即达到对应的转速,可以把电机近似为一阶系统。
    其中 C m C_{m} Cm为电机转速斜率,定义为油门增加1,电机转速增加量; ω ˉ m \bar{\omega}_{m} ωˉm为电机转速截距,定义为油门为0时,电机的转速,则公式右边为电机的稳定转速,与油门线性相关
    公式左边为动态过程,随着电机转速 ω ˉ ( t ) \bar{\omega}(t) ωˉ(t)的增加,电机转速增量 ω ˉ ˙ ( t ) \dot{\bar{\omega}}(t) ωˉ˙(t)逐渐减小,电机转速逐渐达到给定转速。 T m T_{m} Tm为电机时间常数,越大则每次转速的增量越小,达到稳定转速的时间越长。

  2. 对于每个螺旋桨,产生的升力与转速平方成正比
    大概曲线是这样:
    在这里插入图片描述
    计算公式如下
    在这里插入图片描述
    C T C_{T} CT就是升力系数,T就是无人机的合升力

  3. 四个螺旋桨的合力共同作用在机体系z轴;四个螺旋桨力的差异在机体系三个轴产生力矩。
    其中x和y轴靠升力的不平衡来产生力矩;z轴力矩的产生靠反扭矩。
    力矩(Torque)是一个物理量,它描述了力对物体产生旋转效果的能力。力矩的公式为: τ = r × F \tau=r×F τ=r×F
    τ \tau τ是力矩(单位通常是牛顿米,N·m);F 是作用在物体上的力(单位通常是牛顿,N);r 是力臂的矢量(单位通常是米,m)。
    在无人机飞行控制中,力矩是一个非常重要的概念。无人机的姿态控制(如俯仰、滚转、偏航)都是通过调整电机产生的力矩来实现的。通过改变电机的转速,可以改变电机产生的力矩,从而控制无人机的姿态和飞行方向。
    在四旋翼中,力、力臂、力矩,用如下视图表示:
    在这里插入图片描述
    其中绿色F1、F2、F3、F4为各电机产生的力,方向为垂直xy平面向上,黄色d为力臂矢量,则力矩Mi的方向通过右手定则可以得到方向,橙色M1、M2、M3、M4则为各电机所产生的力矩。
    以电机1为例,其产生的力矩M1在机体系x,y轴的分量为:
    在这里插入图片描述
    同理可得到四个电机产生的合力矩,在x和y轴为:
    在这里插入图片描述
    在z轴方向上,螺旋桨旋转,空气给螺旋桨一个反方向的阻力,例如逆时针旋转的1号电机,
    在这里插入图片描述

黑色v为螺旋桨线速度方向,绿色f1为等效空气阻力,黄色r为力臂矢量,则通过力矩计算公式得到该力矩橙色M1z为垂直向下,大小为:
在这里插入图片描述
同理可得到其它螺旋桨旋转产生的z轴方向的力矩M2z(垂直朝上)、M3z(垂直朝下)、M4z(垂直朝上)
但是等效反扭力矩f1难以得到,通过实验得出,反扭力矩也和螺旋桨的转速平方成正比
在这里插入图片描述
其中 C M C_{M} CM为反扭力矩系数,代表单个螺旋桨转速增加1rad/s,反扭力矩增加的大小
那么可以得到四个螺旋桨产生的反扭力矩为:
在这里插入图片描述

数学模型总结

油门和电机转速的计算公式:
在这里插入图片描述
转速和升力的计算公式:
在这里插入图片描述
转速和力矩的计算公式:
在这里插入图片描述

Matlab 仿真

油门与电机转速模型 仿真代码如下,反应了电机转速响应油门的变化曲线

%% 油门与电机转速模型测试
global dt Tm Cm varpimdt = 1e-3;              % 仿真时间步长
Cm = 706.01;            % 油门增大1,电机转速变化(RPM)
varpim = 170.47;        % 零占空比时电机转速(RPM)
Tm = 0.260;             % 电机时间常数N = 2000;
t = 0:dt:dt*(N-1);
sigma = [0.7; 0.6; 0.5; 0.4];
varpi = zeros(N, 4);k=1;
for tt=0:dt:(N-2)*dtk = k+1;% 动力单元模型varpi(k, 1) = motor(sigma(1), varpi(k-1, 1));       % 电机1转速varpi(k, 2) = motor(sigma(2), varpi(k-1, 2));       % 电机2转速varpi(k, 3) = motor(sigma(3), varpi(k-1, 3));       % 电机3转速varpi(k, 4) = motor(sigma(4), varpi(k-1, 4));       % 电机4转速
endfigure(1);plot(t, varpi(:,1), 'LineWidth', 1.5); hold on
plot(t, varpi(:,2), 'LineWidth', 1.5);
plot(t, varpi(:,3), 'LineWidth', 1.5);
plot(t, varpi(:,4), 'LineWidth', 1.5); hold offlegend(['\sigma_1=' num2str(sigma(1))], ['\sigma_2=' num2str(sigma(2))],['\sigma_3=' num2str(sigma(3))],['\sigma_4=' num2str(sigma(4))]);
xlabel('时间 t (s)');ylabel('转速 \varpi  (rad/s)');title('电机模型测试'); grid on; grid minor%% 电机模型
% 输入:油门大小 sigma(0-1)
%       电机上一时刻的转速(rad/s)
% 输出:此时刻电机转速(rad/s)function varpi = motor(sigma, varpi_)global dt Tm Cm varpim;dvarpi = (Cm * sigma + varpim - varpi_) / Tm * dt;varpi = varpi_ + dvarpi;
end

油门与升力、力矩的关系仿真代码

%% 油门与升力、力矩模型测试
global dt Tm Cm varpim d cT cMdt = 1e-3;              % 仿真时间步长
Cm = 706.01;            % 油门增大1,电机转速变化(RPM)
varpim = 170.47;        % 零占空比时电机转速(RPM)
Tm = 0.260;             % 电机时间常数
d = 0.225;              % 450mm/2
cT = 1.201e-5;          % 升力系数
cM = 1.574e-7;          % 反扭力系数N = 2000;
t = 0:dt:dt*(N-1);
sigma = [0.7; 0.6; 0.5; 0.4];
varpi = zeros(N, 4);
T = zeros(N, 1);
tau = zeros(N, 3);k=1;
for tt=0:dt:(N-2)*dtk = k+1;% 电机模型varpi(k, 1) = motor(sigma(1), varpi(k-1, 1));       % 电机1转速varpi(k, 2) = motor(sigma(2), varpi(k-1, 2));       % 电机2转速varpi(k, 3) = motor(sigma(3), varpi(k-1, 3));       % 电机3转速varpi(k, 4) = motor(sigma(4), varpi(k-1, 4));       % 电机4转速[T(k), tau(k,:)] = power_mix(varpi(k, :));
endfigure(1);subplot(211); plot(t, T, 'linewidth', 1.5); title('动力合成模型');ylabel('升力 (N)');
subplot(212);plot(t, tau(:,1), 'linewidth', 1.5);hold on
plot(t, tau(:,2),'linewidth', 1.5);plot(t, tau(:,3),'linewidth', 1.5);hold off
ylabel('力矩 (N\cdotm)');xlabel('时间 (t)'); legend('\tau_x', '\tau_y', '\tau_z');%% 电机模型
% 输入:油门大小 sigma(0-1)
%       电机上一时刻的转速(rad/s)
% 输出:此时刻电机转速(rad/s)function varpi = motor(sigma, varpi_)global dt Tm Cm varpim;dvarpi = (Cm * sigma + varpim - varpi_) / Tm * dt;varpi = varpi_ + dvarpi;
end%% 动力合成模型
% 输入:四个电机转速
% 输出:合升力与三轴力矩
function [T, tau] = power_mix(varpi)global cT cM d;T = cT * sum(varpi.^2);tau(1) = sqrt(2)/2 * d * cT * (-varpi(1)^2 + varpi(2)^2 + varpi(3)^2 - varpi(4)^2);tau(2) = sqrt(2)/2 * d * cT * ( varpi(1)^2 + varpi(2)^2 - varpi(3)^2 - varpi(4)^2);tau(3) = cM * (varpi(1)^2 - varpi(2)^2 + varpi(3)^2 - varpi(4)^2);
end

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

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

相关文章

Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶

1.直接借助Vue的动态绑定样式绑定 Vue动态样式绑定 在Vue中,动态样式绑定是一种强大的功能,它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解: 一、基础知识 Vue的动态样式绑定主要通过v-b…

智能家居实训室中,STC单片机驱动的“互联网+”智能家居系统设计

一、引言 随着经济的快速发展,人们对家居环境的智能化、网络化需求日益增强,智能家居的研究也因此受到了国内外相关机构的广泛关注。STC单片机凭借其卓越的性能和广泛的应用领域,成为了智能家居系统设计的优选方案。作为一种先进的微控制器&…

计算机网络——期末复习(3)4-6章考试重点

第四章 根据IPv4第1个十进制数值判断,127以下为A类,128~191为B类,192~223为C类不能分配给主机或路由器接口的:A类网络号0和127,主机号全为0或全为1私有地址(Private IP Address)是指一类专门保…

内置ALC的前置放大器D2538A/D3308

一、概述 D2538A/D3308是芯谷科技推出的带有ALC(自动电平控制)的前置音频放大器芯片,最初产品为单声道/立体声收录机及盒式录音机而开发,作为录音/回放的磁头放大器使用;由于产品的高增益、低噪声及ALC外部可调的特性&…

【玩转MacBook】Git安装

Git 官网也提到了MacBook 可以使用 Homebrew 安装 Git,所以在此使用 Homebrew 安装。 1、安装 Homebrew 执行安装脚本 在 Terminal 中执行如下命令: /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.…

Speckly:基于Speckle文档的RAG智能问答机器人

前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人,它能像一位经验丰富的工程师,理解你的问题,并从 Speckle 文档中精准地找到答案。更厉害的是,它甚至可以帮你生成代码片段!🚀 本文将详…

Excel无法插入新单元格怎么办?有解决方法吗?

在使用Excel时,有时会遇到无法插入新单元格的困扰。这可能是由于多种原因导致的,比如单元格被保护、冻结窗格、合并单元格等。本文将详细介绍3种可能的解决方案,帮助你顺利插入新单元格。 一、消冻结窗格 冻结窗格功能有助于在滚动工作表时保…

电子配件行业的未来之路:产品说明书数字化转型的力量

在科技飞速发展的今天,电子配件行业作为科技创新的前沿阵地,正经历着前所未有的变革。从智能手机、平板电脑到智能穿戴设备,各种新型电子配件层出不穷,极大地丰富了人们的生活。然而,随着产品种类的增多和功能的复杂化…

Python+Django 技术实现自动化漏洞扫描系统开发

作者简介 ,徐师兄是一位拥有7年大厂经验的资深程序员,致力于Python技术领域的探索与实践,擅长毕业设计实战。他拥有超过12万的全网粉丝,是CSDN博客专家,也是掘金、华为云、阿里云和InfoQ等平台的优质作者。除了丰富的实…

EleutherAI/pythia-70m

EleutherAI/pythia-70m” 是由 EleutherAI 开发的一个小型开源语言模型,它是 Pythia Scaling Suite 系列中参数量最小的模型,拥有大约 7000 万个参数。这个模型主要旨在促进对语言模型可解释性的研究; Pythia Scaling Suite是为促进可解释性…

WinForm 美化秘籍:轻松实现 Panel 圆角虚线边框

文章目录 1、引言2、案例实现1、创建自定义 Panel 类2、定义圆角矩形3. 使用自定义 Panel4. 调整属性5、使用背景图片来实现5、拓展:使用 Panel 的 Paint重绘单独实现虚线边框效果 3、实现效果4、总结 1、引言 在 Winform 应用程序开发中,美化用户界面&…

Goland 安装与使用

GoLand安装 官方网址: JetBrains GoLand:不只是 Go IDE 1. 进入官网,点击下载: ​ 2. 如下图一步步安装 ​ ​ ​ ​ ​ 3. 如下图一步步安装

pdf有密码,如何实现pdf转换word?

PDF想要转换成其他格式,但是当我们将文件拖到PDF转换器进行转换的时候发现PDF文件带有密码怎么办?今天分享PDF有密码如何转换成word方法。 方法一、 PDF文件有两种密码,打开密码和限制编辑,如果是因为打开密码,建议使…

uniapp实现APP、小程序与webview页面间通讯

需求: 1、需要在Uniapp开发的APP或小程序页面嵌入一个H5网页,需要拿到H5给APP传递的数据。 2、并且这个H5是使用vuevant开发的。(其实跟使用uniapp开发H5一样) 实现步骤: 1、首先需要兼容多端和App端,因…

Vue开源项目Pure Admin二次开发:实现前后端柱状图

目标:在Vue开源项目Pure Admin的基础上,增加菜单和标签页,实现同期温度对比的柱状图,支持按时段查询。 先贴上效果图: 增加菜单 新建src\router\modules\weather.ts, export default {path: "/weat…

Markdown语法字体字号讲解

学习目录 语法详解改变字体样式[电脑要自带该样式字体]改变局部字号全局字体字号的设置使用场景及应用实例 > 快乐试试吧😃 👇 👇 👈点击该图片即可跳转至Markdown学习网站进行 Markdown语法字体字号讲解👈点击这里…

ESP-NETIF L2 TAP 接口-物联网嵌入式开发应用

ESP-NETIF L2 TAP 概述 ESP-NETIF L2 TAP 接口是 ESP-IDF 访问用户应用程序中的数据链路层(OSI/ISO 中的 L2)以进行帧接收和传输的机制。在嵌入式开发中,它通常用于实现非 IP 相关协议,如 PTP 和 Wake on LAN 等。 Tips : 目前…

xterm遇到的问题及解决方案

xterm遇到的问题及解决方案 /r插入终端导致的之后插入的数据覆盖了改行头部的数据 问题说明 如图所示,当在一行输入的候,输入的l插入到了改行的头部。 查看ws返回数据 可见ws返回的信息存在\r字符,在xterm.js中\r是回车字符的意思&…

springboot 工程使用proguard混淆

在 Maven 构建的 Spring Boot 项目中使用 ProGuard 进行代码混淆时,需要正确配置 Maven 插件和 ProGuard 的混淆规则。由于 Spring Boot 项目通常会依赖大量的反射机制和动态代理,因此必须特别小心确保这些部分在混淆过程中不会被破坏。 步骤 1&#xf…

我的秋招总结

我的秋招总结 个人背景 双非本,985硕,科班 准备情况 以求职为目的学习Java的时间大概一年。 八股,一开始主要是看B站黑马的八股文课程,背JavaGuide和小林coding还有面试鸭。 算法,250,刷了3遍左右 项目&…