OKVIS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HomogeneousPointLocalParameterization.hpp
Go to the documentation of this file.
1 /*********************************************************************************
2  * OKVIS - Open Keyframe-based Visual-Inertial SLAM
3  * Copyright (c) 2015, Autonomous Systems Lab / ETH Zurich
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  * * Neither the name of Autonomous Systems Lab / ETH Zurich nor the names of
14  * its contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  *
29  * Created on: Aug 30, 2013
30  * Author: Stefan Leutenegger (s.leutenegger@imperial.ac.uk)
31  *********************************************************************************/
32 
39 #ifndef INCLUDE_OKVIS_CERES_HOMOGENEOUSPOINTLOCALPARAMETERIZATION_HPP_
40 #define INCLUDE_OKVIS_CERES_HOMOGENEOUSPOINTLOCALPARAMETERIZATION_HPP_
41 
42 #include "ceres/ceres.h"
43 #include <okvis/assert_macros.hpp>
45 
47 namespace okvis {
49 namespace ceres {
50 
54  public ::ceres::LocalParameterization,
56 {
57  public:
58  OKVIS_DEFINE_EXCEPTION(Exception,std::runtime_error)
59 
60 
62  {
63  }
64 
71  virtual bool Plus(const double* x, const double* delta,
72  double* x_plus_delta) const;
73 
79  virtual bool Minus(const double* x, const double* x_plus_delta,
80  double* delta) const;
81 
85  virtual bool ComputeJacobian(const double* x, double* jacobian) const;
86 
91  virtual bool ComputeLiftJacobian(const double* x, double* jacobian) const;
92 
93  // provide these as static for easy use elsewhere:
94 
101  static bool plus(const double* x, const double* delta, double* x_plus_delta);
102 
106  static bool plusJacobian(const double* x, double* jacobian);
107 
113  static bool minus(const double* x, const double* x_plus_delta, double* delta);
114 
119  static bool liftJacobian(const double* x, double* jacobian);
120 
122  virtual int GlobalSize() const
123  {
124  return 4;
125  }
126 
128  virtual int LocalSize() const
129  {
130  return 3;
131  }
132 };
133 
134 } // namespace ceres
135 } // namespace okvis
136 
137 #endif /* INCLUDE_OKVIS_CERES_HOMOGENEOUSPOINTLOCALPARAMETERIZATION_HPP_ */
static bool minus(const double *x, const double *x_plus_delta, double *delta)
Computes the minimal difference between a variable x and a perturbed variable x_plus_delta.
Definition: HomogeneousPointLocalParameterization.cpp:86
virtual int LocalSize() const
The parameter block local dimension.
Definition: HomogeneousPointLocalParameterization.hpp:128
Provides some additional interfaces to ceres' LocalParamization than are needed in the generic margin...
Definition: LocalParamizationAdditionalInterfaces.hpp:52
Header file for the LocalParamizationAdditionalInterfaces class.
virtual bool Plus(const double *x, const double *delta, double *x_plus_delta) const
Generalization of the addition operation, x_plus_delta = Plus(x, delta) with the condition that Plus(...
Definition: HomogeneousPointLocalParameterization.cpp:50
virtual bool ComputeJacobian(const double *x, double *jacobian) const
The jacobian of Plus(x, delta) w.r.t delta at delta = 0.
Definition: HomogeneousPointLocalParameterization.cpp:102
Local parameterisation of a homogeneous point [x,y,z,w]^T. We use a Euclidean-type perturbation...
Definition: HomogeneousPointLocalParameterization.hpp:53
virtual bool ComputeLiftJacobian(const double *x, double *jacobian) const
Computes the Jacobian from minimal space to naively overparameterised space as used by ceres...
Definition: HomogeneousPointLocalParameterization.cpp:80
#define OKVIS_DEFINE_EXCEPTION(exceptionName, exceptionParent)
Macro for defining an exception with a given parent.
Definition: assert_macros.hpp:52
This file contains some useful assert macros.
static bool plusJacobian(const double *x, double *jacobian)
The jacobian of Plus(x, delta) w.r.t delta at delta = 0.
Definition: HomogeneousPointLocalParameterization.cpp:109
virtual bool Minus(const double *x, const double *x_plus_delta, double *delta) const
Computes the minimal difference between a variable x and a perturbed variable x_plus_delta.
Definition: HomogeneousPointLocalParameterization.cpp:74
static bool liftJacobian(const double *x, double *jacobian)
Computes the Jacobian from minimal space to naively overparameterised space as used by ceres...
Definition: HomogeneousPointLocalParameterization.cpp:122
static bool plus(const double *x, const double *delta, double *x_plus_delta)
Generalization of the addition operation, x_plus_delta = Plus(x, delta) with the condition that Plus(...
Definition: HomogeneousPointLocalParameterization.cpp:59
virtual int GlobalSize() const
The parameter block dimension.
Definition: HomogeneousPointLocalParameterization.hpp:122