我在网上找到了这个javascript Kalman filter library,我想在我的node.js应用程序中使用它。由于我想将这个js文件包含到我的node.js应用程序中,我尝试导出所需的函数(添加了module.exports,如下所示)。
module.exports = {
KalmanModel : function(){
function KalmanModel(x_0,P_0,F_k,Q_k){
this.x_k = x_0;
this.P_k = P_0;
this.F_k = F_k;
this.Q_k = Q_k;
}
KalmanModel.prototype.update = function(o){
// code
}
return KalmanModel;
},
KalmanObservation : function(){
function KalmanObservation(z_k,H_k,Q_k){
this.z_k = z_k;//observation
this.H_k = H_k;//observation model
this.R_k = R_k;//observation noise covariance
}
return KalmanObservation;
}
};
但是当我尝试运行以下代码时
代码:
var kal =require('./kalman');
var observationVal = observationValues;
var x_0 = $V([observationVal[0]]);
var P_0 = $M([[2]]);
var F_k=$M([[1]]);
//process noise
var Q_k=$M([[0]]);
var KM = kal.KalmanModel(x_0,P_0,F_k,Q_k);
//value we measure
var z_k = $V([observationVal[0]]);
var H_k = $M([[1]]);
var R_k = $M([[4.482]]);
var KO = kal.KalmanObservation(z_k,H_k,R_k);
for (var i=1;i<10;i++){
z_k = $V([observationVal[i]]);
KO.z_k=z_k;
KM.update(KO);
我收到错误
TypeError:object不是函数。
看起来用原型定义的方法没有被导出。我在这里做错了什么?
答案 0 :(得分:1)
我真的很难理解为什么顶层代码按原样编写(命名属性与其中的函数匹配)
我的建议是注销一些变量以查看它们的价值。
即:kal
,typeof kal
,typeof kal.KalmanModel
。另外,我认为你需要创建一个KalmanModel
的实例来使用原型函数,所以试试:
var KM = new kal.KalmanModel(x_0,P_0,F_k,Q_k);
答案 1 :(得分:1)
如果你不想改变现有的源代码,你可以做到这一点。不要删除隐式函数调用,即(function(){//code})();
,我认为你应该被设置。
module.exports = {
KalmanModel : (function(){
function KalmanModel(x_0,P_0,F_k,Q_k){
this.x_k = x_0;
this.P_k = P_0;
this.F_k = F_k;
this.Q_k = Q_k;
}
KalmanModel.prototype.update = function(o){
// code
}
return KalmanModel;
})(),
KalmanObservation : (function(){
function KalmanObservation(z_k,H_k,Q_k){
this.z_k = z_k;//observation
this.H_k = H_k;//observation model
this.R_k = R_k;//observation noise covariance
}
return KalmanObservation;
})()
};
或者只是将以下内容附加到库kalman.js
中module.exports = {
myKalmanModel : KalmanModel,
myKalmanObservation : KalmanObservation
}
并以
进行访问var KM = kal.myKalmanModel(x_0,P_0,F_k,Q_k);