💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
💥1 概述
【四旋翼飞行器】约束驱动的生产线植绒方法:V形作为节能策略研究
在过去的二十年里,机器人植绒的研究受到了极大的关注。在本文中,我们提出了一种约束驱动的控制算法,该算法最大限度地减少了单个智能体的能量消耗并产生了紧急V形。由于形成是从代理之间的分散交互中出现的,我们的方法对于自发地向系统添加或删除代理是稳健的。首先,我们提出了固定翼无人机后面尾随上冲的分析模型,并推导出了尾随无人机的最佳空速,以最大限度地提高其行驶耐力。接下来,我们证明了简单地以最佳空速飞行永远不会导致紧急集群行为,我们提出了一种新的分散式“anseroid”行为,可以产生紧急V形。我们将这些行为编码在约束驱动的控制算法中,该算法可最大程度地降低每架无人机的机车功率。最后,我们证明了在我们提出的控制定律下,以近似V或梯队编队初始化的无人机将收敛,并且我们证明了这种出现是在模拟和Crazyflie四旋翼飞行器机队的物理实验中实时发生的。
一、引言
在过去的二十年里,机器人植绒技术因其广泛的应用前景而受到了极大的关注。特别是在四旋翼飞行器领域,如何通过优化编队和飞行策略来减少能量消耗,成为了研究的热点。本文提出了一种约束驱动的控制算法,旨在通过形成紧急V形编队来最大限度地减少单个智能体的能量消耗。
二、研究背景与意义
四旋翼飞行器因其灵活性和可操作性,在多个领域得到了广泛应用。然而,能量消耗问题一直是制约其性能提升的关键因素之一。通过优化飞行编队和策略,不仅可以减少能量消耗,还可以提高飞行器的续航能力和整体性能。因此,本文的研究具有重要的理论意义和实际应用价值。
三、研究方法
四、实验结果与分析
-
模拟实验:
- 在模拟环境中,以近似V或梯队编队初始化的无人机在提出的控制定律下逐渐收敛,形成了稳定的V形编队。
- 通过对比实验,验证了提出的控制算法在减少能量消耗方面的有效性。
-
物理实验:
- 在Crazyflie四旋翼飞行器机队上进行了物理实验。实验结果表明,提出的控制算法能够引导无人机自动收敛到V形编队,并显著减少了能量消耗。
五、结论与展望
本文提出了一种基于约束驱动的控制算法,通过形成紧急V形编队来减少四旋翼飞行器的能量消耗。模拟和物理实验结果表明,该算法具有显著的效果和广泛的应用前景。未来,将进一步研究如何优化算法参数和提高算法的鲁棒性,以应对更复杂的环境和任务需求。
📚2 运行结果
部分代码:
clear; close all; clc;
%%% Simulation Parameters
N = 2; % number of agents
%global angle and error tolerance
global thetaG epsilon;
thetaG = 0;
epsilon = 20*pi/180;
%time step
global dt;
dt = 1/30; %002; %333; %0.125; % 0025;%0.05;%125; %0.125;
tf = 20;
L = 5; %domain size (for plots)
%aerodynamic parameters
global omega gamma b rStar CL CF kappa;
%based on the RQ-11 RAVEN
gamma = 1.3;
rStar = 0.0544;
b = 1.4 / 2; % half span
%friction coefficients
CL = 95;
CF = 5E-3;
%ensures continuity, about 6% of span length
omega = gamma / (2*pi*rStar^2);
%tradeoff between rolling and pitching cost
kappa = 0.25;
%wake length property
global mu sigma;
sigma = 2; %1.25; %2.8; %1.25;
mu = -sigma; %2.75; % %-1.75;
%control constraints
global vmax vmin wmax;
vmax = 15; vmin = 7;
wmax = 1;
epsilon = pi/48/2; %pi/12 = 15 degrees
global cviol;
cviol = 0;
P0 = [(1:N)*0; (1:N)*(2)*b];
th0 = thetaG*ones(1,N);
% visualize ICs
cg = mean(P0,2);
figure(1); clf; hold on;
VisualizeW(P0, th0, cg, L);
colorbar;
%generate time and iterate!
t = 0:dt:tf;
% save position and angle data
P = nan([length(t), size(P0)]);
TH = nan([length(t), length(th0)]);
U = nan([length(t), size(P0)]);
%% do the simulation!
fprintf('Begin the simulation!\n');
tic;
P(1,:,:) = P0;
TH(1,:) = th0;
for ti = 2:length(t)
%extract current state variables
p = squeeze(P(ti-1,:,:)); % next position
th = squeeze(TH(ti-1,:)); % next angle
%assume v is constant and w is zero
if ti > 2
v = squeeze(U(ti-2,1,:))';
else
v = zeros(1,N);
end
w = zeros(1,N);
for i = 1:N % flip(idx)
[v(i), w(i)] = OCP(p, th, i, v, w);
end
%update the dyanmics
for i = 1:N
th(i) = th(i) + w(i)*dt; %this is first on purpose
p(:,i) = p(:,i) + v(i)*[cos(th(i)); sin(th(i))]*dt;
end
P(ti,:,:) = p;
TH(ti,:) = th;
U(ti-1,:,:) = [v; w];
if mod(ti, 20) == 0
fprintf('%g %%\n', round(100*ti / length(t)) );
end
end
fprintf('Simulation complete after %g sec\n', toc);
%% visualize!
%VIS = true;
%vii = 2;
%J = zeros(N, length(t));
%for ti = 1:length(t)-1 %last element of w is NaN apparently
%for ti = [1, 250, 500]
% p = squeeze(P (ti,:,:)); % position
% th = squeeze(TH(ti,:)); % angle
% cg = mean(p,2);
%
% for k = 1:N
% [W, M] = Forces(p, th, k);
% J(k, ti) = abs(M)*kappa - W;
% end
%
% figure(1); clf; hold on;
% if VIS
% [W, M] = Forces(p, th, vii);
% VisualizeW(p, th, cg, L, vii);
% Ji = abs(M)*kappa - W;
% text(p(1,vii), p(2,vii)+1, ...
% ['J = ' num2str(Ji, '%0.2f'), ', v = ', num2str(U(ti,1,vii), '%0.2f')], ...
% 'FontSize', 14);
% else
% VisualizeW(p, th, cg, L);
% end
%
% xlabel('p_x (m)');
% ylabel('p_y (m)');
% axis equal square;
% grid off; box off;
% text(cg(1)+L - 3, cg(2)+L, ['t = ', num2str(t(ti), '%.2f'), ' s'], ...
% 'HorizontalAlignment', 'left', 'VerticalAlignment', 'bottom');%, ...
% 'FontSize', 16);
% set(gca, 'FontSize', 14, 'FontName', 'Times');
%
% colorbar;
% set(gca, 'fontsize', 14, 'fontname', 'times');
% saveas(gcf, ['figs/sim_', num2str(ti, '%04g'), '.png'])
%end
fprintf('Violations: %g\n', cviol);
%%
for ti = 1:length(t)
p = squeeze(P (ti,:,:)); % position
th = squeeze(TH(ti,:)); % angle
cg = mean(p,2);
for k = 1:N
[W, M] = Forces(p, th, k);
J(k, ti) = abs(M)*kappa - W;
end
end
lw = 4;
figure(100); clf; hold on;
plot(t(1:end-1), J(1,1:end-1), '-.', 'linewidth', lw);
plot(t(1:end-1), J(2,1:end-1), 'linewidth', lw);
%plot(t, max(J), 'r', 'linewidth', lw);
%plot(t, min(J), 'r', 'linewidth', lw);
%plot(t, mean(J), 'k', 'linewidth', lw);
legend('Front UAV', 'Rear UAV');
xlabel('Time (s)');
ylabel('Cost (J)');
grid on; box on;
set(gca, 'fontsize', 14, 'fontname', 'times');
saveas(gcf, '/results/CostPlot.png')
figure(101); clf; hold on;
sj = sum(J);
plot(t, sj, 'linewidth', lw);
grid on; box on;
xlabel('Time [s]');
ylabel('System Cost (J)');
grid on; box on;
trapz(t, sj)
c1 = trapz(t, J(1,:))
c2 = trapz(t, J(2,:))
%%
figure(102); clf; hold on;
lw = 2.5;
for i = 1:N
Pi = squeeze(P(:,:,i));
plot(Pi(:,1), Pi(:,2), '-k', 'linewidth', lw);
xlabel('p_x');
ylabel('p_y');
grid on; box on;
axis square equal;
end
saveas(gcf, '/results/Trajectories.png')
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]Logan Beaver (2022) A Constraint-Driven Approach to Line Flocking: The V Formation as an Energy-Saving Strategy
Title
A Constraint-Driven Approach to Line Flocking: The V Formation as an Energy-Saving Strategy
Journal/Conference
IEEE Transactions on Robotics
4 Matlab代码实现