接着说,往下看filter(stateFilter *self, stateEstimation *state)函数,filter函数执行具体的滤波功能,从程序的架构上可以看出,init函数只执行一次,之后就每次执行filter函数进行迭代计算。而函数的第一个参数和执行顺序有关,和算法无关;而第二个参数是采集到的原始数据,怎么用看下面。
前面代码省略,直接看这几句
前面代码省略,直接看这几句
IMPORT_SENSOR_IF_UPDATED(gyro, 3);
................
IMPORT_SENSOR_IF_UPDATED(airspeed, 2);
这是读取已经更新的传感器数据,放到几个数组中。
if (!(IS_SET(this->work.updated, SENSORUPDATES_accel) && IS_SET(state->updated, SENSORUPDATES_gyro))) {
UNSET_MASK(state->updated, SENSORUPDATES_pos);
UNSET_MASK(state->updated, SENSORUPDATES_vel);
UNSET_MASK(state->updated, SENSORUPDATES_attitude);
UNSET_MASK(state->updated, SENSORUPDATES_gyro);
return FILTERRESULT_OK;
}
如果陀螺仪和加速度计没更新,那滤什么波啊,下次吧。
d