【跟踪和定位】集成高斯过程跟踪研究(Python代码实现)

  💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Python代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥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.

🌈Python代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值