问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

四旋翼无人机动力学:从数学模型到Matlab仿真

创作时间:
作者:
@小白创作中心

四旋翼无人机动力学:从数学模型到Matlab仿真

引用
CSDN
1.
https://blog.csdn.net/qq_32761549/article/details/144536709

四旋翼无人机作为一种常见的无人机类型,其动力学特性是理解其飞行控制的基础。本文将从力的来源、数学模型建立到Matlab仿真,全面解析四旋翼无人机的动力学原理。

力的来源

四旋翼无人机的动力系统主要由电调-电机-螺旋桨组成。直观来看,电机带动螺旋桨旋转,产生升力。螺旋桨桨面的特殊设计使得旋转时桨面上下的空气流速不同,根据伯努利定理(流速大压强小,流速小压强大),产生向上的推力。

数学模型

四旋翼无人机的动力学数学模型主要涉及电机转速、升力和力矩的计算。具体来说,就是根据电机的油门输入,计算出相应的升力和各轴的力矩。

电机转速模型

电机的转速与油门输入之间存在线性关系。油门输入范围为0-1,其中:

  • Cm:电机转速斜率,表示油门每增加1,电机转速增加的量。
  • ωm:电机转速截距,表示油门为0时的电机转速。
  • Tm:电机时间常数,影响电机达到稳定转速的速度。

电机转速的动态过程可以用以下公式描述:

升力模型

螺旋桨产生的升力与转速的平方成正比,公式如下:

其中,CT是升力系数,T是无人机的合升力。

力矩模型

四个螺旋桨的合力共同作用在无人机的z轴,而力矩则在三个轴上产生。具体来说:

  • x轴和y轴的力矩通过升力的不平衡产生。
  • z轴的力矩通过反扭矩产生。

力矩的计算公式为:τ = r × F,其中τ是力矩,F是作用力,r是力臂矢量。

以电机1为例,其产生的力矩M1在x轴和y轴的分量计算如下:

z轴方向的反扭力矩与螺旋桨转速的平方成正比,公式如下:

其中,CM是反扭力矩系数。

数学模型总结

综合上述模型,可以得到以下关键公式:

  • 油门和电机转速的关系:

  • 转速和升力的关系:

  • 转速和力矩的关系:

Matlab仿真

为了验证上述模型的正确性,可以通过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

通过上述仿真代码,可以直观地观察到油门输入对电机转速、升力和力矩的影响,从而验证数学模型的正确性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号