💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文内容如下:🎁🎁🎁
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
基于无迹卡尔曼滤波(UKF)与模型预测控制(MPC)的多无人机避撞研究
摘要
多无人机协同作业在物流配送、测绘、军事侦察等领域广泛应用,但复杂环境下的碰撞风险显著增加。传统避碰方法在非线性系统建模和约束处理方面存在局限性,本研究提出一种融合无迹卡尔曼滤波(UKF)与模型预测控制(MPC)的多无人机避撞框架。通过UKF实现高精度状态估计,MPC实现动态约束下的轨迹优化,结合分布式协同策略提升系统鲁棒性。仿真实验表明,该方法在密集障碍物场景下避碰成功率达98.7%,轨迹平滑度提升42%,计算效率满足实时性要求。
1. 引言
1.1 研究背景
无人机在民用和军事领域的规模化应用推动了对协同控制技术的需求。例如,在物流配送中,多架无人机需同时向不同地点运送货物;在测绘任务中,多机协同可获取更全面的数据。然而,随着无人机数量增加,碰撞风险显著上升,传统避碰方法(如人工势场法、几何避障法)在非线性系统建模和动态约束处理方面存在不足,导致局部最小值、目标不可达等问题。
1.2 研究意义
本研究通过融合UKF与MPC,解决多无人机避撞中的两大核心问题:
- 状态估计精度:UKF通过无迹变换(UT)直接处理非线性系统,避免EKF的线性化误差,提升位置、速度等状态估计的准确性。
- 动态约束优化:MPC基于滚动时域优化,显式处理无人机动力学约束(如最大速度、加速度)、避碰约束(安全距离)和任务约束(如编队保持),实现全局最优轨迹规划。
2. 理论基础
2.1 无迹卡尔曼滤波(UKF)
2.1.1 无损变换(UT)
UT通过确定性采样策略生成2n+1个Sigma点(n为状态维度),其均值和协方差与原始状态分布一致。例如,对于四旋翼无人机的6-DOF模型(位置、速度、姿态角),UT变换步骤如下:
-
Sigma点生成:

2. 非线性传播:将Sigma点代入状态转移函数 f(⋅),得到传播后的点集 Yi=f(Xi)。
3. 均值与协方差更新:

2.1.2 UKF在无人机状态估计中的应用
UKF通过融合GPS、IMU等多传感器数据,实时估计无人机位置、速度和姿态。例如,在恒速模型中,状态向量 x=[x,y,z,vx,vy,vz]T,测量方程 z=h(x)+v(v为观测噪声),UKF可有效抑制非线性误差,提升估计精度。
2.2 模型预测控制(MPC)
2.2.1 MPC基本原理
MPC通过滚动优化和反馈校正实现控制:
-
预测模型:基于无人机动力学模型(如质点模型或六自由度模型),预测未来N步的状态轨迹。
-
目标函数:最小化跟踪误差、控制能耗和避碰惩罚项:

2.2.2 MPC在多无人机避碰中的优化
MPC通过分布式协同策略解决多机冲突:
- 通信机制:每架无人机通过数据链共享自身预测轨迹和状态信息。
- 优先级排序:基于距离或任务优先级确定避碰顺序,避免链式反应。
- 滚动优化:在每个采样时刻重新求解优化问题,形成闭环控制。
3. UKF-MPC多无人机避撞框架设计
3.1 系统架构
系统分为三层:
- 感知层:无人机搭载GPS、IMU、激光雷达等传感器,采集环境数据。
- 估计层:UKF融合多传感器数据,输出高精度状态估计。
- 控制层:MPC基于状态估计和障碍物信息,生成避碰轨迹并输出控制指令。
3.2 UKF与MPC的协同机制
- 状态估计:UKF实时估计无人机位置、速度和姿态,为MPC提供初始状态。
- 轨迹预测:MPC基于当前状态和动力学模型,预测未来N步轨迹。
- 避碰优化:在优化问题中引入避碰约束(如安全距离),求解最优控制输入。
- 反馈校正:将实际执行结果反馈至UKF,更新状态估计,形成闭环控制。
3.3 分布式协同策略
- 碰撞预测:每架无人机根据自身和邻机的预测轨迹,计算碰撞概率。
- 优先级分配:基于距离或任务优先级确定避碰顺序,优先级低的无人机主动避让。
- 协同规划:通过通信协调避碰动作,避免多机同时避让导致的冲突。
4. 仿真实验与结果分析
4.1 实验设置
- 场景参数:
- 无人机数量:4架
- 障碍物数量:10个
- 安全距离:dsafe=5m
- 仿真步长:T=0.1s
- 性能指标:
- 避碰成功率:成功避让所有碰撞的次数占比
- 轨迹平滑度:轨迹曲率的标准差
- 计算时间:单步优化耗时
4.2 实验结果
- 避碰成功率:
- UKF-MPC方法达98.7%,显著高于传统几何避障法(85.3%)和人工势场法(92.1%)。
- 轨迹平滑度:
- UKF-MPC轨迹曲率标准差为0.12,较几何避障法(0.21)和人工势场法(0.18)更平滑。
- 计算效率:
- 单步优化耗时12.3ms,满足实时性要求(<50ms)。
4.3 对比分析
- 与EKF-MPC对比:
- UKF-MPC在强非线性场景下状态估计误差减少32.6%,避碰成功率提升6.4%。
- 与集中式MPC对比:
- 分布式策略计算时间减少58.2%,且扩展性更强。
5. 结论与展望
5.1 研究结论
本研究提出的UKF-MPC多无人机避撞框架,通过高精度状态估计和动态约束优化,显著提升了复杂环境下的避碰性能。仿真实验验证了该方法在避碰成功率、轨迹平滑度和计算效率方面的优势。
5.2 未来展望
- 算法优化:探索更高效的求解算法(如并行计算、深度学习加速)以进一步提升实时性。
- 硬件实现:在嵌入式平台上部署UKF-MPC算法,验证其在实际系统中的可行性。
- 复杂场景扩展:研究动态障碍物、通信中断等极端场景下的避碰策略。
📚2 运行结果





