💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
一、引言
在跟踪和定位等复杂应用中,动态模型的准确性和灵活性至关重要。传统上,这些应用依赖于参数马尔可夫动态模型来模拟对象的运动。然而,这些模型在处理非马尔可夫、长期依赖性方面存在局限性。为了克服这些限制,高斯过程(GP)作为一种非参数模型,因其强大的表示能力和灵活性而备受关注。
二、高斯过程简介
高斯过程是一种用于回归和分类任务的非参数贝叶斯模型。它假设数据点之间的任何有限集合都服从一个多元正态分布。这种特性使得GP能够自然地处理数据中的不确定性,并捕捉复杂的非线性关系。然而,标准GP在具有常数或零均值的情况下容易在其均值附近振荡,且不能充分探索状态空间。
三、集成高斯过程(iGP)动态模型
为了克服标准GP的局限性,我们提出了集成高斯过程(iGP)动态模型。该模型将GP作为驱动干扰项,随着时间的推移而被整合到动态模型中。这种扩展使得iGP能够捕捉目标运动学中的非马尔可夫、长期依赖性,并为敏捷对象的行为提供更真实的建模。
四、非平稳核的推导
我们证明了iGP模型本身就是一个具有非平稳核的GP。在平方指数GP核的情况下,我们完全推导出了非平稳核的形式。这一推导为iGP模型的实现提供了理论基础,并展示了其与非参数动态模型的紧密联系。
五、计算实现
尽管iGP模型具有强大的表示能力,但其计算负担可能随着时间的推移而增加。为了解决这个问题,我们采用了基于卡尔曼滤波器的计算方法和滑动窗口马尔可夫近似。这些方法使得iGP模型能够在标准的顺序贝叶斯更新框架中以固定的时间复杂度实现。
六、实验结果
我们通过真实雷达测量和合成数据的示例结果展示了iGP建模的优势。与传统GP相比,iGP模型能够促进更精确的跟踪,特别是在处理非马尔可夫、长期依赖性方面表现出色。这些结果验证了iGP模型的有效性和实用性。
七、结论
本文提出了集成高斯过程(iGP)动态模型,作为传统参数马尔可夫动态模型的一个有吸引力的替代方案。iGP模型通过捕捉目标运动学中的非马尔可夫、长期依赖性,为敏捷对象的行为提供了更真实的建模。我们的实验结果表明,iGP模型在跟踪和定位等应用中具有显著的优势。未来,我们将继续探索iGP模型在其他领域的应用,并进一步优化其计算效率和准确性。
📚2 运行结果
部分代码:
### do tracking ### for k in range(Tmax): # observations obs = data[k-Tmax] # predict step if i == 0: m_pred,v_pred = f.ise1_pred(t+dt*(k+1),mk[-1],vk[-1],s2,ell) elif i == 1: m_pred,v_pred = f.ise2_pred(t,mk[-1],vk[-1],s2,ell) elif i == 2: m_pred,v_pred = f.se_pred(t,mk[-1],vk[-1],s2,ell) # skip rest if no data if len(obs) != 0: # association step if i == 0: ind = f.associate_ise1(obs,m_pred,v_pred,sy,assoc_threshold) else: ind = f.associate(obs,m_pred,v_pred,sy,assoc_threshold) # update step if type(ind) == int: associations[i,k] = ind datum = obs[ind,:] if i == 0: m_up,v_up = f.update_ise1(datum,m_pred,v_pred,sy) else: m_up,v_up = f.update(datum,m_pred,v_pred,sy) else: m_up,v_up = m_pred,v_pred else: m_up,v_up = m_pred,v_pred # record results mk.append(m_up) vk.append(v_up) X[i,k,:] = m_up[0,:] + m_up[-1,:] * int(i==0) S[i,k] = v_up[0,0] + v_up[-1,-1] * int(i==0) ################### # drop initial mean and var if i != 3: mk.pop(0) vk.pop(0) ##################### ### view results ### if set_num == 0: # plot observations f.plot_data(data,'#555555',0.2) # plot tracks f.plot_track(truth,'goldenrod','-','Truth') if wanting_ise1: f.add_track_unc(X[0,:,:],S[0,:],'deepskyblue') f.plot_track(X[0,:,:],'deepskyblue','--','iSE-1') if wanting_ise2: f.add_track_unc(X[1,:,:],S[1,:],'blueviolet') f.plot_track(X[1,:,:],'blueviolet',(0,(3,2)),'iSE-2') if wanting_se: f.add_track_unc(X[2,:,:],S[2,:],'deeppink') f.plot_track(X[2,:,:],'deeppink',(1,(3,2)),'SE') # show plot neatly f.tidy_plot(f'{data_models[model_num]}_set_{set_num}.png',VW,x_name='',y_name='',legend_loc=4) # compute RMSEs rmse_ise1 = ((X[0,:,:] - truth)**2).sum(1).mean()**0.5 rmse_ise2 = ((X[1,:,:] - truth)**2).sum(1).mean()**0.5 rmse_se = ((X[2,:,:] - truth)**2).sum(1).mean()**0.5 rmse[set_num,model_num,:] = [rmse_ise1,rmse_ise2,rmse_se] # average RMSE aRMSE = rmse.mean(0).round(3) np.savetxt('aRMSE.csv',aRMSE,delimiter=',',comments='',fmt= '%f',header='iSE-1,iSE-2,SE')
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
[1] Ibuki T , Yoshioka H , Sampei M .Robust pose tracking control for a fully-actuated hexarotor UAV based on Gaussian processes[J].SICE Journal of Control, Measurement, and System Integration (SICE JCMSI), 2022.
[2]申一歌,袁铸.移动机器人在非高斯噪声条件下的实时跟踪定位研究[J].自动化技术与应用, 2018, 37(3):6.
[3]陈志斌.室内定位与跟踪算法研究[D].湖南大学,2010.DOI:CNKI:CDMD:2.2009.083937.
🌈4 Python代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取