2021-05-21

本文详细介绍了Kalman滤波的工作原理及其在状态估计中的应用。文章首先回顾了Bayes滤波的基本步骤,并在此基础上深入解释了Kalman滤波的数学模型、算法流程及其实现方法。此外,还通过实例展示了Kalman滤波在降低观测噪声方面的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载从,http://www.cnblogs.com/ycwang16/p/5999034.html

前面介绍了Bayes滤波方法,我们接下来详细说说Kalman滤波器。虽然Kalman滤波器已经被广泛使用,也有很多的教程,但我们在Bayes滤波器的框架上,来深入理解Kalman滤波器的设计,对理解采用Gaussian模型来近似状态分布的多高斯滤波器(Guassian Multi-Hyperthesis-Filter)等都有帮助。

一. 背景知识回顾

1.1 Bayes滤波

首先回顾一下Bayes滤波. Bayes滤波分为两步:1.状态预测;和 2.状态更新

1. 状态预测,基于状态转移模型:

bel¯¯¯¯¯¯(xt)=∫p(xt|ut,xt−1)bel(xt−1)dxt−1bel¯(xt)=∫p(xt|ut,xt−1)bel(xt−1)dxt−1

2. 状态更新,基于新的观测

bel(xt)=ηp(zt|xt)bel¯¯¯¯¯¯(xt)bel(xt)=ηp(zt|xt)bel¯(xt)

我们可以看到,我们的目的是计算xtxt的后验概率,如果bel(xt)bel(xt)是任意分布,我们需要在xtxt的所有可能取值点上,计算该取值的概率,这在计算上是难于实现的。这一计算问题可以有多种方法来近似,比如利用采样的方法,就是后面要讲的粒子滤波和无迹Kalman滤波。

这节要说的近似方法是,当假设bel(xt)bel(xt)服从Gauss分布,那么我们只需要分布的均值和方差就可以完全描述bel(xt)bel(xt),而无需在xtxt的每个可能取值点上进行概率计算。这也是用高斯分布来近似bel(xt)bel(xt)的好处,因为我们在每一个时刻,只需要计算均值μtμt和方差ΣtΣt这两个数值,就可以对bel(xt)bel(xt)完全描述,所以我们就可以推导出这两个数值的递推公式,从而在每个时刻由这两个数值的递推公式完全获得状态估计,这就是The Kalman Filter的基本思想。

1.2 正态分布(Guassian Distribution)

然后我们再回顾一下正态分布的基础知识。正态分布是一种特殊的概率分布,分布的形态完全由二阶矩决定。一元高斯分布表述如下:

 

p(x)∼N(μ,σ2):p(x)=12π√σe−12(x−μ)2σ2p(x)∼N(μ,σ2):p(x)=12πσe−12(x−μ)2σ2

 

其中,一阶矩为均值μμ表示期望值,二阶矩为方差σσ表示分布的不确定程度。

多元高斯分布的表达式为:

 

p(x)∼N(μ,Σ):p(x)=1(2π)d/2|Σ|1/2e−12(x−μ)tΣ−1(x−μ)p(x)∼N(μ,Σ):p(x)=1(2π)d/2|Σ|1/2e−12(x−μ)tΣ−1(x−μ)

 

同样,一阶矩为μμ表示各元变量的期望值,二阶矩为方差矩阵ΣΣ表示各元变量的不确定程度。

1.3 正态分布的特点

在线性变换下,一旦高斯,代代高斯。

首先,高斯变量线性变换后,仍为高斯分布,均值和方差如下:

X∼N(μ,Σ)Y=AX+B}⇒Y∼N(Aμ+B,AΣAT)X∼N(μ,Σ)Y=AX+B}⇒Y∼N(Aμ+B,AΣAT)

然后,两个高斯变量线性组合,仍为高斯分布,均值和方差如下:

X1∼N(μ1,σ21)X2∼N(μ2,σ22)}⇒p(X1+X2)∼N(μ1+μ2,σ21+σ22+2ρσ1σ2)X1∼N(μ1,σ12)X2∼N(μ2,σ22)}⇒p(X1+X2)∼N(μ1+μ2,σ12+σ22+2ρσ1σ2)

最后,两个相互独立的高斯变量的乘积,仍然为高斯分布,均值和方差如下:

X1∼N(μ1,σ21)X2∼N(μ2,σ22)}⇒p(X1)⋅p(X2)∼N(σ22σ21+σ22μ1+σ21σ21+σ22μ2,σ21σ22σ21+σ22)X1∼N(μ1,σ12)X2∼N(μ2,σ22)}⇒p(X1)⋅p(X2)∼N(σ22σ12+σ22μ1+σ12σ12+σ22μ2,σ12σ22σ12+σ22)

正因为高斯分布有这些特点,所以,在Bayes滤波公式中的随机变量的加法、乘法,可以用解析的公式计算均值和方差,这使得Bayes滤波的整个计算过程非常简便,即Kalman滤波器的迭代过程。

二. Kalman滤波

2.1 Kalman滤波的模型假设

Kalman滤波所解决的问题,是对一个动态变化的系统的状态跟踪的问题,基本的模型假设包括:1)系统的状态方程是线性的;2)观测方程是线性的;3)过程噪声符合零均值高斯分布;4)观测噪声符合零均值高斯分布;从而,一直在线性变化的空间中操作高斯分布,状态的概率密度符合高斯分布。

  1. 状态方程
    xt=Atxt−1+Btut+εtxt=Atxt−1+Btut+εt
  2. 观测方程
    zt=Htxt+δtzt=Htxt+δt

其中过程噪声εtεt假设符合零均值高斯分布;观测噪声δtδt假设符合零均值高斯分布。对于上述模型,我们可以用如下参数描述整个问题:

