diff options
author | Martin Miller | 2017-03-26 15:21:00 -0500 |
---|---|---|
committer | Martin Miller | 2017-03-26 15:21:00 -0500 |
commit | c7af11e6a252a7dfbacd9a702bbe3ee0a9127b17 (patch) | |
tree | 3e5e0f02dd23bd073ffaef9e9e510761b4cbd16a /src/state.cpp | |
parent | 8685dabd1fc9614eeece5134352d09055b2d80f2 (diff) | |
download | refslam-c7af11e6a252a7dfbacd9a702bbe3ee0a9127b17.zip refslam-c7af11e6a252a7dfbacd9a702bbe3ee0a9127b17.tar.gz |
Set height above water.
Diffstat (limited to 'src/state.cpp')
-rw-r--r-- | src/state.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/state.cpp b/src/state.cpp index eac80d8..57ebbfa 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -49,8 +49,10 @@ State::enu ( const UTM &utm ) *-------------------------------------------------------------------------------------- */ MatrixXd -State::H ( const Vector3d &pos, const Quaterniond &q, const std::vector<measurement_t> &z ) +State::H ( const Quaterniond &q, const std::vector<measurement_t> &z ) { + Vector3d pos; + pos = body->ned(); MatrixXd h; // Determine the size of H int cols = 9 + 3*features.size(); @@ -161,7 +163,6 @@ State::kalmanUpdate( const MatrixXd &h, const MatrixXd &S, const std::vector<measurement_t> &z, const Quaterniond &q) { MatrixXd K; - K = P*h.transpose()*S; // P^T is implied here since P is symmetric K = S.partialPivLu().solve(h*P).transpose(); P = (MatrixXd::Identity(P.rows(),P.rows())-K*h)*P; @@ -229,12 +230,11 @@ State::innovation( const std::vector<measurement_t> &z, const Quaterniond &q) } void -State::update ( const Vector3d &pos, const Quaterniond &q, const std::vector<measurement_t> &z ) +State::update ( const Quaterniond &q, const std::vector<measurement_t> &z ) { - #ifdef FULLS MatrixXd h; - h = H(pos,q,z); + h = H(q,z); MatrixXd S; S = h*P*h.transpose() + R(z); kalmanUpdate(h,S,z,q); @@ -255,14 +255,19 @@ void State::feature_update ( const std::vector<measurement_t> &z, const Quaterniond &q) { std::vector<measurement_t> featuresToAdd; + std::vector<measurement_t> featuresToUpdate; for (auto i=z.begin(); i!=z.end(); ++i) { - if (i->z_type==HEIGHT) continue; - if (exists(i->id)) { - ; + if (i->z_type==HEIGHT) { + featuresToUpdate.push_back(*i); + } else if (exists(i->id)) { + featuresToUpdate.push_back(*i); } else { featuresToAdd.push_back(*i); } } + if (featuresToUpdate.size()>0) { + update(q, featuresToUpdate); + } addFeatures( featuresToAdd, q); return ; |