当前位置:   article > 正文

无人机集群编队控制_基于vicon的无人机编队分布式控制代码

基于vicon的无人机编队分布式控制代码

一、背景

编队控制代码地址

 主要实现控制多架无人机从任意随机初始位置,运动成规则编队。需要安装cvx工具包CVX: Matlab Software for Disciplined Convex Programming | CVX Research, Inc.

二、代码

  1. % This script simulates formation control of a group of UAVs.
  2. %
  3. % -------> Scale of the formation is NOT controlled in this demo!
  4. %
  5. % -------> IMPORTANT: CVX must be installed before running!
  6. %
  7. % -------> Download CVX from: http://cvxr.com/cvx/
  8. %
  9. %
  10. % This program is a free software: you can redistribute it and/or modify it
  11. % under the terms of the GNU lesser General Public License,
  12. % either version 3, or any later version.
  13. %
  14. % This program is distributed in the hope that it will be useful,
  15. % but WITHOUT ANY WARRANTY. See the GNU Lesser General Public License
  16. % for more details <http://www.gnu.org/licenses/>.
  17. %
  18. addpath('Helpers');
  19. %% Simulation parameters for triangle formation
  20. % Desired formation coordinates
  21. % qs = [0 -2 -2 -4 -4 -4
  22. % 0 -1 1 -2 0 2]*sqrt(5)*2;
  23. %
  24. % % Random initial positions
  25. % q0 = [ 12.9329 8.2202 10.2059 1.1734 0.7176 0.5700
  26. % 6.6439 8.5029 5.5707 6.8453 11.0739 14.3136];
  27. %
  28. % % Random initial heading angles
  29. % theta0 = [5.6645 4.2256 1.8902 4.5136 3.6334 5.7688].';
  30. %
  31. % n = size(qs,2); % Number of agents
  32. %
  33. % % Graph adjacency matrix
  34. % adj = [ 0 1 1 0 0 0
  35. % 1 0 1 1 1 0
  36. % 1 1 0 0 1 1
  37. % 0 1 0 0 1 0
  38. % 0 1 1 1 0 1
  39. % 0 0 1 0 1 0];
  40. %% Simulation parameters for square formation
  41. % Desired formation coordinates 10 所需编队坐标 (10个无人机所形成的形状)
  42. qs = [0 0 0 -1 -1 -1 -2 -2 -2
  43. 0 -1 -2 0 -1 -2 0 -1 -2]*15;
  44. %一字型
  45. % qs = [0 -1 -2 -3
  46. % 0 -1 -2 -3]*15;
  47. % Random initial positions 1.5
  48. q0 = [18.2114 14.9169 7.6661 11.5099 5.5014 9.0328 16.0890 0.5998 1.7415;
  49. 16.0112 16.2623 12.3456 10.6010 4.9726 4.5543 19.7221 10.7133 16.0418]*1.5;
  50. %一字形
  51. % q0 = [ 27.3171 11.4992 13.5492 2.6122;
  52. % 24.0168 18.5184 6.8314 24.0627]*1.5;
  53. % Random initial heading angles
  54. theta0 = [6.2150 0.4206 5.9024 0.1142 4.2967 4.9244 3.3561 5.5629 5.6486].';
  55. % theta0 = [6.2150 0.4206 5.9024 0.1142].';
  56. n = size(qs,2); % Number of agents
  57. %theta0 = 2*pi*rand(n,1);
  58. % Graph adjacency matrix
  59. adj = [ 0 1 0 1 0 0 0 0 0 %第一个无人机和第2第4个
  60. 1 0 1 0 1 0 0 0 0
  61. 0 1 0 0 0 1 0 0 0
  62. 1 0 0 0 1 0 1 0 0
  63. 0 1 0 1 0 1 0 1 0
  64. 0 0 1 0 1 0 0 0 1
  65. 0 0 0 1 0 0 0 1 0
  66. 0 0 0 0 1 0 1 0 1
  67. 0 0 0 0 0 1 0 1 0];
  68. %针对一字型,新通信矩阵
  69. % adj = [ 0 1 0 1
  70. % 1 0 1 0
  71. % 0 1 0 1
  72. % 1 0 1 0];
  73. %% Parameters
  74. T = [0, 30]; % Simulation time interval 模拟时间
  75. vSat = [3, 5]; % Speed range 3 5
  76. omegaSat = [-pi/4, pi/4]; % Allowed heading angle rate of change
  77. p = [1; 1]; % Desired travel direction 行进方向
  78. %% Computing formation control gains
  79. % Find stabilizing control gains (Needs CVX) 增益控制矩阵
  80. A = FindGains(qs(:), adj); %无人机形状 无人机间连接矩阵
  81. % % If optimization failed, perturbe 'qs' slightly:
  82. % A = FindGains(qs(:)+0.0001*rand(2*n,1), adj);
  83. %% Simulate the model
  84. Tvec = linspace(T(1), T(2), 50); %用于产生T1,T2之间的50点行矢量 也就是取0~30s内50个插值点
  85. state0 = [q0(:); theta0]; % Initial state 初始位置和初始方位角 27*1
  86. % Parameters passed down to the ODE solver
  87. par.n = n;%无人机数目
  88. par.A = A;%增益矩阵
  89. par.p = p;%行进方向
  90. par.vSat = vSat;%速度范围
  91. par.omegaSat = omegaSat;%方向角度变化范围
  92. % Simulate the dynamic system
  93. opt = odeset('AbsTol', 1.0e-06, 'RelTol', 1.0e-06);%用参数名以及参数值设定解法器的参数
  94. [t,stateMat] = ode45(@PlaneSys_Ver3_2, Tvec, state0, opt, par);%数值分析中数值求解微分方程组的一种方法,4阶五级Runge-Kutta算法
  95. %t 0-30s内的50个插值
  96. %% Make movie and plot the results
  97. close all
  98. % Simulation parameters
  99. plotParam.adj = adj;
  100. plotParam.N = n;
  101. plotParam.stateMat = stateMat;%50*27包含所有无人机的位置信息
  102. plotParam.trace = 50; % Trace length 跟踪范围大小
  103. plotParam.qs = qs;%编队形状
  104. % Make movie and snapshots
  105. fileName = 'UAVSim';
  106. MoviePlaneVer2_1(fileName, plotParam)%用来绘制结果

 

三、思路解读

首先每个无人机包含的信息有(x,y)坐标以及方向角yaw,程序开始前需要给这些无人机初始一些位置信息和角度信息,也就是代码中的q0位置信息和theta0方位角信息,然后确定无人机群的飞行方向,也就是p=[1,1],表示向右上角飞。无人机编队最后的形状,由矩阵qs确定,通过(x,y)坐标确定无人机编队的最终形状。

以上初始化信息确定好后,需要确定仿真时间,仿真关键点个数,也就对应的是

Tvec = linspace(T(1), T(2), 50); %用于产生T1,T2之间的50点行矢量  也就是取0~30s内50个插值点

接着就是使用微分方程求解编队按着预设方向飞行的时候,各个无人机位置信息和角度信息。 关键函数为ode45,返回值stateMat大小为50*27,每一行数据代表一个时刻点无人机的位置和角度信息,前18个分别为x,y坐标信息,后9个为方位角yaw的信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/385135
推荐阅读
相关标签
  

闽ICP备14008679号