classdef UAVNetwork < handle
properties
NUM_UAVS;
network_matrix;
UAVS;
compute_Y;
TIME_STEP;
NMPC_handle;
THREE_DIMENSIONAL;
d_safe;
v_max;
DELAY_SYNC;
FOLLOW_TRAJECTORY;
SENSING_HORIZON;
sim;
UAV_handels;
end
methods
function obj = UAVNetwork(N,TIME_STEP,network_matrix,recievers_pos_ode0,X_hat0,S_RLS0,compute_Y,NMPC_handle,d_safe,v_max,MODE,model_params,UAV_trajs)
%%
% flags
obj.DELAY_SYNC = -1;
obj.FOLLOW_TRAJECTORY = false;
obj.THREE_DIMENSIONAL = false;
if nargin > 10 && MODE == "3D"
obj.THREE_DIMENSIONAL = true;
end
% main variables
obj.NUM_UAVS = N;
obj.network_matrix = network_matrix;
obj.compute_Y = compute_Y;
obj.UAVS = cell(obj.NUM_UAVS,1);
obj.TIME_STEP = TIME_STEP;
obj.NMPC_handle = NMPC_handle;
obj.d_safe = d_safe;
obj.v_max = v_max;
obj.SENSING_HORIZON = 2 * d_safe;
%% selection matrices and lists
for i = 1 : obj.NUM_UAVS
UAV_struct = {};
UAV_struct.TRANSMITTER_FOUND = false;
UAV_struct.T_REPLANNING = 4;
UAV_struct.selection_matrix = [];
UAV_struct.selection_list = [];
UAV_struct.complementar_selection_matrix = [];
UAV_struct.complementar_selection_list = [];
if nargin > 11
UAV_struct.model_params = model_params;
end
for j = 1 : obj.NUM_UAVS
if network_matrix(i,j) == 1
ek = eye(j,obj.NUM_UAVS);
ek = ek(j,:);
UAV_struct.selection_matrix = [UAV_struct.selection_matrix; ek];
UAV_struct.selection_list = [UAV_struct.selection_list j];
else
ek = eye(j,obj.NUM_UAVS);
ek = ek(j,:);
UAV_struct.complementar_selection_matrix = [UAV_struct.complementar_selection_matrix; ek];
UAV_struct.complementar_selection_list = [UAV_struct.complementar_selection_list j];
end
end
UAV_struct.dispatcher = Dispatcher(length(UAV_struct.selection_list),TIME_STEP,recievers_pos_ode0(UAV_struct.selection_list,:),X_hat0,S_RLS0);
% add prev pos and velocity variable to estimate velocity
% and acceleration
% UAV_struct.prev_neigh_pos = zeros(N,3);
% UAV_struct.prev_neigh_vel = zeros(N,3);
% UAV_struct.prev_non_neigh_values = zeros(N,3);
UAV_struct.TRACKED_OBS = false;
if nargin > 12
obj.FOLLOW_TRAJECTORY = true;
UAV_struct.trajectory_ref = squeeze(UAV_trajs(i,:,:));
UAV_struct.trajectory_step = 1;
end
obj.UAVS{i} = UAV_struct;
end
%% initialize DRLS algorithm
for i = 1 : obj.NUM_UAVS
obj.UAVS{i}.X_hat = X_hat0;
obj.UAVS{i}.S_RLS = S_RLS0;
% extract transmitter estimate position
X_hat = obj.UAVS{i}.X_hat;
M_hat = [X_hat(1) X_hat(2) X_hat(3);X_hat(2) X_hat(4) X_hat(5); X_hat(3) X_hat(5) X_hat(6)];
% old_transmitter_pos_hat = transmitter_pos_hat;
obj.UAVS{i}.transmitter_pos_hat = (inv(M_hat)*X_hat(7:9).').'; % new transmitter estimate
obj.UAVS{i}.last_transmitter_pos_hat = obj.UAVS{i}.transmitter_pos_hat;
obj.UAVS{i}.last_trustable_transmitter_pos_hat = obj.UAVS{i}.transmitter_pos_hat;
end
%% initialize UAV controller
for i = 1 : obj.NUM_UAVS
%% known uavs
temp_mask = (obj.UAVS{i}.selection_list ~= i);
num_neigh = length(obj.UAVS{i}.selection_list)-1;
if ~isempty(obj.UAVS{i}.selection_matrix)
if ~obj.THREE_DIMENSIONAL
neigh = obj.UAVS{i}.selection_matrix * [recievers_pos_ode0(:,1:2) zeros(size(recievers_pos_ode0,1),1)];
else
neigh = obj.UAVS{i}.selection_matrix * recievers_pos_ode0(:,1:3);
end
neigh = neigh(temp_mask,:);
else
neigh = [];
end
neigh = [neigh;zeros(obj.NUM_UAVS-num_neigh,3)];
neigh = [neigh;zeros(2*obj.NUM_UAVS,3)];
%% sensor
% temp_mask1 = (obj.UAVS{i}.complementar_selection_list ~= i);
% num_non_neigh = obj.NUM_UAVS-num_neigh-1;
% if ~isempty(obj.UAVS{i}.complementar_selection_matrix)
% if ~obj.THREE_DIMENSIONAL
% non_neigh = obj.UAVS{i}.complementar_selection_matrix * [recievers_pos_ode0(:,1:2) zeros(size(recievers_pos_ode0,1),1)];
% else
% non_neigh = obj.UAVS{i}.complementar_selection_matrix * recievers_pos_ode0(:,1:3);
% end
% non_neigh = non_neigh(temp_mask1,:);
% else
% non_neigh = [];
% end
% non_neigh = [non_neigh;zeros(obj.NUM_UAVS-num_non_neigh,3)];
if ~obj.THREE_DIMENSIONAL
[nearest_obs,min_dist,min_index] = UAVNetwork.compute_nearest_obs([recievers_pos_ode0(i,1:2) 0],[recievers_pos_ode0(1:size(recievers_pos_ode0,1) ~= i,1:2) zeros(size(recievers_pos_ode0,1)-1,1)]);
non_neigh = [nearest_obs;zeros(2,3)];
else
[nearest_obs,min_dist,min_index] = UAVNetwork.compute_nearest_obs(recievers_pos_ode0(i,1:3),recievers_pos_ode0(1:size(recievers_pos_ode0,1) ~= i,1:3));
non_neigh = [nearest_obs;zeros(2,3)];
end
num_non_neigh = 3;
if obj.UAVS{i}.TRACKED_OBS && min_dist >= obj.SENSING_HORIZON
num_non_neigh = -1;
non_neigh = zeros(3,3);
obj.UAVS{i}.TRACKED_OBS = false;
elseif ~obj.UAVS{i}.TRACKED_OBS && min_dist <= obj.SENSING_HORIZON
obj.UAVS{i}.TRACKED_OBS = min_index;
elseif ~obj.UAVS{i}.TRACKED_OBS && min_dist >= obj.SENSING_HORIZON
num_non_neigh = -1;
non_neigh = zeros(3,3);
elseif obj.UAVS{i}.TRACKED_OBS && min_dist <= obj.SENSING_HORIZON
if min_index == obj.UAVS{i}.TRACKED_OBS
% non_neigh(2,:) = (non_neigh(1,:)-prev_non_neigh_matrix(1,:))/obj.NMPC_handle.PredictionHorizon;
% non_neigh(3,:) = (non_neigh(2,:)-prev_non_neigh_matrix(2,:))/obj.NMPC_handle.PredictionHorizon;
else
obj.UAVS{i}.TRACKED_OBS = min_index;
end
end
%%
X0 = recievers_pos_ode0(i,:);
obj.UAVS{i}.lambda_factor = 0.1; % promote robust responces
if ~obj.THREE_DIMENSIONAL
curr_ref = EMA_const_reference(X0,[obj.UAVS{i}.transmitter_pos_hat(1:2) 0 0],obj.UAVS{i}.lambda_factor,NMPC_handle.PredictionHorizon);
U0 = [0 0];
NMPC_params = {neigh,num_neigh,non_neigh,num_non_neigh,d_safe,v_max};
else
没有合适的资源?快使用搜索试试~ 我知道了~
使用无人机群进行磁性装置定位matlab代码.zip
共125个文件
m:122个
png:1个
mexw64:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 186 浏览量
2024-03-24
21:37:56
上传
评论
收藏 1.56MB ZIP 举报
温馨提示
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 5.作者介绍:某大厂资深算法工程师,从事Matlab算法仿真工作10年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+。
资源推荐
资源详情
资源评论
收起资源包目录
使用无人机群进行磁性装置定位matlab代码.zip (125个子文件)
jeromq-0.5.2.jar 459KB
UAVNetwork.m 52KB
gjk.m 35KB
Simulator.m 32KB
Simulator.m 19KB
cbor.m 15KB
cbor.m 13KB
cbor.m 13KB
generateQuadrotorModel.m 11KB
UAV_controller.m 9KB
NLPOnline.m 8KB
NLPOnline.m 7KB
NLP_function3D.m 6KB
NLP_function.m 6KB
MinDistBernstein2Bernstein.m 6KB
Integral_expr_eval.m 6KB
RemoteAPIClient.m 5KB
DD_Bernstein_eval.m 5KB
CollCheckBernstein2Bernstein.m 5KB
D_Bernstein_eval.m 4KB
RemoteAPIClient.m 4KB
RemoteAPIClient.m 4KB
nlmpc_tuning.m 4KB
nlmpc_tuning.m 4KB
MinDistBernstein2Polygon.m 4KB
CollCheckBernstein2Polygon.m 4KB
ObjFunction.m 4KB
buildConstraints.m 3KB
buildConstraints.m 3KB
quadrotor_model_jac.m 3KB
quadrotor_IneqConstriant.m 3KB
Bernstein_eval.m 3KB
MagneticFieldSensors.m 3KB
real_uav_NMPC.m 3KB
quadrotor_ObjFunction.m 3KB
EnvINIT.m 3KB
visualize_init.m 3KB
visualize_init.m 3KB
EnvINIT.m 3KB
Dispatcher.m 2KB
real_UAV_CBF.m 2KB
buildObjectiveFunction.m 2KB
buildObjectiveFunction.m 2KB
compensation_term.m 2KB
DELTA_function.m 2KB
IneqConstriant.m 2KB
BernsteinMatrix_a2b.m 2KB
generateBernsteinEvaluator.m 2KB
inv_DM.m 2KB
ComputeTrajs.m 2KB
NMPC_INIT.m 2KB
RemoteAPIObject.m 2KB
RemoteAPIObject.m 2KB
RemoteAPIObject.m 1KB
LGL_PS.m 1KB
visualize_update.m 1KB
visualize_update.m 1KB
FL_step.m 1KB
quadrotor_model.m 1KB
single_Y_function.m 1KB
compute_pos_jerk.m 1022B
NMPC_STEP.m 988B
plotComputedTrajs.m 958B
NMPC_STEP.m 913B
plotComputedTrajs.m 878B
BernsteinPoly.m 820B
BeBOT.m 769B
PiecewiseBeBOT.m 767B
NMPC_STEP.m 744B
PiecewiseBernsteinPoly.m 734B
quadrotor_output_jac.m 716B
Comparison_plots.m 686B
Comparison_plots.m 686B
BernsteinProduct.m 685B
deCasteljau.m 679B
NLPOnline_mex.m 658B
OI_function.m 655B
DegElevMatrix.m 640B
Compute_ab.m 621B
CBF_h_f_dot.m 614B
input_mapping.m 607B
SET_PATHS.m 607B
straightTrapTraj.m 578B
straightTrapTraj.m 578B
BernsteinDifferentiationMatrix.m 571B
LagrangePoly.m 568B
ProdMatrix.m 535B
DegReduction.m 528B
plotCircle.m 520B
plotCircle.m 520B
compute_pos_acc.m 508B
NLPOnline_mex.m 503B
quadrotor_output.m 473B
MinimumBernstein.m 451B
MaximumBernstein.m 451B
inv_input_mapping_matrix.m 448B
ComputeTrajs.m 447B
EMA_const_reference.m 407B
EMA_const_reference.m 407B
single_H_function.m 389B
共 125 条
- 1
- 2
资源评论
Matlab科研辅导帮
- 粉丝: 2w+
- 资源: 7648
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功