JointFilter.cpp
Go to the documentation of this file.
2 
4 
6 
7 using namespace omip;
8 
10  _loop_period_ns(-1),
11  _joint_id(-1),
12  _likelihood_sample_num(-1),
13  _externally_set_likelihood(false),
14  _measurement_timestamp_ns(0),
15  _unnormalized_model_probability(0),
16  _rrb_id(-1),
17  _inverted_delta_srb_pose_in_rrbf(false),
18  _from_inverted_to_non_inverted(false),
19  _from_non_inverted_to_inverted(false)
20 {
22 }
23 
25  const Eigen::Twistd& rrb_pose_at_srb_birth_in_sf,
26  const Eigen::Twistd& srb_pose_at_srb_birth_in_sf)
27 {
28  // Extract current pose of the reference RB frame relative to the current sensor frame expressed in current sensor frame coordinates
29  // PoseCoord({rrbf}|RRB,{sf}|S,[sf])(t)
30  ROSTwist2EigenTwist(initial_measurement.first.pose_wc.twist, this->_rrb_current_pose_in_sf);
32 
33  // Extract current velocity of the reference RB frame relative to the current sensor frame expressed in current sensor frame coordinates
34  // TwistCoord({rrbf}|RRB,{sf}|S,[sf])(t)
35  ROSTwist2EigenTwist(initial_measurement.first.velocity_wc.twist, this->_rrb_current_vel_in_sf);
36 
37  // Extract current pose of the second RB frame relative to the current sensor frame expressed in current sensor frame coordinates
38  // TwistCoord({sfbf}|SRB,{sf}|S,[sf])(t)
39  ROSTwist2EigenTwist(initial_measurement.second.pose_wc.twist, this->_srb_current_pose_in_sf);
40 
41  // Extract current velocity of the second RB frame relative to the current sensor frame expressed in current sensor frame coordinates
42  // TwistCoord({sfbf}|SRB,{sf}|S,[sf])(t)
43  ROSTwist2EigenTwist(initial_measurement.second.velocity_wc.twist, this->_srb_current_vel_in_sf);
44 
45  // Extract covariance of the reference and the second RB wrt sensor frame
46  for (unsigned int i = 0; i < 6; i++)
47  {
48  for (unsigned int j = 0; j < 6; j++)
49  {
50  this->_rrb_pose_cov_in_sf(i, j) = initial_measurement.first.pose_wc.covariance[6 * i + j];
51  this->_rrb_vel_cov_in_sf(i, j) = initial_measurement.first.velocity_wc.covariance[6 * i + j];
52  this->_srb_pose_cov_in_sf(i, j) = initial_measurement.second.pose_wc.covariance[6 * i + j];
53  }
54  }
55 
56  // Estimate the initial pose of the second RB frame relative to the initial reference RB frame in initial reference RB frame coordinates
57  // TwistCoord({srbf}|SRB,{rrbf}|RRB,[rrbf])(0)
58  Eigen::Displacementd T_sf_srbf_t0 = srb_pose_at_srb_birth_in_sf.exp(1e-20);
59  Eigen::Displacementd T_sf_rrbf_t0 = rrb_pose_at_srb_birth_in_sf.exp(1e-20);
60  Eigen::Displacementd T_rrbf_sf_t0 = T_sf_rrbf_t0.inverse();
61  Eigen::Displacementd T_rrbf_srbf_t0 = T_rrbf_sf_t0 * T_sf_srbf_t0;
62  this->_srb_initial_pose_in_rrbf = T_rrbf_srbf_t0.log(1.0e-20);
63 
64  //See: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6727494 (48,55)
65  //See http://ethaneade.com/lie.pdf 8.3
67  T_rrbf_sf_t0.adjoint()*_rrb_pose_cov_in_sf*T_rrbf_sf_t0.adjoint().transpose()
68  + T_rrbf_sf_t0.adjoint()*_srb_pose_cov_in_sf*T_rrbf_sf_t0.adjoint().transpose();
69 
70  // Estimate the current pose of the second RB frame relative to the current reference RB frame in current reference RB frame coordinates
71  // TwistCoord({srbf}|SRB,{rrbf}|RRB,[rrbf])(t)
72  Eigen::Displacementd T_sf_rrbf_t = this->_rrb_current_pose_in_sf.exp(1e-20);
73  Eigen::Displacementd T_sf_srbf_t = this->_srb_current_pose_in_sf.exp(1e-20);
74  Eigen::Displacementd T_rrbf_sf_t = T_sf_rrbf_t.inverse();
75  Eigen::Displacementd T_rrbf_srbf_t = T_rrbf_sf_t * T_sf_srbf_t;
76  this->_srb_current_pose_in_rrbf = T_rrbf_srbf_t.log(1.0e-20);
78 
79  // Estimate the transformation between the initial and the current pose of the second RB expressed in the coordinates of the reference RB frame
80  this->_current_delta_pose_in_rrbf = (_srb_current_pose_in_rrbf.exp(1e-12)*(_srb_initial_pose_in_rrbf.exp(1e-12).inverse())).log(1e-12);
81 
84 
85  _rrb_id = initial_measurement.first.rb_id;
86  // Extract centroid of the reference RB in sensor frame
87  if(_rrb_id == 0)
88  {
89  this->_rrb_centroid_in_sf = Eigen::Vector3d(0.,0.,0.);
90  }
91  else
92  {
93  this->_rrb_centroid_in_sf = Eigen::Vector3d( initial_measurement.first.centroid.x,
94  initial_measurement.first.centroid.y,
95  initial_measurement.first.centroid.z);
96  }
97 
98  // Extract centroid of the second RB in sensor frame
99  this->_srb_centroid_in_sf = Eigen::Vector3d( initial_measurement.second.centroid.x,
100  initial_measurement.second.centroid.y,
101  initial_measurement.second.centroid.z);
102 }
103 
105 {
106  this->_joint_id = joint_id;
107 
108  this->_joint_state = 0;
109  this->_joint_velocity = 0;
110 
111  this->_measurements_likelihood = 0.;
112  this->_model_prior_probability = 1.0/4.0;
113  this->_joint_position = Eigen::Vector3d(0,0,0);
114  this->_uncertainty_joint_position = Eigen::Matrix3d::Identity();
115  this->_joint_orientation_phi = 0;
116  this->_joint_orientation_theta = 0;
117  this->_joint_orientation = Eigen::Vector3d(1,0,0);
118  this->_uncertainty_joint_orientation_phitheta = Eigen::Matrix2d::Identity();
119 
120  this->_rrb_current_pose_in_sf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
121  this->_rrb_previous_pose_in_sf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
122  this->_rrb_current_vel_in_sf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
123  this->_srb_current_pose_in_sf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
124  this->_srb_current_vel_in_sf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
125 
126  this->_srb_initial_pose_in_rrbf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
127  this->_srb_current_pose_in_rrbf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
128  this->_srb_previous_pose_in_rrbf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
129  this->_srb_predicted_pose_in_rrbf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
130  this->_srb_previous_predicted_pose_in_rrbf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
131  this->_current_delta_pose_in_rrbf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
132  this->_previous_delta_pose_in_rrbf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
133  this->_predicted_delta_pose_in_rrbf = Eigen::Twistd(0.,0.,0.,0.,0.,0.);
134 
135  this->_rrb_pose_cov_in_sf = Eigen::Matrix<double, 6, 6>::Zero();
136  this->_rrb_vel_cov_in_sf = Eigen::Matrix<double, 6, 6>::Zero();
137  this->_srb_pose_cov_in_sf = Eigen::Matrix<double, 6, 6>::Zero();
138  this->_srb_pose_cov_in_sf = Eigen::Matrix<double, 6, 6>::Zero();
139 
140  this->_normalizing_term = 1;
141 }
142 
144 {
145 
146 }
147 
149 {
150  this->_joint_id = joint._joint_id;
155  this->_joint_position = joint._joint_position;
161 
167 
172 
174 
178 
180 
183 
184  this->_loop_period_ns = joint._loop_period_ns;
185 }
186 
187 void JointFilter::setMeasurement(joint_measurement_t acquired_measurement, const double &measurement_timestamp_ns)
188 {
189  _measurement_timestamp_ns = measurement_timestamp_ns;
190 
191  // Extract RB ids
192  _rrb_id = acquired_measurement.first.rb_id;
193  int srb_id = acquired_measurement.second.rb_id;
194 
195  // Store the previous pose of the rrb
197  // Extract pose of the reference RB in sensor frame
198  ROSTwist2EigenTwist(acquired_measurement.first.pose_wc.twist,this->_rrb_current_pose_in_sf);
199  // Extract velocity of the reference RB in sensor frame
200  ROSTwist2EigenTwist(acquired_measurement.first.velocity_wc.twist, this->_rrb_current_vel_in_sf);
201  // Extract pose of the second RB in sensor frame
202  ROSTwist2EigenTwist(acquired_measurement.second.pose_wc.twist, this->_srb_current_pose_in_sf);
203  // Extract velocity of the reference RB in sensor frame
204  ROSTwist2EigenTwist(acquired_measurement.second.velocity_wc.twist, this->_srb_current_vel_in_sf);
205  // Extract covariance of the reference and the second RB wrt sensor frame
206  for (unsigned int i = 0; i < 6; i++)
207  {
208  for (unsigned int j = 0; j < 6; j++)
209  {
210  this->_rrb_pose_cov_in_sf(i, j) = acquired_measurement.first.pose_wc.covariance[6 * i + j];
211  this->_rrb_vel_cov_in_sf(i, j) = acquired_measurement.first.velocity_wc.covariance[6 * i + j];
212  this->_srb_pose_cov_in_sf(i, j) = acquired_measurement.second.pose_wc.covariance[6 * i + j];
213  }
214  }
215 
216  Eigen::Displacementd T_sf_rrbf = this->_rrb_current_pose_in_sf.exp(1.0e-20);
217  Eigen::Displacementd T_sf_srbf = this->_srb_current_pose_in_sf.exp(1.0e-20);
218  Eigen::Displacementd T_rrbf_sf = T_sf_rrbf.inverse();
219  Eigen::Displacementd T_rrbf_srbf = T_rrbf_sf * T_sf_srbf;
220  this->_srb_current_pose_in_rrbf = T_rrbf_srbf.log(1e-20);
221 
222  // If the rigid body makes a turn of n x PI/2 the twist changes abruptly
223  // We try to avoid this by comparing to the previous delta and enforcing a smooth change
224  bool inverted = false;
226 
227  //ROS_ERROR_STREAM("After unwrapping pose of second in ref: " << this->_srb_current_pose_in_rrbf);
229 
230  //See: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6727494 (48,55)
231  //See http://ethaneade.com/lie.pdf 8.3
233  T_rrbf_sf.adjoint()*_rrb_pose_cov_in_sf*T_rrbf_sf.adjoint().transpose()
234  + T_rrbf_sf.adjoint()*_srb_pose_cov_in_sf*T_rrbf_sf.adjoint().transpose();
235 
236  Eigen::Displacementd T_rrbf_srbf_t0 = this->_srb_initial_pose_in_rrbf.exp(1.0e-20);
237  Eigen::Displacementd delta_displ = T_rrbf_srbf * (T_rrbf_srbf_t0.inverse());
238 
239  this->_current_delta_pose_in_rrbf = delta_displ.log(1.0e-20);
240 
241  // If the rigid body makes a turn of n x PI/2 the twist changes abruptly
242  // We try to avoid this by comparing to the previous delta and enforcing a smooth change
243  bool inverted_before = _inverted_delta_srb_pose_in_rrbf;
244  this->_current_delta_pose_in_rrbf = invertTwist(this->_current_delta_pose_in_rrbf, this->_previous_delta_pose_in_rrbf, this->_inverted_delta_srb_pose_in_rrbf);
246 
249  if(inverted_before != _inverted_delta_srb_pose_in_rrbf)
250  {
251  if(inverted_before && !_inverted_delta_srb_pose_in_rrbf)
252  {
254  }else{
256  }
257  }
258 
259  this->_delta_poses_in_rrbf.push_back(this->_current_delta_pose_in_rrbf);
260 
261  //See: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6727494 (48,55)
262  //See http://ethaneade.com/lie.pdf 8.3
265  + T_rrbf_srbf.adjoint()*T_rrbf_srbf_t0.inverse().adjoint()*_srb_initial_pose_cov_in_rrbf*T_rrbf_srbf_t0.inverse().adjoint().transpose()*T_rrbf_srbf.adjoint().transpose();
266 
267  // Extract centroid of the reference RB in sensor frame
268  if(_rrb_id == 0)
269  {
270  this->_rrb_centroid_in_sf = Eigen::Vector3d(0.,0.,0.);
271  }
272  else
273  {
274  this->_rrb_centroid_in_sf = Eigen::Vector3d( acquired_measurement.first.centroid.x,
275  acquired_measurement.first.centroid.y,
276  acquired_measurement.first.centroid.z);
277  }
278 
279  // Extract centroid of the second RB in sensor frame
280  this->_srb_centroid_in_sf = Eigen::Vector3d( acquired_measurement.second.centroid.x,
281  acquired_measurement.second.centroid.y,
282  acquired_measurement.second.centroid.z);
283 }
284 
286 {
287  return this->_srb_predicted_pose_in_rrbf;
288 }
289 
290 void JointFilter::setLoopPeriodNS(double loop_period_ns)
291 {
292  this->_loop_period_ns = loop_period_ns;
293 }
294 
296 {
297  return this->_loop_period_ns;
298 }
299 
301 {
302  this->_likelihood_sample_num = likelihood_sample_num;
303 }
304 
306 {
307  return this->_likelihood_sample_num;
308 }
309 
310 void JointFilter::setNormalizingTerm(double normalizing_term)
311 {
312  this->_normalizing_term = normalizing_term;
313 }
314 
316 {
317  return this->_normalizing_term;
318 }
319 
320 void JointFilter::setModelPriorProbability(double model_prior_probability)
321 {
322  this->_model_prior_probability = model_prior_probability;
323 }
324 
326 {
327  return this->_model_prior_probability;
328 }
329 
331 {
332  return this->_measurements_likelihood;
333 }
334 
336 {
337  this->_measurements_likelihood = likelihood;
338  this->_externally_set_likelihood = true;
339 }
340 
342 {
344 }
345 
347 {
349 }
350 
352 {
353  this->_joint_id = joint_id;
354 }
355 
357 {
358  return this->_joint_id;
359 }
360 
362 {
363  return _joint_state;
364 }
365 
367 {
368  return _joint_velocity;
369 }
370 
372 {
373  return this->_joint_orientation_phi;
374 }
375 
377 {
378  return this->_joint_orientation_theta;
379 }
380 
382 {
383  return this->_uncertainty_joint_orientation_phitheta(0,0);
384 }
385 
387 {
388  return this->_uncertainty_joint_orientation_phitheta(1,1);
389 }
390 
392 {
393  return this->_uncertainty_joint_orientation_phitheta(1,0);
394 }
395 
397 {
398  return this->_joint_position;
399 }
400 
402 {
403  double phi = std::acos(this->_joint_orientation.z() / this->_joint_orientation.norm());
404  double theta = std::atan(this->_joint_orientation.y() / this->_joint_orientation.x());
405  Eigen::Vector3d joint_ori_rpy(0., theta, phi);
406 
407  return joint_ori_rpy;
408 }
409 
411 {
412  return this->_joint_orientation;
413 }
414 
415 void JointFilter::setCovariancePrior(double prior_cov_vel)
416 {
417  this->_prior_cov_vel = prior_cov_vel;
418 }
419 
420 void JointFilter::setCovarianceAdditiveSystemNoisePhi(double sigma_sys_noise_phi)
421 {
422  this->_sigma_sys_noise_phi = sigma_sys_noise_phi;
423 }
424 
425 void JointFilter::setCovarianceAdditiveSystemNoiseTheta(double sigma_sys_noise_theta)
426 {
427  this->_sigma_sys_noise_theta = sigma_sys_noise_theta;
428 }
429 
430 void JointFilter::setCovarianceAdditiveSystemNoisePx(double sigma_sys_noise_px)
431 {
432  this->_sigma_sys_noise_px = sigma_sys_noise_px;
433 }
434 
435 void JointFilter::setCovarianceAdditiveSystemNoisePy(double sigma_sys_noise_py)
436 {
437  this->_sigma_sys_noise_py = sigma_sys_noise_py;
438 }
439 
440 void JointFilter::setCovarianceAdditiveSystemNoisePz(double sigma_sys_noise_pz)
441 {
442  this->_sigma_sys_noise_pz = sigma_sys_noise_pz;
443 }
444 
446 {
447  this->_sigma_sys_noise_jv = sigma_sys_noise_pv;
448 }
449 
451 {
452  this->_sigma_sys_noise_jvd = sigma_sys_noise_pvd;
453 }
454 
455 void JointFilter::setCovarianceMeasurementNoise(double sigma_meas_noise)
456 {
457  this->_sigma_meas_noise = sigma_meas_noise;
458 }
459 
461 {
462 #ifdef PUBLISH_PREDICTED_POSE_AS_PWC
463  // This is used to visualize the predictions based on the joint hypothesis
464  std::ostringstream oss_pwc_topic;
465  oss_pwc_topic << "/joint_tracker/predpose_srb_j" << this->_joint_id << "_" << this->getJointFilterTypeStr();
466  _predicted_next_pose_publisher = _predicted_next_pose_nh.advertise<geometry_msgs::PoseWithCovarianceStamped>(oss_pwc_topic.str(), 100);
467 #endif
468 }
virtual void setCovarianceAdditiveSystemNoiseJointState(double sigma_sys_noise_pv)
Eigen::Twistd _previous_delta_pose_in_rrbf
Definition: JointFilter.h:438
virtual ~JointFilter()
Destructor.
virtual void setCovariancePrior(double prior_cov_vel)
Eigen::Twistd _rrb_current_pose_in_sf
Definition: JointFilter.h:417
Eigen::Twistd _srb_current_pose_in_sf
Definition: JointFilter.h:423
std::pair< omip_msgs::RigidBodyPoseAndVelMsg, omip_msgs::RigidBodyPoseAndVelMsg > joint_measurement_t
double _sigma_sys_noise_px
Definition: JointFilter.h:392
bool _from_inverted_to_non_inverted
Definition: JointFilter.h:460
virtual void setCovarianceAdditiveSystemNoisePhi(double sigma_sys_noise_phi)
Eigen::Twistd _predicted_delta_pose_in_rrbf
Definition: JointFilter.h:439
Eigen::Matrix3d _uncertainty_joint_position
Definition: JointFilter.h:356
virtual double getJointState() const
Return the joint state. Useful for plotting and testing purposes (monitoring action) ...
Eigen::Matrix< double, 6, 6 > _rrb_vel_cov_in_sf
Definition: JointFilter.h:421
Eigen::Matrix< double, 6, 6 > _current_delta_pose_cov_in_rrbf
Definition: JointFilter.h:437
virtual Eigen::Vector3d getJointOrientationRPYInRRBFrame() const
virtual double getOrientationThetaInRRBFrame() const
virtual void initialize()
double _sigma_sys_noise_py
Definition: JointFilter.h:393
double _joint_orientation_phi
Definition: JointFilter.h:359
Eigen::Twistd _srb_current_pose_in_rrbf
Definition: JointFilter.h:430
Eigen::Twistd _srb_initial_pose_in_rrbf
Definition: JointFilter.h:428
virtual double getJointVelocity() const
Return the joint velocity. Useful for plotting and testing purposes (monitoring action) ...
virtual void setCovarianceAdditiveSystemNoiseTheta(double sigma_sys_noise_theta)
virtual void setCovarianceAdditiveSystemNoisePz(double sigma_sys_noise_pz)
Eigen::Matrix< double, 6, 6 > _rrb_pose_cov_in_sf
Definition: JointFilter.h:419
bool _externally_set_likelihood
Definition: JointFilter.h:347
virtual Eigen::Vector3d getJointOrientationUnitaryVector() const
virtual double getLoopPeriodNS() const
Eigen::Twistd _rrb_current_vel_in_sf
Definition: JointFilter.h:420
Eigen::Twistd _srb_previous_pose_in_rrbf
Definition: JointFilter.h:433
Eigen::Vector3d _rrb_centroid_in_sf
Definition: JointFilter.h:385
virtual void setInitialMeasurement(const joint_measurement_t &initial_measurement, const Eigen::Twistd &rrb_pose_at_srb_birth_in_sf, const Eigen::Twistd &srb_pose_at_srb_birth_in_sf)
Definition: JointFilter.cpp:24
double _model_prior_probability
Definition: JointFilter.h:348
virtual double getLikelihoodOfLastMeasurements() const
Return the estimated error of the last joint parameters by testing them against the full observed tra...
bool _from_non_inverted_to_inverted
Definition: JointFilter.h:461
virtual void setCovarianceAdditiveSystemNoisePy(double sigma_sys_noise_py)
virtual void setCovarianceAdditiveSystemNoisePx(double sigma_sys_noise_px)
double _measurement_timestamp_ns
Definition: JointFilter.h:454
virtual double getUnnormalizedProbabilityOfJointFilter() const
Return the unnormalized joint filter probability as p(Data|Model) x p(Model)
Eigen::Twistd _srb_predicted_pose_in_rrbf
Definition: JointFilter.h:434
virtual double getNormalizingTerm()
Eigen::Matrix2d _uncertainty_joint_orientation_phitheta
Definition: JointFilter.h:364
virtual Eigen::Twistd getPredictedMeasurement() const
Get the predicted pose-twist of the second rigid body (SRB) using the frame of the reference rigid bo...
virtual double getModelPriorProbability() const
Get the prior probability of this type of model/joint. We could use this in the feature if the robot ...
Eigen::Twistd _srb_current_vel_in_sf
Definition: JointFilter.h:425
virtual void setLoopPeriodNS(double loop_period_ns)
virtual void setCovarianceAdditiveSystemNoiseJointVelocity(double sigma_sys_noise_pvd)
Eigen::Matrix< double, 6, 6 > _srb_pose_cov_in_sf
Definition: JointFilter.h:424
Eigen::Vector3d _joint_orientation
Definition: JointFilter.h:362
double _normalizing_term
Definition: JointFilter.h:349
bool _inverted_delta_srb_pose_in_rrbf
Definition: JointFilter.h:459
virtual Eigen::Vector3d getJointPositionInRRBFrame() const
void ROSTwist2EigenTwist(const geometry_msgs::Twist &ros_twist, Eigen::Twistd &eigen_twist)
virtual void setNumSamplesForLikelihoodEstimation(int likelihood_sample_num)
Eigen::Matrix< double, 6, 6 > _srb_current_pose_cov_in_rrbf
Definition: JointFilter.h:431
double _measurements_likelihood
Definition: JointFilter.h:346
virtual double getCovarianceOrientationPhiPhiInRRBFrame() const
double _unnormalized_model_probability
Definition: JointFilter.h:351
virtual int getNumSamplesForLikelihoodEstimation() const
Eigen::Vector3d _joint_position
Definition: JointFilter.h:354
virtual double getCovarianceOrientationThetaThetaInRRBFrame() const
double _joint_orientation_theta
Definition: JointFilter.h:360
int long JointCombinedFilterId
Definition: JointFilter.h:69
JointFilter()
Constructor.
Definition: JointFilter.cpp:9
Eigen::Twistd _current_delta_pose_in_rrbf
Definition: JointFilter.h:436
virtual void setLikelihoodOfLastMeasurements(double likelihood)
Set the estimated error of the last joint parameters (only useful for the disconnected joint because ...
virtual double getCovarianceOrientationPhiThetaInRRBFrame() const
Eigen::Twistd _rrb_previous_pose_in_sf
Definition: JointFilter.h:418
JointCombinedFilterId _joint_id
Definition: JointFilter.h:332
double _sigma_sys_noise_theta
Definition: JointFilter.h:391
double _sigma_sys_noise_jvd
Definition: JointFilter.h:396
std::vector< Eigen::Twistd > _delta_poses_in_rrbf
Definition: JointFilter.h:440
Eigen::Matrix< double, 6, 6 > _srb_initial_pose_cov_in_rrbf
Definition: JointFilter.h:429
virtual JointCombinedFilterId getJointId() const
Get the unique Id that identifies this joint.
virtual void setNormalizingTerm(double normalizing_term)
Set the normalizing term from the combined filter as the sum of all unnormalized probabilities.
virtual std::string getJointFilterTypeStr() const =0
Get the joint type as a string (printing purposes)
virtual void setMeasurement(joint_measurement_t acquired_measurement, const double &measurement_timestamp_ns)
Set the latest acquired measurement.
double _sigma_sys_noise_jv
Definition: JointFilter.h:395
virtual void setModelPriorProbability(double model_prior_probability)
Set the prior probability of this type of model/joint. We could use this in the feature if the robot ...
virtual void setJointId(JointCombinedFilterId joint_id)
double _joint_velocity
Definition: JointFilter.h:375
Eigen::Vector3d _srb_centroid_in_sf
Definition: JointFilter.h:386
double _sigma_sys_noise_phi
Definition: JointFilter.h:390
Eigen::Twistd _srb_previous_predicted_pose_in_rrbf
Definition: JointFilter.h:435
double _loop_period_ns
Definition: JointFilter.h:444
void _initVariables(JointCombinedFilterId joint_id)
Initialize all variables of the filter.
Eigen::Twistd invertTwist(Eigen::Twistd &current_twist, Eigen::Twistd &previous_twist, bool &inverted)
virtual double getOrientationPhiInRRBFrame() const
double _sigma_sys_noise_pz
Definition: JointFilter.h:394
virtual void setCovarianceMeasurementNoise(double sigma_meas_noise)
double _sigma_meas_noise
Definition: JointFilter.h:397
virtual double getProbabilityOfJointFilter() const
Return the normalized joint filter probability as p(Model|Data) = p(Data|Model) x p(Model) / p(Data) ...


joint_tracker
Author(s): Roberto Martín-Martín
autogenerated on Mon Jun 10 2019 14:06:16