1 #define BIORBD_API_EXPORTS
2 #include "RigidBody/KalmanReconsMarkers.h"
4 #include <rbdl/Model.h>
5 #include <rbdl/Kinematics.h>
6 #include "BiorbdModel.h"
7 #include "Utils/Error.h"
8 #include "Utils/Matrix.h"
9 #include "RigidBody/GeneralizedCoordinates.h"
10 #include "RigidBody/GeneralizedVelocity.h"
11 #include "RigidBody/GeneralizedAcceleration.h"
12 #include "RigidBody/NodeSegment.h"
16 m_PpInitial(std::make_shared<biorbd::utils::Matrix>()),
17 m_firstIteration(std::make_shared<bool>(true))
25 biorbd::rigidbody::
KalmanRecons(model, model.nbTechnicalMarkers()*3, params),
26 m_PpInitial(std::make_shared<biorbd::utils::Matrix>()),
27 m_firstIteration(std::make_shared<bool>(true))
59 const std::vector<unsigned int> &occlusion)
61 for (
unsigned int i = 0; i < occlusion.size(); ++i)
62 for (
unsigned int j=occlusion[i] * 3; j< occlusion[i] * 3+3; ++j){
70 return *m_firstIteration;
82 for (
unsigned int i=0; i<Tobs.
nbMarkers(); ++i)
83 T.block(i*3, 0, 3, 1) = Tobs.
marker(i);
86 reconstructFrame(model, T, Q, Qdot, Qddot, removeAxes);
91 const std::vector<biorbd::rigidbody::NodeSegment> &Tobs,
98 for (
unsigned int i=0; i<Tobs.size(); ++i)
99 T.block(i*3, 0, 3, 1) = Tobs[i];
102 reconstructFrame(model, T, Q, Qdot, Qddot, removeAxes);
114 if (*m_firstIteration){
115 *m_firstIteration =
false;
119 for (
unsigned int j = 0; j < 2; ++j){
123 for (
unsigned int i=0; i<50; ++i){
125 reconstructFrame(model, TobsTP,
nullptr,
nullptr,
nullptr);
129 m_xp->block(*m_nbDof, 0, *m_nbDof*2, 1) = biorbd::utils::Vector::Zero(*m_nbDof*2);
140 const std::vector<biorbd::rigidbody::NodeSegment>& zest_tp(model.
technicalMarkers(Q_tp, removeAxes,
false));
146 std::vector<unsigned int> occlusionIdx;
147 for (
unsigned int i=0; i<*m_nMeasure/3; ++i)
148 #ifdef BIORBD_USE_CASADI_MATH
150 if (!Tobs(i*3).is_zero() && !Tobs(i*3+1).is_zero() && !Tobs(i*3+2).is_zero()){
152 if (Tobs(i*3)*Tobs(i*3) + Tobs(i*3+1)*Tobs(i*3+1) + Tobs(i*3+2)*Tobs(i*3+2) != 0.0){
154 H.block(i*3,0,3,*m_nbDof) = J_tp[i];
155 zest.block(i*3, 0, 3, 1) = zest_tp[i];
158 occlusionIdx.push_back(i);
161 iteration(Tobs, zest, H, occlusionIdx);
163 getState(Q, Qdot, Qddot);