多旋翼无人机理论 | 四旋翼动力学数学模型与Matlab仿真
多旋翼无人机理论 | 四旋翼动力学数学模型与Matlab仿真
- 力的来源
- 数学模型
- 数学模型总结
- Matlab 仿真
力的来源
无人机的动力系统:电调-电机-螺旋桨 。
给人最直观的感受就是 电机带动螺旋桨转,产生升力。
螺旋桨旋转产生升力的原因,在很多年前伯努利就给出了解释,简单说就是流速大,压强小;流速小,压强大,也就是伯努利定理。
可以看到螺旋桨的桨面并不是平的,旋转时桨面上下的空气流速不一直,会产生向上的推力。
数学模型
对于四旋翼无人机刚开始的输入可以简化成四个电机的油门,每个电机的油门归一化到0-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为电机时间常数,越大则每次转速的增量越小,达到稳定转速的时间越长。 -
对于每个螺旋桨,产生的升力与转速平方成正比
大概曲线是这样:
计算公式如下
C T C_{T} CT就是升力系数,T就是无人机的合升力 -
四个螺旋桨的合力共同作用在机体系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
相关文章:

多旋翼无人机理论 | 四旋翼动力学数学模型与Matlab仿真
多旋翼无人机理论 | 四旋翼动力学数学模型与Matlab仿真 力的来源数学模型数学模型总结Matlab 仿真 力的来源 无人机的动力系统:电调-电机-螺旋桨 。 给人最直观的感受就是 电机带动螺旋桨转,产生升力。 螺旋桨旋转产生升力的原因,在很多年…...

Vue3项目中引入TailwindCSS(图文详情)
Vue3项目中引入TailwindCSS(图文详细) Tailwind CSS 是一个实用工具优先的 CSS 框架,提供丰富的低级类(如 text-center、bg-blue-500),允许开发者通过组合这些类快速构建自定义设计,而无需编写…...

【开源项目】数字孪生化工厂—开源工程及源码
飞渡科技数字孪生化工厂管理平台,基于自研孪生引擎,将物联网IOT、人工智能、大数据、云计算等技术应用于化工厂,为化工厂提供实时数据分析、工艺优化、设备运维等功能,助力提高生产效率以及提供安全保障。 通过可视化点位标注各厂…...

咨询团队如何通过轻量型工具优化项目管理和提高团队协作效率?
引言 在咨询行业,项目的复杂性和多样性往往意味着团队成员需要协同工作、迅速适应客户需求的变化并且在较短的时间内交付高质量的成果。对于咨询团队来说,选择一个适合的项目管理工具,不仅能够提高工作效率,还能促进团队的协作、…...
javaWeb开发
Java Web开发作为软件开发领域的一个重要分支,已经历经数十年的发展,并凭借其强大的跨平台能力、丰富的生态系统以及高度的安全性,成为构建企业级应用的首选技术之一。以下是对Java Web开发的详细解析: 一、Java Web开发的基本概…...
如何在 Vue 中处理 API 请求?
在 Vue.js 中处理 API 请求是构建动态、交互式 Web 应用程序的核心部分。为了有效地与后端服务器通信,Vue 生态系统提供了多种方式来发起和管理 API 请求。以下是几种常见的方法和最佳实践: 1. 使用 Axios Axios 是一个基于 Promise 的 HTTP 客户端&am…...
基于Debian的Linux发行版的包管理工具
基于Debian的Linux发行版中除了apt和apt-get之外,还有以下几种包管理工具: dpkg:这是Debian系发行版中最基础的包管理工具,专门用于安装、卸载和查询.deb包。与高级包管理器不同,dpkg不自动解决包的依赖关系࿰…...
2022年国家公考《申论》题(行政执法)
2022年国家公考《申论》题(行政执法) 材料一 新型冠状病毒肺炎疫情发生后,党中央、国务院出台了一系列支持企业发展的惠企政策。N市积极落实各项惠企政策,不断优化营商环境,推动区域经济高质量跨越式发展。 “当时…...

