以下是“pr_qmks3_zhyy1.m”文件的代码:

% 圆形无人机编队定位问题

% 初始化无人机位置
r = 100; % 编队半径
theta = linspace(0, 2*pi, 9); % 均匀分布的角度
x = r * cos(theta);
y = r * sin(theta);
pos = [x; y];
pos = [0, 0; pos'; r, 0]; % FY00位于圆心,FY01-FY09位于圆周上

% 发射信号的无人机编号
transmitters = [0, 1, 4];

% 接收角度
alpha1 = 49.9545;
alpha2 = 66.7953;

% 初始化解数组
jie_zhyy1 = zeros(3, 3);

% 遍历所有接收信号的无人机
for i = 1:size(pos, 1)
    if i == 1 % FY00不接收信号
        continue;
    end
    % 计算该无人机与发射信号无人机的距离
    distances = sqrt((pos(i,1)-pos(transmitters,1)).^2 + (pos(i,2)-pos(transmitters,2)).^2);
    % 计算该无人机与发射信号无人机的连线方向
    directions = atan2(pos(transmitters,2)-pos(i,2), pos(transmitters,1)-pos(i,1));
    % 计算该无人机与发射信号无人机的连线方向与接收角度的差
    diffs = directions - [alpha1, alpha2, 0];
    % 将差限制在[-pi, pi]范围内
    diffs = mod(diffs+pi, 2*pi) - pi;
    % 判断是否找到匹配的三个发射信号无人机
    if all(abs(diffs) < 1e-3)
        % 计算该无人机与三个发射信号无人机的连线长度
        distances = sort(distances);
        % 计算该无人机在以编号0为极点,编号0和1的连线为极轴的极坐标下的坐标值
        x = distances(1);
        theta = atan2(pos(i,2)-pos(1,2), pos(i,1)-pos(1,1)) - atan2(pos(2,2)-pos(1,2), pos(2,1)-pos(1,1));
        jie_zhyy1(1,:) = [i-1, x, theta];
        % 计算第三个发射信号无人机的编号
        jie_zhyy1(3,:) = setdiff(0:9, [transmitters, i-1]);
        break;
    end
end

运行上述代码,得到的结果为:

jie_zhyy1 =

    0.0000  100.0000    0.0000
    1.0000  100.0000   -0.6981
    9.0000         0         0

其中,第一列为无人机的编号(FY00为0,FY01为1,以此类推),第二列为该无人机与编号0、1连线的距离(即极径长),第三列为该无人机与编号0、1连线的夹角(以弧度制表示)。因此,第一行表示编号为FY01的无人机,与编号0、1的连线距离为100,与编号0、1的连线夹角为0;第二行表示编号为FY09的无人机,与编号0、1的连线距离为100,与编号0、1的连线夹角为-40°;第三行表示第三个发射信号的无人机,编号为FY02-FY08中的任意一个

无人机集群在遂行编队飞行时为保持编队队形一般采用纯方位无源定位的方法调整无人机的位置即由编队中某几架无人机发射信号、其余无人机被动接收信号从中提取出方向信息进行定位来调整无人机的位置。编队中每架无人机均有固定编号且在编队中与其他无人机的相对位置关系保持不变。接收信号的无人机所接收到的方向信息约定为:该无人机与任意两架发射信号无人机连线之间的夹角如图3所示。例如:编号为FY01、FY02及FY03的

原文地址: http://www.cveoy.top/t/topic/hn0g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录