20 typedef Eigen::Matrix<context::Scalar, Eigen::Dynamic, 1> ConfigVector_t;
21 typedef Eigen::Matrix<context::Scalar, Eigen::Dynamic, 1> TangentVector_t;
22 typedef Eigen::Matrix<context::Scalar, Eigen::Dynamic, Eigen::Dynamic> JacobianMatrix_t;
25 integrate(
const LieGroupType & lg,
const ConfigVector_t & q,
const TangentVector_t & v)
27 return lg.integrate(q, v);
30 static ConfigVector_t interpolate(
31 const LieGroupType & lg,
32 const ConfigVector_t & q0,
33 const ConfigVector_t & q1,
34 const context::Scalar & u)
36 return lg.interpolate(q0, q1, u);
39 static TangentVector_t
40 difference(
const LieGroupType & lg,
const ConfigVector_t & q0,
const ConfigVector_t & q1)
42 return lg.difference(q0, q1);
45 static JacobianMatrix_t dDifference1(
46 const LieGroupType & lg,
47 const ConfigVector_t & q0,
48 const ConfigVector_t & q1,
49 const ArgumentPosition arg)
51 JacobianMatrix_t J(lg.nv(), lg.nv());
52 lg.dDifference(q0, q1, J, arg);
56 static JacobianMatrix_t dDifference2(
57 const LieGroupType & lg,
58 const ConfigVector_t & q0,
59 const ConfigVector_t & q1,
60 const ArgumentPosition arg,
61 const JacobianMatrix_t & Jin,
64 JacobianMatrix_t J(Jin.rows(), Jin.cols());
74 throw std::invalid_argument(
"arg must be either ARG0 or ARG1");
79 static JacobianMatrix_t dDifference3(
80 const LieGroupType & lg,
81 const ConfigVector_t & q0,
82 const ConfigVector_t & q1,
83 const ArgumentPosition arg,
85 const JacobianMatrix_t & Jin)
87 JacobianMatrix_t J(Jin.rows(), Jin.cols());
97 throw std::invalid_argument(
"arg must be either ARG0 or ARG1");
102 static JacobianMatrix_t dIntegrate(
103 const LieGroupType & lg,
104 const ConfigVector_t & q,
105 const TangentVector_t & v,
106 const ArgumentPosition arg)
108 JacobianMatrix_t J(lg.nv(), lg.nv());
109 lg.dIntegrate(q, v, J, arg);
113 static JacobianMatrix_t
114 dIntegrate_dq1(
const LieGroupType & lg,
const ConfigVector_t & q,
const TangentVector_t & v)
116 JacobianMatrix_t J(lg.nv(), lg.nv());
117 lg.dIntegrate_dq(q, v, J);
121 static JacobianMatrix_t dIntegrate_dq2(
122 const LieGroupType & lg,
123 const ConfigVector_t & q,
124 const TangentVector_t & v,
125 const JacobianMatrix_t & Jin,
128 JacobianMatrix_t J(Jin.rows(), lg.nv());
129 lg.dIntegrate_dq(q, v, Jin, self, J, SETTO);
133 static JacobianMatrix_t dIntegrate_dq3(
134 const LieGroupType & lg,
135 const ConfigVector_t & q,
136 const TangentVector_t & v,
138 const JacobianMatrix_t & Jin)
140 JacobianMatrix_t J(lg.nv(), Jin.cols());
141 lg.dIntegrate_dq(q, v, self, Jin, J, SETTO);
145 static JacobianMatrix_t
146 dIntegrate_dv1(
const LieGroupType & lg,
const ConfigVector_t & q,
const TangentVector_t & v)
148 JacobianMatrix_t J(lg.nv(), lg.nv());
149 lg.dIntegrate_dv(q, v, J);
153 static JacobianMatrix_t dIntegrate_dv2(
154 const LieGroupType & lg,
155 const ConfigVector_t & q,
156 const TangentVector_t & v,
157 const JacobianMatrix_t & Jin,
160 JacobianMatrix_t J(Jin.rows(), lg.nv());
161 lg.dIntegrate_dv(q, v, Jin, self, J, SETTO);
165 static JacobianMatrix_t dIntegrate_dv3(
166 const LieGroupType & lg,
167 const ConfigVector_t & q,
168 const TangentVector_t & v,
170 const JacobianMatrix_t & Jin)
172 JacobianMatrix_t J(lg.nv(), Jin.cols());
173 lg.dIntegrate_dv(q, v, self, Jin, J, SETTO);
177 static JacobianMatrix_t dIntegrateTransport_proxy(
178 const LieGroupType & lg,
179 const ConfigVector_t & q,
180 const TangentVector_t & v,
181 const JacobianMatrix_t & J,
182 const ArgumentPosition arg)
184 JacobianMatrix_t Jout(lg.nv(), J.cols());
185 lg.dIntegrateTransport(q, v, J, Jout, arg);
188 static JacobianMatrix_t tangentMap(
const LieGroupType & lg,
const ConfigVector_t & q)
190 JacobianMatrix_t TM(lg.nq(), lg.nv());
191 lg.tangentMap(q, TM, SETTO);
195 static JacobianMatrix_t tangentMapProduct(
196 const LieGroupType & lg,
const ConfigVector_t & q,
const JacobianMatrix_t & Min)
198 JacobianMatrix_t Mout(lg.nq(), Min.cols());
199 lg.tangentMapProduct(q, Min, Mout, SETTO);
203 static JacobianMatrix_t tangentMapTransposeProduct(
204 const LieGroupType & lg,
const ConfigVector_t & q,
const JacobianMatrix_t & Min)
206 JacobianMatrix_t Mout(lg.nv(), Min.cols());
207 lg.tangentMapTransposeProduct(q, Min, Mout, SETTO);
214 :
public boost::python::def_visitor<LieGroupPythonVisitor<LieGroupType>>
218 template<
class PyClass>
219 void visit(PyClass & cl)
const 221 typedef Eigen::Matrix<context::Scalar, Eigen::Dynamic, 1> ConfigVector_t;
224 cl.def(bp::init<>(
"Default constructor"))
225 .def(
"integrate", LieGroupWrapper::integrate)
226 .def(
"dIntegrate", LieGroupWrapper::dIntegrate)
227 .def(
"dIntegrate_dq", LieGroupWrapper::dIntegrate_dq1)
228 .def(
"dIntegrate_dq", LieGroupWrapper::dIntegrate_dq2)
229 .def(
"dIntegrate_dq", LieGroupWrapper::dIntegrate_dq3)
230 .def(
"dIntegrate_dv", LieGroupWrapper::dIntegrate_dv1)
231 .def(
"dIntegrate_dv", LieGroupWrapper::dIntegrate_dv2)
232 .def(
"dIntegrate_dv", LieGroupWrapper::dIntegrate_dv3)
233 .def(
"dIntegrateTransport", LieGroupWrapper::dIntegrateTransport_proxy)
234 .def(
"difference", LieGroupWrapper::difference)
235 .def(
"dDifference", LieGroupWrapper::dDifference1)
236 .def(
"dDifference", LieGroupWrapper::dDifference2)
237 .def(
"dDifference", LieGroupWrapper::dDifference3)
238 .def(
"tangentMap", LieGroupWrapper::tangentMap)
239 .def(
"tangentMapProduct", LieGroupWrapper::tangentMapProduct)
240 .def(
"tangentMapTransposeProduct", LieGroupWrapper::tangentMapTransposeProduct)
242 .def(
"interpolate", LieGroupWrapper::interpolate)
245 "random",
static_cast<typename LieGroupType::ConfigVector_t (LieGroupType::*)() const
>(
246 &LieGroupType::random))
248 "randomConfiguration",
256 .add_property(
"name", &LieGroupType::name)
257 .add_property(
"neutral", &LieGroupType::neutral)
258 .add_property(
"nq", &LieGroupType::nq)
259 .add_property(
"nv", &LieGroupType::nv)
261 .def(bp::self * bp::self)
262 .def(bp::self *= bp::self)
263#ifndef PINOCCHIO_PYTHON_SKIP_COMPARISON_OPERATIONS 264 .def(bp::self == bp::self)
269 static void expose(
const char * name)