無人機部署演算法 貪心

2021-09-22 22:56:18 字數 3927 閱讀 5776

計算兩點歐氏距離:

%%兩點歐氏距離

function [d]=europe(a,b)

c=(a-b).^2;

d=sqrt(sum(c(:)));

求差集:

%%去除乙個陣列a中包含另乙個陣列b,得到差集

function [k]=remove(a,b)

k=;fl=0;

for i=1:size(a,1)

fl=0;

for j=1:size(b,1)

if(isequal(a(i,:),b(j,:))==1)

fl=1;

endend

if(fl==0)

k=[k;a(i,:)];

endend

求給定圓心半徑內點的數目:

%%求給定圓心和半徑以內的點的數目

function [num]=countpoint(data,c,r)

num=0;

for i=1:size(data,1)

if(europe(data(i,:),c)<=r)

num=num+1;

endend

先確定第一架無人機的位置,保證這架無人機在控制中心附近

%%遍歷指令碼

%%離散計算

%%loc表示得到包含最多點的圓心座標,num表示所包含的點的個數,data表示更新以後的點集,xmin~ymax表示橫縱座標邊界,dis表示間隔

function [loc,num,data]=through2(data2,r,xmin,xmax,ymin,ymax,dis,p0)

%%得到所有網格化的圓心座標

a=[xmin ymin];

for i=xmin+dis:dis:xmax

for j=ymin+dis:dis:ymax

a=[a;[i j]];

endend

%%找到覆蓋最多點的圓心位置,同時保證這個位置在控制中心附近

max=0;

for i=1:length(a)

num=countpoint(data2,a(i,:),r);

if(num>max && europe(a(i,:),p0)<=r)

max=num;

loc=a(i,:);

endendnum=max;

%%將此範圍內的點儲存下來

redun=;

for i=1:length(data2)

if(europe(data2(i,:),loc)<=r)

redun=[redun;data2(i,:)];

endend%%data表示更新以後的點集

data=remove(data2,redun);

貪心演算法,確定剩下的每一架無人機的位置:

% loc:無人機位置/圓心座標;

% num:覆蓋的熱點數目

% data:所有熱點

% r:覆蓋半徑

% r:通訊半徑

% xmin~ymax表示橫縱座標邊界,dis表示間隔

% n:部署的無人機數目減一(不計算第一架的)

% loc2:原始無人機組

function [loc,num,data]=greedy(data2,r,r,loc2,xmin,xmax,ymin,ymax,dis)

%%得到所有網格化的圓心座標

a=[xmin ymin];

for i=xmin+dis:dis:xmax

for j=ymin+dis:dis:ymax

a=[a;[i j]];

endend

%%找到覆蓋最多點的圓心位置

%限定範圍在每一架無人機r範圍內,所有

go=;

t=size(loc2);

fk=t(1);

for i=1:fk

for j=1:length(a)

if(europe(a(j,:),loc2(i,:))<=r)

go=[go;a(j,:)];

endend

end%計算最大的那個位置

max=0;

loc=[0,0];

s=size(go);

fs=s(1);

for i=1:fs

num=countpoint(data2,go(i,:),r);

if(num>max)

max=num;

loc=go(i,:);

endendmax;

num=max;

%將此範圍內的點儲存下來

redun=;

for i=1:length(data2)

if(europe(data2(i,:),loc)<=r)

redun=[redun;data2(i,:)];

endend%data表示更新以後的點集

data=remove(data2,redun);

遍歷迭代:

clc

clear

close all

load data2.mat % 熱點座標

data = data2;

%%loc表示得到包含最多點的圓心座標,num表示所包含的點的個數,data表示更新以後的點集,xmin~ymax表示橫縱座標邊界,dis表示間隔

xmin = min(data(:,1)); % 無人機座標x下界

xmax = max(data(:,1)); % 無人機座標x上界

ymin = min(data(:,2)); % 無人機座標y下界

ymax = max(data(:,2)); % 無人機座標y上界

p0 = [500 300]; % 控制中心座標

dis=5;

num_array=;

loc_array=;

% loc:無人機位置/圓心座標;

% num:覆蓋的熱點數目

% data:所有熱點

% r:覆蓋半徑

% r:通訊半徑

% xmin~ymax表示橫縱座標邊界,dis表示間隔

% n:部署的無人機數目減一(不計算第一架的)

% loc2:原始無人機組

%[loc,num,data]=greedy(data2,r,r,loc2,xmin,xmax,ymin,ymax,dis)

%%遍歷指令碼

%%離散計算

%%loc表示得到包含最多點的圓心座標,num表示所包含的點的個數,data表示更新以後的點集,xmin~ymax表示橫縱座標邊界,dis表示間隔

%function [loc,num,data]=through2(data2,r,xmin,xmax,ymin,ymax,dis)

r=50;

r=100;

%先確定第一架無人機,第一架無人機在控制中心附近

[loc0,num0,dat]=through2(data,r,xmin,xmax,ymin,ymax,dis,p0);

data=dat;

%loc2=[loc0];

num_array=;

loc_array=;

loc2=[p0;loc0];

%用貪心演算法確定剩下的無人機

for i=1:5

[loc,num,dat0]=greedy(data,r,r,loc2,xmin,xmax,ymin,ymax,dis);

loc_array=[loc,loc_array];

num_array=[num,num_array];

loc2=[loc;loc2];

data=dat0;

endnum_array=[num_array,num0]

六旋翼無人機(無人機應急基站)或巡檢無人機

諾基亞當時的無人機基站就是用的六旋翼嘛。無人機還可以去用來檢查基站。把六旋翼的原理弄懂。六旋翼和四旋翼的區別是不是還是在旋翼動力分配上?就像球上平衡車三輪和四輪的區別?其實球上平衡車不管三輪還是四倫,都是兩個角度環兩個速度環,可以投影成兩個一級倒立擺,只是最後轉化成的每個輪子的pwm的公式改變一下就...

無人機相關

無人機影像資料拼接原理 1.資料預處理 輻射校正 相鄰影象在色度上趨於一致 幾何校正 2.影象配準 提取特徵點 尺度不變特徵變換 scale invariant feature transform,sift 3.影象融合 拼接重疊區使用最佳縫合線去除 鬼影 生成的dsm 若pos資料中的高程為無人機...

無人機初探

無人機分類 1.固定翼飛機 fixed wing plane 簡稱為飛機 英語 plane 是指由動力裝置產生前進的推力或拉力,由機身的固定機翼產生公升力,在大氣層內飛行的重於空氣的航空器。e.g.我們出差或旅行時,乘坐的飛機。2.多旋翼無人機,是一種具有三個及以上旋翼軸的特殊的無人駕駛旋翼飛行器。...