贪心算法(常见贪心模型)
常见贪心模型 简单排序模型 最小化战斗力差距 题目分析: #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n; int a[N];int main() {// 请在此输入您的代码cin >> n;for (int i 1;i < n;i) cin >> a[i];sort(a1,a1n);…...
git自动压缩提交的脚本
可以将当前未提交的代码自动执行 git addgit commitgit squash Git 命令安装指南 1. 创建脚本目录 如果目录不存在,创建它: mkdir -p ~/.local/bin2. 创建脚本文件 vim ~/.local/bin/git-squash将完整的脚本代码复制到此文件中。 3. 设置脚本权限…...

Kinova在开源家庭服务机器人TidyBot++研究里大展身手
在科技日新月异的今天,机器人技术在家庭场景中的应用逐渐成为现实,改变着我们的生活方式。今天,我们将深入探讨一篇关于家用机器人研究的论文,剖析其中的创新成果, 论文引用链接:http://tidybot2.github.i…...
使用 Spring Boot 实现文件上传:从配置文件中动态读取上传路径
使用 Spring Boot 实现文件上传:从配置文件中动态读取上传路径 一、前言二、文件上传的基本概念三、环境准备1. 引入依赖2. 配置文件设置application.yml 配置示例:application.properties 配置示例: 四、编写文件上传功能代码1. 控制器类2. …...

《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS技术理念
1.2 技术理念 在万物智联时代重要机遇期,HarmonyOS结合移动生态发展的趋势,提出了三大技术理念(如下图3-1所示):一次开发,多端部署;可分可合,自由流转;统一生态…...
将多个 k8s yaml 配置文件合并为一个文件
如下bash脚本实现功能 “将多个k8s的yaml 配置文件” 合并为一个 yaml,使用 --- 分割文件配置。 创建文件 merge_yaml.sh ,内容如下: #!/bin/bash# 默认参数 input_patterns() # 匹配的文件模式数组 output_file"combined.yaml"…...

Linux 文件的特殊权限—Sticky Bit(SBIT)权限
本文为Ubuntu Linux操作系统- 第十九期~~ 其他特殊权限: 【SUID 权限】和【SGID 权限】 更多Linux 相关内容请点击👉【Linux专栏】~ 主页:【练小杰的CSDN】 文章目录 Sticky(SBIT)权限基本概念Sticky Bit 的表示方式举例 设置和取…...

MIPI D-PHY/C-PHY/M-PHY 高速串行接口标准
MIPI D-PHY、C-PHY和M-PHY都是MIPI联盟制定的高速串行接口标准。它们都具有低功耗、高速传输速率等特点,但各有侧重: ➢MIPI D-PHY:适用于手机与其他设备之间的数据传输。 ➢MIPI C-PHY:专为手机摄像头而设计。 ➢MIPI M-PHY&am…...

USB免驱IC读写器QT小程序开发
USB免驱全协议IC卡读写器QT小程序开发,读取15693卡。 QT小程序UI开发界面: QT程序代码mainWindow.cpp代码如下: MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWind…...

OSCP靶场训练冒险之kioprix4:shell逃逸以及利用数据库提权
声明! 学习资源来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

NIPS2014 | GAN: 生成对抗网络
Generative Adversarial Nets 摘要-Abstract引言-Introduction相关工作-Related Work对抗网络-Adversarial Nets理论结果-Theoretical Results实验-Experiments优势和不足-Advantages and disadvantages缺点优点 结论及未来工作-Conclusions and future work研究总结未来研究方…...

Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
目录 一、接口测试基础概念 1、什么是接口 2、接口的类型 3、什么是接口测试 4、为什么要做接口测试 5、接口测试的实现方式 6、什么是自动化接口测试? 二、接口返回的数据格式 1、三种格式 2、Json 三、接口协议 1、webservice协议 2、dubbo协议 3、…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...