三维比例制导律matlab代码(含注释)

一、 先放一张效果图:

二、matlab代码部分 (无注释版可以直接跑通)

clear all
clc
clear
tt=0.1;
sm=0.6*tt;
st=0.42*tt;
x(1)=0;y(1)=0;z(1)=0;
pmr(:,1)=[x(1);y(1);z(1)];
ptr(:,1)=[25;5;10];
m=3;
q(1)=0;
o(1)=0;
a(1)=0;
for(k=2:600)
ptr(:,k)=[25-0.42*cos(pi/6)*tt*k;5;10+0.42*sin(pi/6)*k*tt];
r(k-1)=sqrt((ptr(1,k-1)-pmr(1,k-1))^2+(ptr(2,k-1)-pmr(2,k-1))^2+(ptr(3,k-1)-pmr(3,k-1))^2);
c=sqrt((ptr(1,k)-pmr(1,k-1))^2+(ptr(2,k)-pmr(2,k-1))^2+(ptr(3,k)-pmr(3,k-1))^2);
b=acos((r(k-1)^2+st^2-c^2)/(2*r(k-1)*st));
dq=acos((r(k-1)^2-st^2+c^2)/(2*r(k-1)*c));
if abs(imag(b))>0


b=0.0000001;
end 
if abs(imag(dq))>0
dq=0.0000001;
end 
q(k)=q(k-1)+dq;
o(k)=o(k-1)+m*dq;
a(k)=o(k)-q(k);
c1=r(k-1)*sin(b)/sin(a(k)+b);
c2=r(k-1)*sin(a(k))/sin(a(k)+b);
c3=sqrt((c1-sm)^2+(c2-st)^2+2*(c1-sm)*(c2-st)*cos(a(k)+b));
dq=a(k)-acos(((c1-sm)^2+c3^2-(c2-st)^2)/(2*(c1-sm)*c3));
if abs(imag(dq))>0
dq=0.0000001;
end 
q(k)=q(k-1)+dq;
o(k)=o(k-1)+m*dq;
a(k)=o(k)-q(k);
c1=r(k-1)*sin(b)/sin(a(k)+b);
c2=r(k-1)*sin(a(k))/sin(a(k)+b);
c3=sqrt((c1-sm)^2+(c2-st)^2+2*(c1-sm)*(c2-st)*cos(a(k)+b));
dq=a(k)-acos(((c1-sm)^2+c3^2-(c2-st)^2)/(2*(c1-sm)*c3));
if abs(imag(dq))>0
dq=0.0000001;
end
q(k)=q(k-1)+dq;
o(k)=o(k-1)+m*dq;
a(k)=o(k)-q(k);
c1=r(k-1)*sin(b)/sin(a(k)+b);
c2=r(k-1)*sin(a(k))/sin(a(k)+b);
c3=sqrt((c1-sm)^2+(c2-st)^2+2*(c1-sm)*(c2-st)*cos(a(k)+b));
x1(k)=ptr(1,k-1)+c2/st*(ptr(1,k)-ptr(1,k-1));
y1(k)=ptr(2,k-1)+c2/st*(ptr(2,k)-ptr(2,k-1));
z1(k)=ptr(3,k-1)+c2/st*(ptr(3,k)-ptr(3,k-1));
x(k)=pmr(1,k-1)+sm/c1*(x1(k)-pmr(1,k-1));
y(k)=pmr(2,k-1)+sm/c1*(y1(k)-pmr(2,k-1));
z(k)=pmr(3,k-1)+sm/c1*(z1(k)-pmr(3,k-1));
pmr(:,k)=[x(k);y(k);z(k)];
r(k)=sqrt((ptr(1,k)-pmr(1,k))^2+(ptr(2,k)-pmr(2,k))^2+(ptr(3,k)-pmr(3,k))^2);
if r(k)<0.06;
break;
end;
end
sprintf('遭遇时间:%3.1f',0.1*k);
figure(1);
plot3(pmr(1,1:k),pmr(2,1:k),pmr(3,1:k),'k',ptr(1,:),ptr(2,:),ptr(3,:));
axis([0 25 0 5 0 25]);
text(x(80),y(80),z(80),'\leftarrow 比例导引');
grid on

三、注释版截图(私信作者付费10元获取)

 

公式推导截图: 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
无线三维定位是通过无线信号的传播特性来确定物体在三维空间中的位置。而Matlab是一种集成开发环境,可以用于科学计算和数值分析。下面是一个简单的无线三维定位的Matlab代码示例: ```matlab % 输入无线信号的RSSI值和已知的信号源位置 rssi = [ -70 -75 -80 ]; % 个参考信号强度值 signal_pos = [ 0 0 0; 1 0 0; 0 1 0 ]; % 个信号源的位置坐标 % 定义信号传播模型,例如根据Free Space Path Loss或其他模型来计算距离 d = 10 .^ ((-rssi - 27.55) / 20); % RSSI到距离的转换,这里使用Free Space Path Loss模型 % 定义未知位置的变量 unknown_pos = [ NaN NaN NaN ]; % 未知位置的坐标 % 进行三维定位计算 for i = 1:length(d) % 计算未知位置与每个信号源之间的距离 unknown_dist = norm(signal_pos(i,:) - unknown_pos); % 使用角定位法计算未知位置 if isnan(unknown_pos(1)) unknown_pos(1) = signal_pos(i,1) + (unknown_dist - d(i)); end if isnan(unknown_pos(2)) unknown_pos(2) = signal_pos(i,2) + (unknown_dist - d(i)); end if isnan(unknown_pos(3)) unknown_pos(3) = signal_pos(i,3) + (unknown_dist - d(i)); end end % 输出未知位置坐标 disp(['未知位置坐标:' num2str(unknown_pos)]); ``` 这个代码示例中,假设有个已知信号源的位置和对应的信号强度值(RSSI值),我们需要根据这些信息来确定未知位置的坐标。首先,将RSSI值转换为距离值,其中使用了Free Space Path Loss模型。然后,通过角定位法,计算未知位置与每个信号源之间的距离,并将未知位置的坐标逐渐补全。最后,输出未知位置的坐标。 请注意,这只是一个简单的示例代码,实际的无线三维定位可能会更加复杂,需要考虑更多因素,例如信号传播的多径效应、信号噪声等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值