2.2 Kalman滤波器的模型

  1. xtxt,nn维向量,表示tt时刻观测状态的均值。
  2. PtPt,n∗nn∗n方差矩阵,表示tt时刻被观测的nn个状态的方差。
  3. utut,ll维向量,表示tt时刻的输入
  4. ztzt,mm维向量,表示tt时刻的观测
  5. AtAt,n∗nn∗n矩阵,表示状态从t−1t−1到tt在没有输入影响时转移方式
  6. BtBt,n∗nn∗n矩阵,表示utut如何影响xtxt
  7. HtHt,m∗nm∗n矩阵,表示状态xtxt如何被转换为观测ztzt
  8. RtRt,n∗nn∗n矩阵,表示过程噪声εtεt的方差矩阵
  9. QtQt,m∗mm∗m矩阵,表示观测噪声δtδt的方差矩阵

image

图1. 在没有观测情况下,系统状态的从t−1t−1到tt的转移方式

图1给出了在没有观测,仅有输入utut时,状态变量的均值和方差从t−1t−1到tt的转移方式,可见均值和方差的计算,完全是基于高斯分布的线性变化的方法来算的。

image

图2. Kalman 滤波解决在收到t时刻的输入utut和观测ztzt的情况下,更新状态xtxt的问题

图2给出了Kalman滤波所解决的问题,即在获得t时刻的输入和观测的情况下,如何更新xtxt的均值和方差的问题。当然utut和ztzt也并不是每一个时刻都需要同时获得,就像贝叶斯滤波一样,可以在获得utut时就做一次状态预测,在获得ztzt时做一次状态更新。

2.3 Kalman滤波算法

Kalman滤波整体算法如下:

Kalman Filter (xt−1,Pt−1,ut,ztxt−1,Pt−1,ut,zt)

  • Prediction
    • x¯¯¯t=Atxt−1+Btutx¯t=Atxt−1+Btut
    • P¯¯¯¯t=AtPt−1ATt+RtP¯t=AtPt−1AtT+Rt
  • Correction
    • Kt=P¯¯¯¯tHTt(HtP¯¯¯¯tHTt+Qt)−1Kt=P¯tHtT(HtP¯tHtT+Qt)−1
    • xt=x¯¯¯t+Kt(zt−Htx¯¯¯t)xt=x¯t+Kt(zt−Htx¯t)
    • Pt=(I−KtHt)P¯¯¯¯tPt=(I−KtHt)P¯t
  • 第一行基于转移矩阵和控制输入,预测tt时刻的状态
  • 第二行是预测方差矩阵
  • 第三行计算Kalman增益,Kt
  • 第四行基于观测的新息进行状态更新
  • 第五行计算更新状态的方差矩阵。

可以看到算法的所有的精妙之处都在于第三行和第四行。我们可以这样来理解:

  1.    (HtP¯¯¯¯tHTt+Qt)(HtP¯tHtT+Qt)代表对状态进行观测时,观测的不确定程度,它与Kalman增益Kt成反比,表示观测的可能噪声越大的时候,Kalman增益Kt越小。
  2. 再看第四行,xtxt的更新是在x¯¯¯tx¯t上加一个 KtKt 乘以 (zt−Htx¯¯¯t)(zt−Htx¯t)。(zt−Htx¯¯¯t)(zt−Htx¯t)代表的是预测的值与观测之间的差异,这个差异当预测和观测都比较接近于真实值时比较小。当观测不准,或者预测不准时都会比较大。而前面的乘子Kt是在观测噪声大的时候比较小,所以整个Kt(zt−Htx¯¯¯t)Kt(zt−Htx¯t)这个修正量,表示利用观测对预测结果的修正量。
    • 当观测噪声比较小,预测误差比较大时修正幅度比较大
    • 当观测噪声比较小预测误差比较小的时候,或者观测噪声比较大的时候,修正误差的幅度也比较小,从而起到了一种平滑的作用。
  3. 利用较准确的观测修正预测误差,不准确的观测修正量也较小,所以在误差较大的时候能快速修正,而在误差较小时能逐渐收敛。

2.4 Kalman滤波算法的推导

这里我们用Bayes公式,给出Kalman Filter是如何导出的。

1. 系统的初始状态是:

bel(x0)=N(μ0,P0)bel(x0)=N(μ0,P0)

2. 预测过程的推导

状态转移模型是线性函数

xt=Atxt−1+Btut+εtxt=Atxt−1+Btut+εt

所以,由xt−1xt−1到xtxt状态转移的条件概率为:

p(xt|ut,xt−1)=N(Atxt−1+Btut,Rt)p(xt|ut,xt−1)=N(Atxt−1+Btut,Rt)

回顾Bayes公式,计算预测状态的分布,需要考虑所有可能的xt−1xt−1:

bel¯¯¯¯¯¯(xt)=∫p(xt|ut,xt−1)bel(xt−1)dxt−1bel¯(xt)=∫p(xt|ut,xt−1)bel(xt−1)dxt−1

这正是计算两个高斯分布的卷积的过程,参考文献[2]:

