54 odomParamsVertex->setToOrigin();
59 for (SparseOptimizer::EdgeSet::const_iterator it = optimizer.
edges().begin();
60 it != optimizer.
edges().end(); ++it) {
62 if (!scanmatchEdge)
continue;
66 if (r2->
id() - r1->
id() != 1) {
78 cerr <<
"strange edge " << r1->
id() <<
" <-> " << r2->
id() << endl;
105 odomCalibEdges.insert(e);
108 for (SparseOptimizer::EdgeSet::iterator it = odomCalibEdges.begin();
109 it != odomCalibEdges.end(); ++it)
117 std::unique_ptr<SclamLinearSolver> linearSolver =
118 std::make_unique<SclamLinearSolver>();
119 linearSolver->setBlockOrdering(
false);
123 std::make_unique<SclamBlockSolver>(std::move(linearSolver)));
126 std::make_unique<SclamBlockSolver>(std::move(linearSolver)));
virtual void setMeasurement(const Measurement &m)
EIGEN_STRONG_INLINE const InformationType & information() const
information matrix of the constraint
Implementation of a solver operating on the blocks of the Hessian.
a simple queue to store data and retrieve based on a timestamp
RobotData * findClosestData(double timestamp) const
scanmatch measurement that also calibrates an offset for the laser
static const int ID_ODOMCALIB
const Data * userData() const
the user data associated with this vertex
const VertexContainer & vertices() const
abstract Vertex, your types must derive from that one
int id() const
returns the id
virtual void setId(int newId)
std::set< Edge * > EdgeSet
const EdgeSet & edges() const
linear solver which uses the sparse Cholesky solver from Eigen
A 2D odometry measurement expressed as a transformation.
static VelocityMeasurement convertToVelocity(const MotionMeasurement &m)
Implementation of the Gauss Newton Algorithm.
Implementation of the Levenberg Algorithm.
Generic interface for a non-linear solver operating on a graph.
laser measurement obtained by a robot
const SE2 & odomPose() const
const Vector2 & translation() const
translational component
SE2 inverse() const
invert :-)
const Rotation2D & rotation() const
rotational component
void setAlgorithm(OptimizationAlgorithm *algorithm)
2D pose Vertex, (x,y,theta)
void addOdometryCalibLinksDifferential(SparseOptimizer &optimizer, const DataQueue &odomData)
static const double INFORMATION_SCALING_ODOMETRY
void allocateSolverForSclam(SparseOptimizer &optimizer, bool levenberg)
traits to summarize the properties of the fixed size optimization problem
virtual bool addEdge(HyperGraph::Edge *e)
virtual bool addVertex(HyperGraph::Vertex *v, Data *userData)