featureCallback propagate IMU state() state Augmentation() add Feature Observations() #the following possibly trigger ekf update step: remove Lost Features () prune Camera State Buffer () remove Lost Features() every feature that does not have a current observation: *just delete if not enough features check Motion of Feature () _calculation here makes no sense - he uses pixel position as direction vector for feature?_ *initialize Position () caculate feature Jakobian and Residual() *for every observation in this feature - calculate u and v in camera frames, based on estimated feature position - input results into jakobi d(measurement)/d(camera 0/1) - input results into jakobi d(camera 0/1)/d(state) and jakobi d(camera 0/1)/d(feature position) - project both jakobis to nullspace of feature position jakobi - calculate residual: measurement - u and v of camera frames - project residual onto nullspace of feature position jakobi - stack residual and jakobians gating Test() *measurementUpdate() _use calculated residuals and jakobians to calculate change in error_ measurementUpdate(): - QR reduce the stacked Measurment Jakobis - calcualte Kalman Gain based on Measurement Jakobian, Error-State Covariance and Noise _does some fancy shit here_ - calculate estimated error after observation: delta_x = KalmanGain * residual - add estimated error to state (imu states and cam states) initialize Position (): * create initial guess for global feature position () _uses first feature measurement on left camera and last feature measurement of right camera_ - transform first measurement to plane of last measurement - calcualte least square point between rays * get position approximation using measured feature positions _using Levenberg Marqhart iterative search_ add Feature Observations() * if feature not in map, add feature to map _and add u0, v0, u1, v1 as first observation * if feature in map, add new observation u0,v0,u1,v1 state Augmentation() * Add estimated cam position to state * Update P with Jakobian of cam Position propagate IMU state () _uses IMU process model for every saved IMU state_ for every buffered imu state: *remove bias *Compute F and G matrix (continuous transition and noise cov.) _using current orientation, gyro and acc. reading_ * approximate phi: phi = 1 + Fdt + ... * calculate new state propagating through runge kutta * modify transition matrix to have a propper null space? * calculate Q = Phi*G*Q_noise*GT*PhiT * calculate P = Phi*P*PhiT + Q stateAugmentation () _save current IMU state as camera position_