Skip to content
Snippets Groups Projects
Commit 10b4f2ac authored by Joan Solà Ortega's avatar Joan Solà Ortega
Browse files

test local param checks agains numerical Jacobian

parent 63a989c7
No related branches found
No related tags found
No related merge requests found
# Matrix product test # Matrix product test
#ADD_EXECUTABLE(test_matrix_prod test_matrix_prod.cpp) #ADD_EXECUTABLE(test_matrix_prod test_matrix_prod.cpp)
......
...@@ -13,18 +13,32 @@ ...@@ -13,18 +13,32 @@
#include <iostream> #include <iostream>
#define JAC_NUMERIC(T, _x0, _J, dx) \
{ Eigen::VectorXs dv(3); \
Eigen::Map<const Eigen::VectorXs> _dv (dv.data(), 3); \
Eigen::VectorXs xo(3); \
Eigen::Map<Eigen::VectorXs> _xo (xo.data(), 4); \
for (int i = 0; i< 3; i++) {\
dv.setZero();\
dv(i) = dx;\
T.plus(_x0, _dv, _xo);\
_J.col(i) = (_xo - _x0)/dx; }}
int main(){ int main(){
using namespace Eigen; using namespace Eigen;
using namespace std; using namespace std;
using namespace wolf; using namespace wolf;
// Storage
VectorXs x(22); VectorXs x(22);
MatrixXs M(1,12); // matrix dimensions do not matter, just storage size. MatrixXs M(1,12); // matrix dimensions do not matter, just storage size.
x.setRandom(); x.setRandom();
M.setZero(); M.setZero();
// QUATERNION ------------------------------------------
Map<VectorXs> q(&x(0),4); Map<VectorXs> q(&x(0),4);
q.normalize(); q.normalize();
...@@ -41,21 +55,29 @@ int main(){ ...@@ -41,21 +55,29 @@ int main(){
LocalParametrizationQuaternion<DQ_LOCAL> Qpar_loc; LocalParametrizationQuaternion<DQ_LOCAL> Qpar_loc;
cout << "\nGLOBAL D_QUAT plus()" << endl; cout << "\nGLOBAL D_QUAT plus()" << endl;
Map<const VectorXs> q_const(q.data(),4); Map<const VectorXs> q_m(q.data(),4);
Map<const VectorXs> da_const(da.data(),3); Map<const VectorXs> da_m(da.data(),3);
Qpar.plus(q_const,da_const,qo); Qpar.plus(q_m,da_m,qo);
cout << "qo = " << qo.transpose() << " with norm = " << qo.norm() << endl; cout << "qo = " << qo.transpose() << " with norm = " << qo.norm() << endl;
Qpar.computeJacobian(q_const,J); Qpar.computeJacobian(q_m,J);
cout << " J = " << J << endl << endl; cout << " J = \n" << J << endl << endl;
MatrixXs J_num(4,3);
JAC_NUMERIC(Qpar, q_m, J_num, 1e-9)
cout << " J_num = \n" << J_num << endl;
cout << "\nLOCAL D_QUAT plus()" << endl; cout << "\nLOCAL D_QUAT plus()" << endl;
Qpar_loc.plus(q_const,da_const,qo); Qpar_loc.plus(q_m,da_m,qo);
cout << "qo = " << qo.transpose() << " with norm = " << qo.norm() << endl; cout << "qo = " << qo.transpose() << " with norm = " << qo.norm() << endl;
Qpar_loc.computeJacobian(q_const,J); Qpar_loc.computeJacobian(q_m,J);
cout << " J = " << J << endl; cout << " J = " << J << endl;
JAC_NUMERIC(Qpar_loc, q_m, J_num, 1e-9)
cout << " J_num = \n" << J_num << endl;
// HOMOGENEOUS ----------------------------------------
cout << "\nHOMOGENEOUS plus()" << endl; cout << "\nHOMOGENEOUS plus()" << endl;
Map<VectorXs> h(&x(11),4); Map<VectorXs> h(&x(11),4);
h.setRandom(); h.setRandom();
...@@ -77,6 +99,9 @@ int main(){ ...@@ -77,6 +99,9 @@ int main(){
Hpar.computeJacobian(h_const,J); Hpar.computeJacobian(h_const,J);
cout << " J = " << J << "\n" << endl; cout << " J = " << J << "\n" << endl;
JAC_NUMERIC(Hpar, q_m, J_num, 1e-9)
cout << " J_num = \n" << J_num << endl;
return 0; return 0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment