卡尔曼滤波算法代码相关问题

图画不出来,代码已经较为完整。

import pykalman
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from pykalman import KalmanFilter
import pandas as pd
import math
#速度的系数使预测的曲线更加贴近于真实曲线
#Q越大,越相信测量值;越小,越相信上一次的估计值
kf = KalmanFilter(transition_matrices=np.array([[1, 3], [0,1]]),
                  observation_matrices =np.array([1,0]),
                  transition_covariance= 0.5*np.eye(2))
df = pd.read_csv("data1.csv")
df1 = pd.DataFrame(df)
df2 = df1.iloc[:,12]
df3= df1.iloc[:,13]
df4= df1.iloc[:,14]
x=np.mat(df2)
y=np.mat(df3)
z=np.mat(df4)

 
def kalman_predict(x, y, z, iter):
    global t, filtered_state_means0, filtered_state_covariances0, lmx, lmy, lmz, lpx, lpy, lpz
    
    if iter == 0:
        #上一时刻的状态X(k-1)
        filtered_state_means0=np.array([[x, y, z], [0.0, 0.0, 0.0]])
        #矩阵P初始值
        filtered_state_covariances0=np.eye(2)
        lmx, lmy, lmz = x, y, z
        lpx, lpy, lpz = x, y, z
    else:
        dx = (x-lmx, y-lmy, z-lmz)
        #跟矩阵H对应着,Zk
        next_measurement = np.array([x, y, z])
        #next_measurement = np.array([x, y, z])
        cmx, cmy, cmz = x, y, z
        filtered_state_means, filtered_state_covariances= (kf.filter_update( filtered_state_means0, filtered_state_covariances0, next_measurement, transition_offset = np.array([0,0,0])))
        cpx, cpy, cpz= filtered_state_means[0][0], filtered_state_means[0][1], filtered_state_means[0][2]
        #绘制真实轨迹和卡尔曼预测轨迹,蓝色是测量值,绿色是预测值
        ax.plot([lmx, cmx], [lmy, cmy], [lmz, cmz], 'b', label = 'measure', linewidth = 4.0)
        ax.plot([lpx, cpx], [lpy, cpy], [lpz, cpz], 'g', label = 'predict', linewidth = 3.0)
        plt.pause(0.9)
        filtered_state_means0, filtered_state_covariances0 = filtered_state_means, filtered_state_covariances
        lpx, lpy, lpz = filtered_state_means[0][0], filtered_state_means[0][1], filtered_state_means[0][2]
        lmx, lmy, lmz = cmx, cmy,  cmz
 
 
if __name__ == '__main__':
    fig = plt.figure()
    ax = fig.add_axes(Axes3D(fig)) 
    font1 = {'size': 23}
    font2 = {'size': 17}
    #设置X、Y、Z坐标轴的数据范围
    ax.set_zlim([-2,1.35])
    ax.set_xlim([-2,1.35])
    #ax.set_xticks([0.70, 0.75, 0.80, 0.85])
    ax.set_ylim([-0.5,2])
    #添加X、Y、Z坐标轴的标注
    ax.set_xlabel('X(m)',font1,labelpad=28)
    ax.set_ylabel('Y(m)',font1,labelpad=28)
    ax.set_zlabel('Z(m)',font1,labelpad=28)
    ax.tick_params(labelsize=18,pad=8)

本段代码是一个可视化程序,使用了 matplotlib 库进行图形绘制。

如果出现图画不出来的情况,很可能是 matplotlib 的显示模式设置的问题。如果你运行的是 Python 脚本文件,

需要在代码中添加以下两行,才能正常显示图形:

在代码开始处添加

import matplotlib
matplotlib.use('TkAgg')
如果你使用的是 Jupyter Notebook 或者 ipython,可以在代码的开始处加入以下命令:

%matplotlib inline
这行命令会使 matplotlib 以 inline 模式运行,图形将直接插入到 notebook 中。

如果以上方法都不能解决问题,你还可以尝试升级 matplotlib 库或者检查是否有其他库冲突导致运行出错。希望这些信息对你有所帮助。