bel¯¯¯¯¯¯(xt)=∫p(xt|ut,xt−1)bel(xt−1)dxt−1⇓⇓∼N(Atμt−1+Btut,Rt)∼N(μt−1,Pt−1)⇓bel¯¯¯¯¯¯(xt)=η∫exp{−12(xt−Atxt−1−Btut)TR−1t(xt−Atxt−1−Btut)}exp{−12(xt−1−μt−1)TP−1t−1(xt−1−μt−1)}dxt−1bel¯¯¯¯¯¯(xt)={μ¯t=Atμt−1+BtutP¯¯¯¯t=AtPt−1ATt+Rtbel¯(xt)=∫p(xt|ut,xt−1)bel(xt−1)dxt−1⇓⇓∼N(Atμt−1+Btut,Rt)∼N(μt−1,Pt−1)⇓bel¯(xt)=η∫exp⁡{−12(xt−Atxt−1−Btut)TRt−1(xt−Atxt−1−Btut)}exp⁡{−12(xt−1−μt−1)TPt−1−1(xt−1−μt−1)}dxt−1bel¯(xt)={μ¯t=Atμt−1+BtutP¯t=AtPt−1AtT+Rt

所以Kalman滤波器的预测过程,正是基于两个高斯分布的卷积计算得到的解析表达式。

3. 观测更新过程的推导

观测方程也是线性方程,并且噪声是高斯噪声

zt=Htxt+δtzt=Htxt+δt

所以p(zt|xt)p(zt|xt)的条件概率是高斯分布的线性变换计算:

p(zt|xt)=N(Htxt,Qt)p(zt|xt)=N(Htxt,Qt)

再考虑贝叶斯公式的状态更新步骤

bel(xt)=ηp(zt|xt)bel¯¯¯¯¯¯(xt)bel(xt)=ηp(zt|xt)bel¯(xt)

这正是两个高斯分布的乘积的问题,参考文献[2]

bel(xt)=ηp(zt|xt)bel¯¯¯¯¯¯(xt)⇓⇓∼N(zt;Htxt,Qt)∼N(xt;μ¯¯¯t,P¯¯¯¯t)⇓bel(xt)=ηexp{−12(zt−Htxt)TQ−1t(zt−Htxt)}exp{−12(xt−μ¯t)TP¯−1t(xt−μ¯t)}bel(xt)=ηp(zt|xt)bel¯(xt)⇓⇓∼N(zt;Htxt,Qt)∼N(xt;μ¯t,P¯t)⇓bel(xt)=ηexp⁡{−12(zt−Htxt)TQt−1(zt−Htxt)}exp⁡{−12(xt−μ¯t)TP¯t−1(xt−μ¯t)}

所以,基于求高斯变量乘积的分布的方法,可以导出结果仍然是高斯分布,用它的二阶矩表示:

bel(xt)={μt=μ¯t+Kt(zt−Htμ¯t)Pt=(I−KtHt)P¯¯¯¯twithKt=P¯¯¯¯tHTt(HtP¯¯¯¯tHTt+Qt)−1bel(xt)={μt=μ¯t+Kt(zt−Htμ¯t)Pt=(I−KtHt)P¯twithKt=P¯tHtT(HtP¯tHtT+Qt)−1

所以状态更新中的Kalman增益,均值和方差的更新公式,都是这样导出的。

 

2.5 Kalman滤波算法的举例

图3和图4通过一维高斯分布的例子,给出在预测和更新过程中状态变量的概率密度分布是如何变化的。

image

图3. 预测过程的举例,蓝色曲线表示xt−1xt−1的pdf,紫色曲线表示x¯¯¯tx¯t的pdf.

 

image

图4. 更新过程举例,紫色为预测后的pdf, 黄色为更新后的pdf,青色为观测的结果

从这个例子中可以值得注意的是,在预测部分高斯分布的卷积一般会使状态估计的方差加大;在观测部分高斯分布的乘积一般会将估计的方差收窄。

 

2.6 Kalman滤波的代码实现

Kalman滤波算法可以非常方便的用矩阵计算方法实现,其迭代更新过程的Matlab实现的代码仅有如下几行:

image

 

2.7 Kalman滤波的效果示例

通过实现一个简单的Kalman滤波器,我们可以直观的看一下Kalman滤波器的提高跟踪准确性的效果。

image

图5. Kalman滤波器的实验效果示例,其中红色实线是真值;蓝色点是观测;绿色线是滑动平均的结果;紫色曲线是Kalman滤波的结果。

image

图6. 比较Kalman滤波的跟踪结果和滑动平均的跟踪结果

 

图6给出了直观的跟踪结果与真实值之间的最小二乘误差的比较,课件Kalman滤波算法相比滑动平均等,提供了更高的跟踪准确性。

 

2.8 Kalman滤波的算法特点

  1. Kalman滤波计算快速,计算复杂度为O(m2.376+n2)O(m2.376+n2),其中mm是观测的维数;nn是状态的个数。
  2. 对于线性系统,零均值高斯噪声的系统,Kalman是理论上无偏的,最优滤波器。
  3. Kalman滤波在实际使用中,要注意参数RR和QQ的调节,这两者实际上是相对的,表示更相信观测还是更相信预测。具体使用时,RR可以根据过程噪声的幅度决定,然后QQ可以相对RR来给定。当更相信观测时,把QQ调小,不相信观测时,把QQ调大。
  4. QQ越大,表示越不相信观测,这是系统状态越容易收敛,对观测的变化响应越慢。QQ越小,表示越相信观测,这时对观测的变化响应快,但是越不容易收敛。

参考文献

[1]. Sebastian Thrun, Wolfram Burgard, Dieter Fox, Probabilistic Robotics, 2002, The MIT Press.

[2]. P.A. Bromiley, Products and Convolutions of Gaussian Probability Density Functions, University of Manchester

copyright ©2016 红山居士
-- 开始初始化数据 ; SET IDENTITY_INSERT sys_api ON; INSERT INTO sys_api (id, handle, title, path, type, "action", created_at, updated_at, deleted_at, create_by, update_by)VALUES (5, 'go-admin/app/admin/apis.SysLoginLog.Get-fm', '登录日志通过id获取', '/api/v1/sys-login-log/:id', 'BUS', 'GET', '2021-05-13 19:59:00.728', '2021-06-17 11:37:12.331', NULL, 0, 0), (6, 'go-admin/app/admin/apis.SysOperaLog.GetPage-fm', '操作日志列表', '/api/v1/sys-opera-log', 'BUS', 'GET', '2021-05-13 19:59:00.778', '2021-06-17 11:48:40.732', NULL, 0, 0), (7, 'go-admin/app/admin/apis.SysOperaLog.Get-fm', '操作日志通过id获取', '/api/v1/sys-opera-log/:id', 'BUS', 'GET', '2021-05-13 19:59:00.821', '2021-06-16 21:49:48.598', NULL, 0, 0), (8, 'go-admin/common/actions.IndexAction.func1', '分类列表', '/api/v1/syscategory', 'BUS', 'GET', '2021-05-13 19:59:00.870', '2021-06-13 20:53:47.883', NULL, 0, 0), (9, 'go-admin/common/actions.ViewAction.func1', '分类通过id获取', '/api/v1/syscategory/:id', 'BUS', 'GET', '2021-05-13 19:59:00.945', '2021-06-13 20:53:47.926', NULL, 0, 0), (10, 'go-admin/common/actions.IndexAction.func1', '内容列表', '/api/v1/syscontent', 'BUS', 'GET', '2021-05-13 19:59:01.005', '2021-06-13 20:53:47.966', NULL, 0, 0), (11, 'go-admin/common/actions.ViewAction.func1', '内容通过id获取', '/api/v1/syscontent/:id', 'BUS', 'GET', '2021-05-13 19:59:01.056', '2021-06-13 20:53:48.005', NULL, 0, 0), (15, 'go-admin/common/actions.IndexAction.func1', 'job列表', '/api/v1/sysjob', 'BUS', 'GET', '2021-05-13 19:59:01.248', '2021-06-13 20:53:48.169', NULL, 0, 0), (16, 'go-admin/common/actions.ViewAction.func1', 'job通过id获取', '/api/v1/sysjob/:id', 'BUS', 'GET', '2021-05-13 19:59:01.298', '2021-06-13 20:53:48.214', NULL, 0, 0), (21, 'go-admin/app/admin/apis.SysDictType.GetPage-fm', '字典类型列表', '/api/v1/dict/type', 'BUS', 'GET', '2021-05-13 19:59:01.525', '2021-06-17 11:48:40.732', NULL, 0, 0), (22, 'go-admin/app/admin/apis.SysDictType.GetAll-fm', '字典类型查询【代码生成】', '/api/v1/dict/type-option-select', 'SYS', 'GET', '2021-05-13 19:59:01.582', '2021-06-13 20:53:48.388', NULL, 0, 0), (23, 'go-admin/app/admin/apis.SysDictType.Get-fm', '字典类型通过id获取', '/api/v1/dict/type/:id', 'BUS', 'GET', '2021-05-13 19:59:01.632', '2021-06-17 11:48:40.732', NULL, 0, 0), (24, 'go-admin/app/admin/apis.SysDictData.GetPage-fm', '字典数据列表', '/api/v1/dict/data', 'BUS', 'GET', '2021-05-13 19:59:01.684', '2021-06-17 11:48:40.732', NULL, 0, 0), (25, 'go-admin/app/admin/apis.SysDictData.Get-fm', '字典数据通过code获取', '/api/v1/dict/data/:dictCode', 'BUS', 'GET', '2021-05-13 19:59:01.732', '2021-06-17 11:48:40.732', NULL, 0, 0), (26, 'go-admin/app/admin/apis.SysDictData.GetSysDictDataAll-fm', '数据字典根据key获取', '/api/v1/dict-data/option-select', 'SYS', 'GET', '2021-05-13 19:59:01.832', '2021-06-17 11:48:40.732', NULL, 0, 0), (27, 'go-admin/app/admin/apis.SysDept.GetPage-fm', '部门列表', '/api/v1/dept', 'BUS', 'GET', '2021-05-13 19:59:01.940', '2021-06-17 11:48:40.732', NULL, 0, 0), (28, 'go-admin/app/admin/apis.SysDept.Get-fm', '部门通过id获取', '/api/v1/dept/:id', 'BUS', 'GET', '2021-05-13 19:59:02.009', '2021-06-17 11:48:40.732', NULL, 0, 0), (29, 'go-admin/app/admin/apis.SysDept.Get2Tree-fm', '查询部门下拉树【角色权限-自定权限】', '/api/v1/deptTree', 'SYS', 'GET', '2021-05-13 19:59:02.050', '2021-06-17 11:48:40.732', NULL, 0, 0), (30, 'go-admin/app/admin/apis/tools.(*Gen).GetDBTableList-fm', '数据库表列表', '/api/v1/db/tables/page', 'SYS', 'GET', '2021-05-13 19:59:02.098', '2021-06-13 20:53:48.730', NULL, 0, 0), (31, 'go-admin/app/admin/apis/tools.(*Gen).GetDBColumnList-fm', '数据表列列表', '/api/v1/db/columns/page', 'SYS', 'GET', '2021-05-13 19:59:02.140', '2021-06-13 20:53:48.771', NULL, 0, 0), (32, 'go-admin/app/admin/apis/tools.Gen.GenCode-fm', '数据库表生成到项目', '/api/v1/gen/toproject/:tableId', 'SYS', 'GET', '2021-05-13 19:59:02.183', '2021-06-13 20:53:48.812', NULL, 0, 0), (33, 'go-admin/app/admin/apis/tools.Gen.GenMenuAndApi-fm', '数据库表生成到DB', '/api/v1/gen/todb/:tableId', 'SYS', 'GET', '2021-05-13 19:59:02.227', '2021-06-13 20:53:48.853', NULL, 0, 0), (34, 'go-admin/app/admin/apis/tools.(*SysTable).GetSysTablesTree-fm', '关系表数据【代码生成】', '/api/v1/gen/tabletree', 'SYS', 'GET', '2021-05-13 19:59:02.271', '2021-06-13 20:53:48.893', NULL, 0, 0), (35, 'go-admin/app/admin/apis/tools.Gen.Preview-fm', '生成预览通过id获取', '/api/v1/gen/preview/:tableId', 'SYS', 'GET', '2021-05-13 19:59:02.315', '2021-06-13 20:53:48.935', NULL, 0, 0), (36, 'go-admin/app/admin/apis/tools.Gen.GenApiToFile-fm', '生成api带文件', '/api/v1/gen/apitofile/:tableId', 'SYS', 'GET', '2021-05-13 19:59:02.357', '2021-06-13 20:53:48.977', NULL, 0, 0), (37, 'go-admin/app/admin/apis.System.GenerateCaptchaHandler-fm', '验证码获取', '/api/v1/getCaptcha', 'SYS', 'GET', '2021-05-13 19:59:02.405', '2021-06-13 20:53:49.020', NULL, 0, 0), (38, 'go-admin/app/admin/apis.SysUser.GetInfo-fm', '用户信息获取', '/api/v1/getinfo', 'SYS', 'GET', '2021-05-13 19:59:02.447', '2021-06-13 20:53:49.065', NULL, 0, 0), (39, 'go-admin/app/admin/apis.SysMenu.GetPage-fm', '菜单列表', '/api/v1/menu', 'BUS', 'GET', '2021-05-13 19:59:02.497', '2021-06-17 11:48:40.732', NULL, 0, 0), (40, 'go-admin/app/admin/apis.SysMenu.GetMenuTreeSelect-fm', '查询菜单下拉树结构【废弃】', '/api/v1/menuTreeselect', 'SYS', 'GET', '2021-05-13 19:59:02.542', '2021-06-03 22:37:21.857', NULL, 0, 0), (41, 'go-admin/app/admin/apis.SysMenu.Get-fm', '菜单通过id获取', '/api/v1/menu/:id', 'BUS', 'GET', '2021-05-13 19:59:02.584', '2021-06-17 11:48:40.732', NULL, 0, 0), (42, 'go-admin/app/admin/apis.SysMenu.GetMenuRole-fm', '角色菜单【顶部左侧菜单】', '/api/v1/menurole', 'SYS', 'GET', '2021-05-13 19:59:02.630', '2021-06-13 20:53:49.574', NULL, 0, 0), (43, 'go-admin/app/admin/apis.SysMenu.GetMenuIDS-fm', '获取角色对应的菜单id数组【废弃】', '/api/v1/menuids', 'SYS', 'GET', '2021-05-13 19:59:02.675', '2021-06-03 22:39:52.500', NULL, 0, 0), (44, 'go-admin/app/admin/apis.SysRole.GetPage-fm', '角色列表', '/api/v1/role', 'BUS', 'GET', '2021-05-13 19:59:02.720', '2021-06-17 11:48:40.732', NULL, 0, 0), (45, 'go-admin/app/admin/apis.SysMenu.GetMenuTreeSelect-fm', '菜单权限列表【角色配菜单使用】', '/api/v1/roleMenuTreeselect/:roleId', 'SYS', 'GET', '2021-05-13 19:59:02.762', '2021-06-17 11:48:40.732', NULL, 0, 0), (46, 'go-admin/app/admin/apis.SysDept.GetDeptTreeRoleSelect-fm', '角色部门结构树【自定义数据权限】', '/api/v1/roleDeptTreeselect/:roleId', 'SYS', 'GET', '2021-05-13 19:59:02.809', '2021-06-17 11:48:40.732', NULL, 0, 0), (47, 'go-admin/app/admin/apis.SysRole.Get-fm', '角色通过id获取', '/api/v1/role/:id', 'BUS', 'GET', '2021-05-13 19:59:02.850', '2021-06-17 11:48:40.732', NULL, 0, 0), (48, 'github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth.(*GinJWTMiddleware).RefreshHandler-fm', '刷新token', '/api/v1/refresh_token', 'SYS', 'GET', '2021-05-13 19:59:02.892', '2021-06-13 20:53:49.278', NULL, 0, 0), (53, 'go-admin/app/admin/apis.SysConfig.GetPage-fm', '参数列表', '/api/v1/config', 'BUS', 'GET', '2021-05-13 19:59:03.116', '2021-06-17 11:48:40.732', NULL, 0, 0), (54, 'go-admin/app/admin/apis.SysConfig.Get-fm', '参数通过id获取', '/api/v1/config/:id', 'BUS', 'GET', '2021-05-13 19:59:03.157', '2021-06-17 11:48:40.732', NULL, 0, 0), (55, 'go-admin/app/admin/apis.SysConfig.GetSysConfigByKEYForService-fm', '参数通过键名搜索【基础默认配置】', '/api/v1/configKey/:configKey', 'SYS', 'GET', '2021-05-13 19:59:03.198', '2021-06-13 20:53:49.745', NULL, 0, 0), (57, 'go-admin/app/jobs/apis.SysJob.RemoveJobForService-fm', 'job移除', '/api/v1/job/remove/:id', 'BUS', 'GET', '2021-05-13 19:59:03.295', '2021-06-13 20:53:49.786', NULL, 0, 0), (58, 'go-admin/app/jobs/apis.SysJob.StartJobForService-fm', 'job启动', '/api/v1/job/start/:id', 'BUS', 'GET', '2021-05-13 19:59:03.339', '2021-06-13 20:53:49.829', NULL, 0, 0), (59, 'go-admin/app/admin/apis.SysPost.GetPage-fm', '岗位列表', '/api/v1/post', 'BUS', 'GET', '2021-05-13 19:59:03.381', '2021-06-17 11:48:40.732', NULL, 0, 0), (60, 'go-admin/app/admin/apis.SysPost.Get-fm', '岗位通过id获取', '/api/v1/post/:id', 'BUS', 'GET', '2021-05-13 19:59:03.433', '2021-06-17 11:48:40.732', NULL, 0, 0), (62, 'go-admin/app/admin/apis.SysConfig.GetSysConfigBySysApp-fm', '系统前端参数', '/api/v1/app-config', 'SYS', 'GET', '2021-05-13 19:59:03.526', '2021-06-13 20:53:49.994', NULL, 0, 0), (63, 'go-admin/app/admin/apis.SysUser.GetProfile-fm', '*用户信息获取', '/api/v1/user/profile', 'SYS', 'GET', '2021-05-13 19:59:03.567', '2021-06-13 20:53:50.038', NULL, 0, 0), (66, 'github.com/go-admin-team/go-admin-core/sdk/pkg/ws.(*Manager).WsClient-fm', '链接ws【定时任务log】', '/ws/:id/:channel', 'BUS', 'GET', '2021-05-13 19:59:03.705', '2021-06-13 20:53:50.167', NULL, 0, 0), (67, 'github.com/go-admin-team/go-admin-core/sdk/pkg/ws.(*Manager).UnWsClient-fm', '退出ws【定时任务log】', '/wslogout/:id/:channel', 'BUS', 'GET', '2021-05-13 19:59:03.756', '2021-06-13 20:53:50.209', NULL, 0, 0), (68, 'go-admin/common/middleware/handler.Ping', '*用户基本信息', '/info', 'SYS', 'GET', '2021-05-13 19:59:03.800', '2021-06-13 20:53:50.251', NULL, 0, 0), (72, 'go-admin/common/actions.CreateAction.func1', '分类创建', '/api/v1/syscategory', 'BUS', 'POST', '2021-05-13 19:59:03.982', '2021-06-13 20:53:50.336', NULL, 0, 0), (73, 'go-admin/common/actions.CreateAction.func1', '内容创建', '/api/v1/syscontent', 'BUS', 'POST', '2021-05-13 19:59:04.027', '2021-06-13 20:53:50.375', NULL, 0, 0), (76, 'go-admin/common/actions.CreateAction.func1', 'job创建', '/api/v1/sysjob', 'BUS', 'POST', '2021-05-13 19:59:04.164', '2021-06-13 20:53:50.500', NULL, 0, 0), (80, 'go-admin/app/admin/apis.SysDictData.Insert-fm', '字典数据创建', '/api/v1/dict/data', 'BUS', 'POST', '2021-05-13 19:59:04.347', '2021-06-17 11:48:40.732', NULL, 0, 0), (81, 'go-admin/app/admin/apis.SysDictType.Insert-fm', '字典类型创建', '/api/v1/dict/type', 'BUS', 'POST', '2021-05-13 19:59:04.391', '2021-06-17 11:48:40.732', NULL, 0, 0), (82, 'go-admin/app/admin/apis.SysDept.Insert-fm', '部门创建', '/api/v1/dept', 'BUS', 'POST', '2021-05-13 19:59:04.435', '2021-06-17 11:48:40.732', NULL, 0, 0), (85, 'github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth.(*GinJWTMiddleware).LoginHandler-fm', '*登录', '/api/v1/login', 'SYS', 'POST', '2021-05-13 19:59:04.597', '2021-06-13 20:53:50.784', NULL, 0, 0), (86, 'go-admin/common/middleware/handler.LogOut', '*退出', '/api/v1/logout', 'SYS', 'POST', '2021-05-13 19:59:04.642', '2021-06-13 20:53:50.824', NULL, 0, 0), (87, 'go-admin/app/admin/apis.SysConfig.Insert-fm', '参数创建', '/api/v1/config', 'BUS', 'POST', '2021-05-13 19:59:04.685', '2021-06-17 11:48:40.732', NULL, 0, 0), (88, 'go-admin/app/admin/apis.SysMenu.Insert-fm', '菜单创建', '/api/v1/menu', 'BUS', 'POST', '2021-05-13 19:59:04.777', '2021-06-17 11:48:40.732', NULL, 0, 0), (89, 'go-admin/app/admin/apis.SysPost.Insert-fm', '岗位创建', '/api/v1/post', 'BUS', 'POST', '2021-05-13 19:59:04.886', '2021-06-17 11:48:40.732', NULL, 0, 0), (90, 'go-admin/app/admin/apis.SysRole.Insert-fm', '角色创建', '/api/v1/role', 'BUS', 'POST', '2021-05-13 19:59:04.975', '2021-06-17 11:48:40.732', NULL, 0, 0), (91, 'go-admin/app/admin/apis.SysUser.InsetAvatar-fm', '*用户头像编辑', '/api/v1/user/avatar', 'SYS', 'POST', '2021-05-13 19:59:05.058', '2021-06-13 20:53:51.079', NULL, 0, 0), (92, 'go-admin/app/admin/apis.SysApi.Update-fm', '接口编辑', '/api/v1/sys-api/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.122', '2021-06-17 11:48:40.732', NULL, 0, 0), (95, 'go-admin/common/actions.UpdateAction.func1', '分类编辑', '/api/v1/syscategory/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.255', '2021-06-13 20:53:51.247', NULL, 0, 0), (96, 'go-admin/common/actions.UpdateAction.func1', '内容编辑', '/api/v1/syscontent/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.299', '2021-06-13 20:53:51.289', NULL, 0, 0), (97, 'go-admin/common/actions.UpdateAction.func1', 'job编辑', '/api/v1/sysjob', 'BUS', 'PUT', '2021-05-13 19:59:05.343', '2021-06-13 20:53:51.331', NULL, 0, 0), (101, 'go-admin/app/admin/apis.SysDictData.Update-fm', '字典数据编辑', '/api/v1/dict/data/:dictCode', 'BUS', 'PUT', '2021-05-13 19:59:05.519', '2021-06-17 11:48:40.732', NULL, 0, 0), (102, 'go-admin/app/admin/apis.SysDictType.Update-fm', '字典类型编辑', '/api/v1/dict/type/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.569', '2021-06-17 11:48:40.732', NULL, 0, 0), (103, 'go-admin/app/admin/apis.SysDept.Update-fm', '部门编辑', '/api/v1/dept/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.613', '2021-06-17 11:48:40.732', NULL, 0, 0), (104, 'go-admin/app/other/apis.SysFileDir.Update-fm', '文件夹编辑', '/api/v1/file-dir/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.662', '2021-06-13 20:53:51.847', NULL, 0, 0), (105, 'go-admin/app/other/apis.SysFileInfo.Update-fm', '文件编辑', '/api/v1/file-info/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.709', '2021-06-13 20:53:51.892', NULL, 0, 0), (106, 'go-admin/app/admin/apis.SysRole.Update-fm', '角色编辑', '/api/v1/role/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.752', '2021-06-17 11:48:40.732', NULL, 0, 0), (107, 'go-admin/app/admin/apis.SysRole.Update2DataScope-fm', '角色数据权限修改', '/api/v1/roledatascope', 'BUS', 'PUT', '2021-05-13 19:59:05.803', '2021-06-17 11:48:40.732', NULL, 0, 0), (108, 'go-admin/app/admin/apis.SysConfig.Update-fm', '参数编辑', '/api/v1/config/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.848', '2021-06-17 11:48:40.732', NULL, 0, 0), (109, 'go-admin/app/admin/apis.SysMenu.Update-fm', '编辑菜单', '/api/v1/menu/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.891', '2021-06-17 11:48:40.732', NULL, 0, 0), (110, 'go-admin/app/admin/apis.SysPost.Update-fm', '岗位编辑', '/api/v1/post/:id', 'BUS', 'PUT', '2021-05-13 19:59:05.934', '2021-06-17 11:48:40.732', NULL, 0, 0), (111, 'go-admin/app/admin/apis.SysUser.UpdatePwd-fm', '*用户修改密码', '/api/v1/user/pwd', 'SYS', 'PUT', '2021-05-13 19:59:05.987', '2021-06-13 20:53:51.724', NULL, 0, 0), (112, 'go-admin/common/actions.DeleteAction.func1', '分类删除', '/api/v1/syscategory', 'BUS', 'DELETE', '2021-05-13 19:59:06.030', '2021-06-13 20:53:52.237', NULL, 0, 0), (113, 'go-admin/common/actions.DeleteAction.func1', '内容删除', '/api/v1/syscontent', 'BUS', 'DELETE', '2021-05-13 19:59:06.076', '2021-06-13 20:53:52.278', NULL, 0, 0), (114, 'go-admin/app/admin/apis.SysLoginLog.Delete-fm', '登录日志删除', '/api/v1/sys-login-log', 'BUS', 'DELETE', '2021-05-13 19:59:06.118', '2021-06-17 11:48:40.732', NULL, 0, 0), (115, 'go-admin/app/admin/apis.SysOperaLog.Delete-fm', '操作日志删除', '/api/v1/sys-opera-log', 'BUS', 'DELETE', '2021-05-13 19:59:06.162', '2021-06-17 11:48:40.732', NULL, 0, 0), (116, 'go-admin/common/actions.DeleteAction.func1', 'job删除', '/api/v1/sysjob', 'BUS', 'DELETE', '2021-05-13 19:59:06.206', '2021-06-13 20:53:52.323', NULL, 0, 0), (117, 'go-admin/app/other/apis.SysChinaAreaData.Delete-fm', '行政区删除', '/api/v1/sys-area-data', 'BUS', 'DELETE', '2021-05-13 19:59:06.249', '2021-06-13 20:53:52.061', NULL, 0, 0), (120, 'go-admin/app/admin/apis.SysDictData.Delete-fm', '字典数据删除', '/api/v1/dict/data', 'BUS', 'DELETE', '2021-05-13 19:59:06.387', '2021-06-17 11:48:40.732', NULL, 0, 0), (121, 'go-admin/app/admin/apis.SysDictType.Delete-fm', '字典类型删除', '/api/v1/dict/type', 'BUS', 'DELETE', '2021-05-13 19:59:06.432', '2021-06-17 11:48:40.732', NULL, 0, 0), (122, 'go-admin/app/admin/apis.SysDept.Delete-fm', '部门删除', '/api/v1/dept/:id', 'BUS', 'DELETE', '2021-05-13 19:59:06.475', '2021-06-17 11:48:40.732', NULL, 0, 0), (123, 'go-admin/app/other/apis.SysFileDir.Delete-fm', '文件夹删除', '/api/v1/file-dir/:id', 'BUS', 'DELETE', '2021-05-13 19:59:06.520', '2021-06-13 20:53:52.539', NULL, 0, 0), (124, 'go-admin/app/other/apis.SysFileInfo.Delete-fm', '文件删除', '/api/v1/file-info/:id', 'BUS', 'DELETE', '2021-05-13 19:59:06.566', '2021-06-13 20:53:52.580', NULL, 0, 0), (125, 'go-admin/app/admin/apis.SysConfig.Delete-fm', '参数删除', '/api/v1/config', 'BUS', 'DELETE', '2021-05-13 19:59:06.612', '2021-06-17 11:48:40.732', NULL, 0, 0), (126, 'go-admin/app/admin/apis.SysMenu.Delete-fm', '删除菜单', '/api/v1/menu', 'BUS', 'DELETE', '2021-05-13 19:59:06.654', '2021-06-17 11:48:40.732', NULL, 0, 0), (127, 'go-admin/app/admin/apis.SysPost.Delete-fm', '岗位删除', '/api/v1/post/:id', 'BUS', 'DELETE', '2021-05-13 19:59:06.702', '2021-06-17 11:48:40.732', NULL, 0, 0), (128, 'go-admin/app/admin/apis.SysRole.Delete-fm', '角色删除', '/api/v1/role', 'BUS', 'DELETE', '2021-05-13 19:59:06.746', '2021-06-17 11:48:40.732', NULL, 0, 0), (131, 'github.com/go-admin-team/go-admin-core/tools/transfer.Handler.func1', '系统指标', '/api/v1/metrics', 'SYS', 'GET', '2021-05-17 22:13:55.933', '2021-06-13 20:53:49.614', NULL, 0, 0), (132, 'go-admin/app/other/router.registerMonitorRouter.func1', '健康状态', '/api/v1/health', 'SYS', 'GET', '2021-05-17 22:13:56.285', '2021-06-13 20:53:49.951', NULL, 0, 0), (133, 'go-admin/app/admin/apis.HelloWorld', '项目默认接口', '/', 'SYS', 'GET', '2021-05-24 10:30:44.553', '2021-06-13 20:53:47.406', NULL, 0, 0), (134, 'go-admin/app/other/apis.ServerMonitor.ServerInfo-fm', '服务器基本状态', '/api/v1/server-monitor', 'SYS', 'GET', '2021-05-24 10:30:44.937', '2021-06-13 20:53:48.255', NULL, 0, 0), (135, 'go-admin/app/admin/apis.SysApi.GetPage-fm', '接口列表', '/api/v1/sys-api', 'BUS', 'GET', '2021-05-24 11:37:53.303', '2021-06-17 11:48:40.732', NULL, 0, 0), (136, 'go-admin/app/admin/apis.SysApi.Get-fm', '接口通过id获取', '/api/v1/sys-api/:id', 'BUS', 'GET', '2021-05-24 11:37:53.359', '2021-06-17 11:48:40.732', NULL, 0, 0), (137, 'go-admin/app/admin/apis.SysLoginLog.GetPage-fm', '登录日志列表', '/api/v1/sys-login-log', 'BUS', 'GET', '2021-05-24 11:47:30.397', '2021-06-17 11:48:40.732', NULL, 0, 0), (138, 'go-admin/app/other/apis.File.UploadFile-fm', '文件上传', '/api/v1/public/uploadFile', 'SYS', 'POST', '2021-05-25 19:16:18.493', '2021-06-13 20:53:50.866', NULL, 0, 0), (139, 'go-admin/app/admin/apis.SysConfig.Update2Set-fm', '参数信息修改【参数配置】', '/api/v1/set-config', 'BUS', 'PUT', '2021-05-27 09:45:14.853', '2021-06-17 11:48:40.732', NULL, 0, 0), (140, 'go-admin/app/admin/apis.SysConfig.Get2Set-fm', '参数获取全部【配置使用】', '/api/v1/set-config', 'BUS', 'GET', '2021-05-27 11:54:14.384', '2021-06-17 11:48:40.732', NULL, 0, 0), (141, 'go-admin/app/admin/apis.SysUser.GetPage-fm', '管理员列表', '/api/v1/sys-user', 'BUS', 'GET', '2021-06-13 19:24:57.111', '2021-06-17 20:31:14.318', NULL, 0, 0), (142, 'go-admin/app/admin/apis.SysUser.Get-fm', '管理员通过id获取', '/api/v1/sys-user/:id', 'BUS', 'GET', '2021-06-13 19:24:57.188', '2021-06-17 20:31:14.318', NULL, 0, 0), (143, 'go-admin/app/admin/apis/tools.(*SysTable).GetSysTablesInfo-fm', '', '/api/v1/sys/tables/info', '', 'GET', '2021-06-13 19:24:57.437', '2021-06-13 20:53:48.047', NULL, 0, 0), (144, 'go-admin/app/admin/apis/tools.(*SysTable).GetSysTables-fm', '', '/api/v1/sys/tables/info/:tableId', '', 'GET', '2021-06-13 19:24:57.510', '2021-06-13 20:53:48.088', NULL, 0, 0), (145, 'go-admin/app/admin/apis/tools.(*SysTable).GetSysTableList-fm', '', '/api/v1/sys/tables/page', '', 'GET', '2021-06-13 19:24:57.582', '2021-06-13 20:53:48.128', NULL, 0, 0), (146, 'github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1', '', '/static/*filepath', '', 'GET', '2021-06-13 19:24:59.641', '2021-06-13 20:53:50.081', NULL, 0, 0), (147, 'github.com/swaggo/gin-swagger.CustomWrapHandler.func1', '', '/swagger/*any', '', 'GET', '2021-06-13 19:24:59.713', '2021-06-13 20:53:50.123', NULL, 0, 0), (148, 'github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1', '', '/form-generator/*filepath', '', 'GET', '2021-06-13 19:24:59.914', '2021-06-13 20:53:50.295', NULL, 0, 0), (149, 'go-admin/app/admin/apis/tools.(*SysTable).InsertSysTable-fm', '', '/api/v1/sys/tables/info', '', 'POST', '2021-06-13 19:25:00.163', '2021-06-13 20:53:50.539', NULL, 0, 0), (150, 'go-admin/app/admin/apis.SysUser.Insert-fm', '管理员创建', '/api/v1/sys-user', 'BUS', 'POST', '2021-06-13 19:25:00.233', '2021-06-17 20:31:14.318', NULL, 0, 0), (151, 'go-admin/app/admin/apis.SysUser.Update-fm', '管理员编辑', '/api/v1/sys-user', 'BUS', 'PUT', '2021-06-13 19:25:00.986', '2021-06-17 20:31:14.318', NULL, 0, 0), (152, 'go-admin/app/admin/apis/tools.(*SysTable).UpdateSysTable-fm', '', '/api/v1/sys/tables/info', '', 'PUT', '2021-06-13 19:25:01.149', '2021-06-13 20:53:51.375', NULL, 0, 0), (153, 'go-admin/app/admin/apis.SysRole.Update2Status-fm', '', '/api/v1/role-status', '', 'PUT', '2021-06-13 19:25:01.446', '2021-06-13 20:53:51.636', NULL, 0, 0), (154, 'go-admin/app/admin/apis.SysUser.ResetPwd-fm', '', '/api/v1/user/pwd/reset', '', 'PUT', '2021-06-13 19:25:01.601', '2021-06-13 20:53:51.764', NULL, 0, 0), (155, 'go-admin/app/admin/apis.SysUser.UpdateStatus-fm', '', '/api/v1/user/status', '', 'PUT', '2021-06-13 19:25:01.671', '2021-06-13 20:53:51.806', NULL, 0, 0), (156, 'go-admin/app/admin/apis.SysUser.Delete-fm', '管理员删除', '/api/v1/sys-user', 'BUS', 'DELETE', '2021-06-13 19:25:02.043', '2021-06-17 20:31:14.318', NULL, 0, 0), (157, 'go-admin/app/admin/apis/tools.(*SysTable).DeleteSysTables-fm', '', '/api/v1/sys/tables/info/:tableId', '', 'DELETE', '2021-06-13 19:25:02.283', '2021-06-13 20:53:52.367', NULL, 0, 0), (158, 'github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1', '', '/static/*filepath', '', 'HEAD', '2021-06-13 19:25:02.734', '2021-06-13 20:53:52.791', NULL, 0, 0), (159, 'github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1', '', '/form-generator/*filepath', '', 'HEAD', '2021-06-13 19:25:02.808', '2021-06-13 20:53:52.838', NULL, 0, 0); SET IDENTITY_INSERT sys_api OFF; 生成相对应的mysql 建表语句和insert语句
最新发布
07-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值