function [xV] = app_fun_track_n(X,Track_text_n,T,n_uav)
% 备注: 轨迹修改为下面fun_track函数,T采样时间(不用变),
% 出了修改轨迹之外,记得修改输入x(初始状态),N总时刻
% 转弯模型,还要修改转弯角速度,即w1和w2
% 记得还要修改节点布局,不然轨迹很远,节点拓扑很小,定位不上
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 目标运动轨迹产生
%% 解析track_text
%模型2:CV模型
Fk_cv=[1 T 0 0;
0 1 0 0;
0 0 1 T;
0 0 0 1;];
q2=0.03; % 目标运动学标准差,过程噪声
Qk_cv=q2^2*[T^3/3, T^2/2, 0, 0;
T^2/2, T^2, 0, 0;
0, 0, T^3/3, T^2/2;
0, 0, T^2/2, T^2 ;];% 过程噪声协方差
Gk_cv=eye(4);
X_init=X;
Track_text = regexp(Track_text_n,'\ \|\ ','split');
for num=1:n_uav
X=X_init;
splitStr = regexp(Track_text(num),'\ ','split');
t_start=0;
t_end=0;
speed=0;
speed_last=sqrt(X(2)^2+X(4)^2);
N=length(splitStr);
for i=1:N
split_split_Str = regexp(splitStr(i),'\&','split');
% 提取时间
t_end=str2double(split_split_Str(1));
% 分离速度和旋转角速度
split_split_split_Str = regexp(split_split_Str(2),'\|','split');
% 提取运行速度
speed=str2double(split_split_split_Str(1));
factor=speed*1.0/speed_last;
X(2)=X(2)*factor;
X(4)=X(4)*factor;
% 提取旋转角速度
num_fraction_w1=regexp(split_split_split_Str(2), '\d+', 'match');
num_decimal_w1=regexp(split_split_split_Str(2), '\d+[.]\d+', 'match');
num_pi=regexp(split_split_split_Str(2), 'pi', 'match','ignorecase');
if length(num_decimal_w1)==1
xiaoshu=str2double(num_decimal_w1(1));
w1=1.0*xiaoshu;
elseif length(num_fraction_w1)==2
% 分数
fenzi=str2double(num_fraction_w1(1));
fenmu=str2double(num_fraction_w1(2));
w1=1.0*fenzi/fenmu;
else
% 整数
zhengshu=str2double(num_fraction_w1(1));
w1=1.0*zhengshu;
end
if ~isempty(num_pi)
w1=w1*pi;
end
temp=char(split_split_split_Str(2));
if isequal(temp(1),"-")
w1=w1*-1;
end
n=length(X);% 状态维数
%% 轨迹分阶段生成
if isequal(split_split_Str(3),'CT')||isequal(split_split_Str(3),'ct')
%% target model
% 模型1:CT模型参数
Fk_ct1=[1 sin(w1*T)/w1 0 -(1-cos(w1*T))/w1 ;
0 cos(w1*T) 0 -sin(w1*T) ;
0 (1-cos(w1*T))/w1 1 sin(w1*T)/w1 ;
0 sin(w1*T) 0 cos(w1*T) ;]; % 转弯模型
q1=0.03; % 目标运动学标准差,过程噪声
Qk_ct1= q1^2*[2*(w1*T-sin(w1*T))/w1^3 (1-cos(w1*T))/w1^2 0 (w1*T-sin(w1*T))/w1^2 ;
(1-cos(w1*T))/w1^2 T -(w1*T-sin(w1*T))/w1^2 0 ;
0 -(w1*T-sin(w1*T))/w1^2 2*(w1*T-sin(w1*T))/w1^3 (1-cos(w1*T))/w1^2 ;
(w1*T-sin(w1*T))/w1^2 0 (1-cos(w1*T))/w1^2 T;];
Gk_ct1=eye(4);
for k=t_start+1:t_end
X = Fk_ct1*X + Gk_ct1*sqrtm(Qk_ct1)*randn(n,1); %CT
% X = Fk_ct2*X; %CT
xV(:,k,num) = X;
end
elseif isequal(split_split_Str(3),'CV')||isequal(split_split_Str(3),'cv')
for k=t_start+1:t_end
X = Fk_cv*X + Gk_cv*sqrtm(Qk_cv)*randn(n,1); %CV, 轨迹生成加过程噪声
% % X = Fk_cv*X ; %CV, 轨迹生成不加过程噪声
xV(:,k,num)=X;
end
end
t_start=t_end;
speed_last=speed;
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
卡尔曼滤波KF、扩展EKF、无际UKF、容积CKF以及交互式多模型算法IMM Matlab GUI界面设计 动画
共3个文件
mlapp:1个
mp4:1个
m:1个
5星 · 超过95%的资源 需积分: 0 15 下载量 114 浏览量
2023-11-20
16:32:03
上传
评论 2
收藏 1.65MB ZIP 举报
温馨提示
卡尔曼滤波KF、扩展EKF、无际UKF、容积CKF代码以及交互式多模型算法IMM Matlab GUI界面设计 动画 卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。 数据滤波是去除噪声还原真实数据的一种数据处理技术,Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态。由于它便于计算机编程实现,并能够对现场采集的数据进行实时的更新和处理,Kalman滤波是目前应用最为广泛的滤波方法,在通信,导航,制导与控制等多领域得到了较好的应用。
资源推荐
资源详情
资源评论
收起资源包目录
KF.zip (3个子文件)
Copy_2_of_abcdefg.mlapp 125KB
app_fun_track_n.m 4KB
Matlab UI界面动图制作.mp4 2.3MB
共 3 条
- 1
资源评论
- top3老硕2023-11-20#完美解决问题
codelover
- 粉丝: 1
- 资源: 47
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功