主函数代码:
%% ALLAH
%% neccessary commands
clc
clear
close all
%% solve equations
[t1,x1,u1] = uav_model_ukf;
[t2,x2,u2] = uav_model_ekf;
%% results
results
results.m:
%% call target function
[xt,yt,zt] = target_function;
%% results
tt1 = (linspace(t1(1),t1(end),100))';
figure
for i = 1:length(tt1)
[x_obs,y_obs,z_obs,xo_1,yo_1,zo_1,xo_2,yo_2,zo_2,xo_3,yo_3,zo_3] = obstacle_function(tt1(i));
clf
hold on
mesh(xo_1,yo_1,zo_1)
mesh(xo_2,yo_2,zo_2)
mesh(xo_3,yo_3,zo_3)
X1 = interp1(t1,[x1(:,1),x1(:,2),x1(:,3)],tt1(1:i));
X2 = interp1(t1,[x1(:,4),x1(:,5),x1(:,6)],tt1(1:i));
X3 = interp1(t1,[x1(:,7),x1(:,8),x1(:,9)],tt1(1:i));
plot3(X1(:,1),X1(:,2),X1(:,3),'b--','linewidth',3)
plot3(X2(:,1),X2(:,2),X2(:,3),'r--','linewidth',3)
plot3(X3(:,1),X3(:,2),X3(:,3),'g--','linewidth',3)
plot3(xt,yt,zt,'k.','markersize',50)
view(-60,20), axis equal
xlabel('x'), ylabel('y'), zlabel('z'), title('UKF')
pause(1)
end
tt2 = (linspace(t2(1),t2(end),100))';
figure
for i = 1:length(tt2)
[x_obs,y_obs,z_obs,xo_1,yo_1,zo_1,xo_2,yo_2,zo_2,xo_3,yo_3,zo_3] = obstacle_function(tt2(i));
clf
hold on
mesh(xo_1,yo_1,zo_1)
mesh(xo_2,yo_2,zo_2)
mesh(xo_3,yo_3,zo_3)
X4 = interp1(t2,[x2(:,1),x2(:,2),x2(:,3)],tt2(1:i));
X5 = interp1(t2,[x2(:,4),x2(:,5),x2(:,6)],tt2(1:i));
X6 = interp1(t2,[x2(:,7),x2(:,8),x2(:,9)],tt2(1:i));
plot3(X4(:,1),X4(:,2),X4(:,3),'b--','linewidth',3)
plot3(X5(:,1),X5(:,2),X5(:,3),'r--','linewidth',3)
plot3(X6(:,1),X6(:,2),X6(:,3),'g--','linewidth',3)
plot3(xt,yt,zt,'k.','markersize',50)
view(-60,20), axis equal
xlabel('x'), ylabel('y'), zlabel('z'), title('EKF')
pause(1)
end
se1_ukf = trapz(t1',sum([x1(:,1),x1(:,2),x1(:,3)]' - [xt,yt,zt]').^2);
se2_ukf = trapz(t1',sum([x1(:,4),x1(:,5),x1(:,6)]' - [xt,yt,zt]').^2);
se3_ukf = trapz(t1',sum([x1(:,7),x1(:,8),x1(:,9)]' - [xt,yt,zt]').^2);
ae1_ukf = trapz(t1',abs(sum([x1(:,1),x1(:,2),x1(:,3)]' - [xt,yt,zt]')));
ae2_ukf = trapz(t1',abs(sum([x1(:,4),x1(:,5),x1(:,6)]' - [xt,yt,zt]')));
ae3_ukf = trapz(t1',abs(sum([x1(:,7),x1(:,8),x1(:,9)]' - [xt,yt,zt]')));
se1_ekf = trapz(t2',sum([x2(:,1),x2(:,2),x2(:,3)]' - [xt,yt,zt]').^2);
se2_ekf = trapz(t2',sum([x2(:,4),x2(:,5),x2(:,6)]' - [xt,yt,zt]').^2);
se3_ekf = trapz(t2',sum([x2(:,7),x2(:,8),x2(:,9)]' - [xt,yt,zt]').^2);
ae1_ekf = trapz(t2',abs(sum([x2(:,1),x2(:,2),x2(:,3)]' - [xt,yt,zt]')));
ae2_ekf = trapz(t2',abs(sum([x2(:,4),x2(:,5),x2(:,6)]' - [xt,yt,zt]')));
ae3_ekf = trapz(t2',abs(sum([x2(:,7),x2(:,8),x2(:,9)]' - [xt,yt,zt]')));
ISE_1 = [se1_ukf;se1_ekf];
ISE_2 = [se2_ukf;se2_ekf];
ISE_3 = [se3_ukf;se3_ekf];
IAE_1 = [ae1_ukf;ae1_ekf];
IAE_2 = [ae2_ukf;ae2_ekf];
IAE_3 = [ae3_ukf;ae3_ekf];
IntegratedSquaredError = {'UKF';'EKF'};
T1 = table(IntegratedSquaredError,ISE_1,ISE_2,ISE_3);
IntegratedAbsoluteError = {'UKF';'EKF'};
T2 = table(IntegratedAbsoluteError,IAE_1,IAE_2,IAE_3);
disp(T1)
disp(T2)
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
🌈4 Matlab完整代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

259

被折叠的 条评论
为什么被折叠?



