多旋翼无人机理论 | 四旋翼动力学数学模型与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 varpim

dt = 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)*dt
    k = 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转速
end

figure(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 off

legend(['\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 cM

dt = 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)*dt
    k = 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, :));
end

figure(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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么要在PHY芯片和RJ45网口中间加网络变压器

在PHY芯片和RJ45网口之间加入网络变压器是出于以下几个重要的考虑: 1. 电气隔离:网络变压器提供了电气隔离功能,有效阻断了PHY芯片与RJ45之间直流分量的直接连接。这样可以防止可能的电源冲突,降低系统故障的风险,并保…

Windows 安装 Jenkins 教程

Jenkins 简介 Jenkins 是一个开源的自动化服务器,主要用于持续集成(CI)和持续交付(CD)。它可以自动化软件开发生命周期中的许多任务,如构建、测试、部署和发布。Jenkins 最初是由 Kohsuke Kawaguchi 在 20…

Docker中的MYSQL导入本地SQL语句

在本地mysql安装的bin目录下打开cmd窗口并执行以下命令导出sql文件 mysqldump -uroot -p mysql >schema.sql mysql -数据库 schema.sql -导出的SQL语句文件名 使用xftp上传文件到centos7中的某个文件夹中 使用docker cp schema.sql mysql:.(有一个点)上传到mys…

javaweb 04 springmvc

0.1 在上一次的课程中,我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。 其实呢,是我们在浏览器发起请求,请求了我们…

LinkedList类 (链表)

目录 一. LinkedList 基本介绍 二. LinkedList 中的法及其应用 1. 添加元素 (1) add() (2) addAll() (3) addFirst() (4) addLast() 2. 删除元素 (1) remove() (2) removeAll() (3) removeFirst() (4) removeLast() 3. 遍历元素 (1) for 循环遍历 (2) for - each …

Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 身体健康界面 公共书籍界面 借阅信息界面 归还…

第T4周:TensorFlow实现猴痘识别(Tensorboard的使用)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标: 1、学习tensorboard的使用 具体实现: (一)环境: 语言环境:Python 3.10 编 译 器…

Gitlab17.7+Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用)

一、gitlab设置: 1、进入gitlab选择主页在左侧菜单的下面点击管理员按钮。 2、选择左侧菜单的设置,选择网络,在右侧选择出站请求后选择允许来自webhooks和集成对本地网络的请求 3、webhook设置 进入你自己的项目选择左侧菜单的设置&#xff…

嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别

引言:在现代嵌入式硬件设计中,开关元件作为电路中的重要组成部分,起着至关重要的作用。三种主要的开关元件——IGBT(绝缘栅双极型晶体管)、MOSFET(金属氧化物半导体场效应晶体管)和三极管&#…

Kafka数据迁移全解析:同集群和跨集群

文章目录 一、同集群迁移二、跨集群迁移 Kafka两种迁移场景,分别是同集群数据迁移、跨集群数据迁移。 一、同集群迁移 应用场景: broker 迁移 主要使用的场景是broker 上线,下线,或者扩容等.基于同一套zookeeper的操作。 实践: 将需要新添加…

我的秋招总结

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

构建全志 T113 Tina SDK

1、环境配置: 准备一个 Ubuntu 系统,可以是 WSL,虚拟机等,建议版本是 20.04。 1.1、安装必要的软件 进入系统后,输入下方命令安装需要的工具 : sudo apt update -y sudo apt full-upgrade -y sudo apt i…

Datawhale-AI冬令营二期

目录 一、番茄时钟(1)输入Prompt(2)创建 HTML 文件解析1:HTML结构解析2:计时器内容解析3:按钮区域解析4:脚本引用 (3)使用JavaScript实现时钟功能解析1&#…

初探C语言|C语言中有哪些操作符呢?

文章目录 前言算术操作符示例 移位操作符原码,反码 与补码正数负数计算 左移<<右移>> 位操作符例题 赋值操作符单目操作符sizeof 操作符 关系操作符逻辑操作符短路现象 条件操作符逗号表达式下标引用、函数调用和结构成员表达式求值算术转换操作符属性 欢迎讨论: 如…

学习记录:配置mybatisplus的分页查询插件,mybatis-plus-jsqlparser 依赖

来源官方文档:分页插件 | MyBatis-Plus 于 v3.5.9 起&#xff0c;PaginationInnerInterceptor 已分离出来。如需使用&#xff0c;则需单独引入 mybatis-plus-jsqlparser 依赖 配置Maven bom 在我们的配置文件&#xff0c;pom.xml中 <properties> 这个标签下面&#xf…

电子应用设计方案74:智能家庭对讲系统设计

智能家庭对讲系统设计 一、引言 智能家庭对讲系统作为智能家居的重要组成部分&#xff0c;为家庭成员之间以及与访客的沟通提供了便捷、高效的方式。本设计方案旨在打造一个功能强大、稳定可靠、操作简便且具有良好扩展性的智能家庭对讲系统。 二、系统概述 1. 系统目标 - 实…

数据库高安全—openGauss安全整体架构安全认证

openGauss作为新一代自治安全数据库&#xff0c;提供了丰富的数据库基础安全能力&#xff0c;并逐步完善各类高阶安全能力。这些安全能力涵盖了访问登录认证、用户权限管理、审计与追溯及数据安全隐私保护等。本章节将围绕openGauss安全机制进行源码解读&#xff0c;以帮助数据…

埃斯顿机器人程序模版案例,欢迎指点

埃斯顿机器人程序模版案例&#xff0c;欢迎指点

python监控数据处理应用服务Socket心跳解决方案

1. 概述 从网页、手机App上抓取数据应用服务&#xff0c;涉及到多个系统集成协同工作&#xff0c;依赖工具较多。例如&#xff0c;使用Frida进行代码注入和动态分析&#xff0c;以实现对网络通信的监控和数据捕获。在这样的集成环境中&#xff0c;手机模拟器、手机中应用、消息…

C# GDI+数码管数字控件

调用方法 int zhi 15;private void button1_Click(object sender, EventArgs e){if (zhi > 19){zhi 0;}lcdDisplayControl1.DisplayText zhi.ToString();} 运行效果 控件代码 using System; using System.Collections.Generic; using System.Drawing.Drawing2D; using …