計算兩點歐氏距離:
%%兩點歐氏距離
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.多旋翼無人機,是一種具有三個及以上旋翼軸的特殊的無人駕駛旋翼飛行器。...