MSCEqF 1.0
Multi State Constraint Equivariant Filter for visual inertial navigation
Loading...
Searching...
No Matches
updater.hpp
1// Copyright (C) 2023 Alessandro Fornasier.
2// Control of Networked Systems, University of Klagenfurt, Austria.
3//
4// All rights reserved.
5//
6// This software is licensed under the terms of the Apache License, Version 2.0
7// (the "License"); you may not use this file except in compliance with the
8// License. You may obtain a copy of the License at
9//
10// http://www.apache.org/licenses/LICENSE-2.0
11//
12// Unless required by applicable law or agreed to in writing, software
13// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15// License for the specific language governing permissions and limitations
16// under the License.
17//
18// You can contact the authors at <alessandro.fornasier@ieee.org>
19
20#ifndef UPDATER_HPP
21#define UPDATER_HPP
22
23#include <unordered_set>
24
25#include "types/fptypes.hpp"
26#include "msceqf/options/msceqf_options.hpp"
27#include "msceqf/filter/updater/updater_helper.hpp"
28#include "msceqf/system/system.hpp"
29#include "vision/track.hpp"
30
31namespace msceqf
32{
37class Updater
38{
39 public:
40 Updater(const UpdaterOptions& opts, const SystemState& xi0);
41
53 void mscUpdate(MSCEqFState& X, const Tracks& tracks, std::unordered_set<uint>& ids);
54
55 private:
66 [[nodiscard]] bool linearTriangulation(const MSCEqFState& X, const Track& track, const SE3& A_E, Vector3& A_f) const;
67
81 void nonlinearTriangulation(const MSCEqFState& X, const Track& track, const SE3& A_E, Vector3& A_f) const;
82
93 void nonlinearTriangulationResidualJacobian(
94 const MSCEqFState& X, const Track& track, const SE3& A_E, const Vector3& A_f, VectorX& res, MatrixX& J) const;
95
104 void UpdateMSCEqF(MSCEqFState& X, const MatrixX& C, const VectorX& delta, const MatrixX& R) const;
105
106 private:
107 UpdaterOptions opts_;
108
109 const SystemState& xi0_;
110
111 ProjectionHelperUniquePtr ph_;
112
113 std::map<uint, fp> chi2_table_;
114
115 ColsMap cols_map_;
116
117 std::vector<uint> update_ids_;
118 size_t total_size_;
119};
120
121} // namespace msceqf
122
123#endif // UPDATER_HPP
this class represent the state of the MSCEqF. This includes the state of the lifted system (element o...
Definition state.hpp:38
The SystemState class represent the state of the system posed on the Homogenous space.
Definition system.hpp:37
void mscUpdate(MSCEqFState &X, const Tracks &tracks, std::unordered_set< uint > &ids)
Perform a Multi State Constraint update.
(Cache friendly) Track struct. Define a feature (labeled via a feature id) detected/tracked at differ...
Definition track.hpp:38
Definition msceqf_options.hpp:130