RBFilter.h
Go to the documentation of this file.
1 /*
2  * RBFilter.h
3  *
4  * Author: roberto
5  *
6  * This is a modified implementation of the method for online estimation of kinematic structures described in our paper
7  * "Online Interactive Perception of Articulated Objects with Multi-Level Recursive Estimation Based on Task-Specific Priors"
8  * (Martín-Martín and Brock, 2014).
9  * This implementation can be used to reproduce the results of the paper and to be applied to new research.
10  * The implementation allows also to be extended to perceive different information/models or to use additional sources of information.
11  * A detail explanation of the method and the system can be found in our paper.
12  *
13  * If you are using this implementation in your research, please consider citing our work:
14  *
15 @inproceedings{martinmartin_ip_iros_2014,
16 Title = {Online Interactive Perception of Articulated Objects with Multi-Level Recursive Estimation Based on Task-Specific Priors},
17 Author = {Roberto {Mart\'in-Mart\'in} and Oliver Brock},
18 Booktitle = {Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems},
19 Pages = {2494-2501},
20 Year = {2014},
21 Location = {Chicago, Illinois, USA},
22 Note = {http://www.robotics.tu-berlin.de/fileadmin/fg170/Publikationen_pdf/martinmartin_ip_iros_2014.pdf},
23 Url = {http://www.robotics.tu-berlin.de/fileadmin/fg170/Publikationen_pdf/martinmartin_ip_iros_2014.pdf},
24 Projectname = {Interactive Perception}
25 }
26  * If you have questions or suggestions, contact us:
27  * roberto.martinmartin@tu-berlin.de
28  *
29  * Enjoy!
30  */
31 
32 #ifndef RB_FILTER_H_
33 #define RB_FILTER_H_
34 
35 #include <rb_tracker/RBTrackerDynReconfConfig.h>
36 
37 #include <pcl/point_types.h>
38 #include <unsupported/Eigen/MatrixFunctions>
39 #include <Eigen/Geometry>
40 #include <lgsm/Lgsm>
41 #include <boost/shared_ptr.hpp>
42 #include <boost/unordered_map.hpp>
43 
44 #include <ros/ros.h>
45 #include <geometry_msgs/Pose.h>
46 #include <geometry_msgs/Twist.h>
47 #include <geometry_msgs/TwistWithCovariance.h>
48 #include <geometry_msgs/PoseWithCovariance.h>
49 #include <tf/tf.h>
50 #include <tf/transform_datatypes.h>
52 
53 #include <tf_conversions/tf_eigen.h>
54 
56 #include "omip_common/Feature.h"
58 
59 // Dimensions of the system state: 6dof of rbpose and 6dof of rbvelocity
60 #define STATE_DIM_RBF 6
61 
62 // Dimensions of each measurement (each feature location)
63 #define MEAS_DIM_RBF 3
64 
65 #include <Eigen/Dense>
66 #include <unsupported/Eigen/NonLinearOptimization>
67 #include <unsupported/Eigen/NumericalDiff>
68 
69 
88 namespace omip
89 {
90 
98 class RBFilter
99 {
100 public:
101 
102  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
103 
104  // Shared Pointer to a RBFilter
106 
107  // Trajectory of a RB
108  typedef std::vector<Eigen::Matrix4d> Trajectory;
109 
111  {
115  };
116 
120  RBFilter();
121 
130  RBFilter(double loop_period_ns,
131  const std::vector<Eigen::Matrix4d> &trajectory,
132  const Eigen::Twistd& initial_velocity,
133  FeaturesDataBase::Ptr feats_database,
134  double estimation_error_threshold);
135 
136  virtual void Init();
137 
141  virtual ~RBFilter();
142 
147  RBFilter(const RBFilter &rbm);
148 
154  {
155  return (RBFilter::Ptr(doClone()));
156  }
157 
161  virtual void predictState(double time_interval_ns = -1.);
162 
167  virtual void predictMeasurement();
168 
172  virtual void correctState();
173 
174  virtual void integrateShapeBasedPose(const geometry_msgs::TwistWithCovariance twist_refinement, double pose_time_elapsed_ns);
175 
181 
186  virtual void addSupportingFeature(Feature::Id supporting_feat_id);
187 
193  virtual void setPredictedState(omip_msgs::RigidBodyPoseAndVelMsg hypothesis);
194 
202  virtual void addPredictedFeatureLocation(const Feature::Location& predicted_location_velocity,
203  const Feature::Location& predicted_location_brake, const Feature::Id feature_id);
204 
213  virtual void PredictFeatureLocation(Feature::Ptr feature,
214  const Eigen::Matrix4d &predicted_pose,
215  bool contemporary_last_feat_loc_and_last_pose_in_trajectory,
216  Feature::Location& predicted_location, bool publish_locations=false) const;
217 
227  virtual void GetLocationOfFeatureAtBirthOfRB(Feature::Ptr feature,
228  bool contemporary_last_feat_loc_and_last_pose_in_trajectory,
229  Feature::Location& location_at_birth) const;
230 
235  virtual void setFeaturesDatabase(FeaturesDataBase::Ptr feats_database);
236 
241  virtual RB_id_t getId() const;
242 
247  virtual Eigen::Matrix4d getPose() const;
248 
254  virtual Eigen::Matrix<double, 6, 6> getPoseCovariance() const;
255 
261  virtual Eigen::Twistd getVelocity() const;
262 
268  virtual Eigen::Matrix<double, 6, 6> getVelocityCovariance() const;
269 
274  virtual geometry_msgs::PoseWithCovariancePtr getPoseWithCovariance() const;
275 
280  virtual geometry_msgs::TwistWithCovariancePtr getPoseECWithCovariance() const;
281 
287  virtual geometry_msgs::TwistWithCovariancePtr getVelocityWithCovariance() const;
288 
293  virtual std::vector<Eigen::Matrix4d> getTrajectory() const;
294 
302 
307  virtual std::vector<Feature::Id> getSupportingFeatures() const;
308 
313  virtual int getNumberSupportingFeatures() const;
314 
320 
327  virtual void setMotionConstraint(int motion_constraint){}
328 
329  virtual void setPriorCovariancePose(double v)
330  {
331  this->_prior_cov_pose = v;
332  }
333 
334  virtual void setPriorCovarianceVelocity(double v)
335  {
336  this->_prior_cov_vel = v;
337  }
338 
339  virtual void setMinCovarianceMeasurementX(double v)
340  {
341  this->_min_cov_meas_x = v;
342  }
343 
344  virtual void setMinCovarianceMeasurementY(double v)
345  {
346  this->_min_cov_meas_y = v;
347  }
348 
349  virtual void setMinCovarianceMeasurementZ(double v)
350  {
351  this->_min_cov_meas_z = v;
352  }
353 
354  virtual void setMeasurementDepthFactor(double v)
355  {
356  this->_meas_depth_factor = v;
357  }
358 
359  virtual void setCovarianceSystemAccelerationTx(double v)
360  {
361  this->_cov_sys_acc_tx = v;
362  }
363 
364  virtual void setCovarianceSystemAccelerationTy(double v)
365  {
366  this->_cov_sys_acc_ty = v;
367  }
368 
369  virtual void setCovarianceSystemAccelerationTz(double v)
370  {
371  this->_cov_sys_acc_tz = v;
372  }
373 
374  virtual void setCovarianceSystemAccelerationRx(double v)
375  {
376  this->_cov_sys_acc_rx = v;
377  }
378 
379  virtual void setCovarianceSystemAccelerationRy(double v)
380  {
381  this->_cov_sys_acc_ry = v;
382  }
383 
384  virtual void setCovarianceSystemAccelerationRz(double v)
385  {
386  this->_cov_sys_acc_rz = v;
387  }
388 
389  virtual void setNumberOfTrackedFeatures(int v)
390  {
391  this->_num_tracked_feats = v;
392  }
393 
395  {
397  }
398 
399  virtual void setEstimationThreshold(double v)
400  {
401  this->_estimation_error_threshold = v;
402  }
403 
405  {
407  }
408 
410  {
412  }
413 
414  FeatureCloudPCLwc::Ptr getFeaturesAtBirth()
415  {
416  return _features_at_birth;
417  }
418 
419  FeatureCloudPCLwc::Ptr getFeaturesPredicted()
420  {
421  return _features_predicted;
422  }
423 
425  {
426  _features_at_birth->points.clear();
427  }
428 
430  {
431  _features_predicted->points.clear();
432  }
433 
434 protected:
435 
447  virtual void _initializeAuxiliarMatrices();
448 
449  // Maximum error allowed between predicted and measured feature position to consider it to STILL
450  // support a RBM
452 
453  std::map<Feature::Id, double> _supporting_feats_errors;
454 
467 
468 
469  Eigen::MatrixXd _G_t_memory;
471 
472  Eigen::Matrix<double, 3, 6> _D_T_p0_circle;
473 
475 
477 
478  // Current pose of the rigid body
479  Eigen::Matrix4d _pose;
480  Eigen::Matrix<double, 6, 6> _pose_covariance;
481  // First derivative of the pose
482  Eigen::Twistd _velocity;
483  Eigen::Matrix<double, 6, 6> _velocity_covariance;
484 
485  Eigen::Matrix4d _predicted_pose;
486  Eigen::Matrix<double, 6, 6> _predicted_pose_covariance;
487  // First derivative of the pose
488  Eigen::Twistd _predicted_velocity;
489  Eigen::Matrix<double, 6, 6> _predicted_velocity_covariance;
490 
492  // Sequence of Displacements of the RB
493  std::vector<Eigen::Matrix4d> _trajectory;
494 
495  std::vector<Feature::Id> _supporting_features_ids;
496  std::vector<double> _supporting_features_probs;
497 
499 
500  // Predicted poses in exponential coordinates
501  Eigen::Matrix4d _predicted_pose_vh; // Predicted pose based on the velocity hypothesis/model
502  Eigen::Matrix4d _predicted_pose_bh; // Predicted pose based on the brake-event hypothesis/model
503  Eigen::Matrix4d _predicted_delta_pose_kh; // Predicted change in pose based on the kinematic hypothesis/model
504  Eigen::Matrix4d _predicted_pose_kh; // Predicted pose based on the kinematic hypothesis/model
505 
506  Eigen::Matrix<double, 6, 6> _predicted_pose_cov_vh; // Predicted pose covariance based on the velocity hypothesis/model
507  Eigen::Matrix<double, 6, 6> _predicted_pose_cov_bh; // Predicted pose covariance based on the brake hypothesis/model
508  Eigen::Matrix<double, 6, 6> _predicted_pose_cov_kh; // Predicted pose covariance based on the kinematic hypothesis/model
509 
510  Eigen::Twistd _predicted_velocity_vh; // Predicted pose based on the velocity hypothesis/model
511  Eigen::Twistd _predicted_velocity_bh; // Predicted pose based on the brake-event hypothesis/model
512  Eigen::Twistd _predicted_velocity_kh; // Predicted pose based on the kinematic hypothesis/model
513 
514  Eigen::Matrix<double, 6, 6> _predicted_velocity_cov_vh; // Predicted velocity covariance based on the velocity hypothesis/model
515  Eigen::Matrix<double, 6, 6> _predicted_velocity_cov_bh; // Predicted velocity covariance based on the brake hypothesis/model
516  Eigen::Matrix<double, 6, 6> _predicted_velocity_cov_kh; // Predicted velocity covariance based on the kinematic hypothesis/model
517 
520 
521  FeatureCloudPCLwc::Ptr _features_predicted;
522  FeatureCloudPCLwc::Ptr _features_at_birth;
523 
524  FeatureCloudPCLwc::Ptr _predicted_measurement_pc_vh;
525  FeatureCloudPCLwc::Ptr _predicted_measurement_pc_bh;
526  FeatureCloudPCLwc::Ptr _predicted_measurement_pc_kh;
527 
528  FeatureCloudPCLwc::Ptr _predicted_measurement;
529 
530  std::map<Feature::Id, Feature::Location> _predicted_measurement_map_vh;
531  std::map<Feature::Id, Feature::Location> _predicted_measurement_map_bh;
532  std::map<Feature::Id, Feature::Location> _predicted_measurement_map_kh;
533 
534  std::map<Feature::Id, Feature::Location> _predicted_measurement_map;
535 
538 
539  virtual RBFilter* doClone() const
540  {
541  return (new RBFilter(*this));
542  }
543 
546 
547 };
548 
549 }
550 
551 #endif /* RB_FILTER_H_ */
double _loop_period_ns
Definition: RBFilter.h:536
FeatureCloudPCLwc::Ptr _predicted_measurement_pc_bh
Definition: RBFilter.h:525
virtual void setPredictedState(omip_msgs::RigidBodyPoseAndVelMsg hypothesis)
Definition: RBFilter.cpp:495
virtual void estimateBestPredictionAndSupportingFeatures()
Definition: RBFilter.cpp:373
std::map< Feature::Id, Feature::Location > _predicted_measurement_map_vh
Definition: RBFilter.h:530
virtual void setMinCovarianceMeasurementX(double v)
Definition: RBFilter.h:339
Eigen::Matrix< double, 6, 6 > _predicted_velocity_cov_vh
Definition: RBFilter.h:514
virtual void setPriorCovarianceVelocity(double v)
Definition: RBFilter.h:334
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< RBFilter > Ptr
Definition: RBFilter.h:105
boost::tuple< double, double, double > Location
FeatureCloudPCLwc::Ptr _predicted_measurement
Definition: RBFilter.h:528
double _last_time_interval_ns
Definition: RBFilter.h:537
virtual std::vector< Feature::Id > getSupportingFeatures() const
Definition: RBFilter.cpp:766
virtual void setCovarianceSystemAccelerationTy(double v)
Definition: RBFilter.h:364
virtual std::vector< Eigen::Matrix4d > getTrajectory() const
Definition: RBFilter.cpp:743
virtual void setCovarianceSystemAccelerationRz(double v)
Definition: RBFilter.h:384
virtual void addSupportingFeature(Feature::Id supporting_feat_id)
Definition: RBFilter.cpp:490
virtual Eigen::Matrix< double, 6, 6 > getPoseCovariance() const
Definition: RBFilter.cpp:670
virtual geometry_msgs::PoseWithCovariancePtr getPoseWithCovariance() const
Definition: RBFilter.cpp:685
virtual void setFeaturesDatabase(FeaturesDataBase::Ptr feats_database)
Definition: RBFilter.cpp:569
virtual FeatureCloudPCLwc getPredictedMeasurement(PredictionHypothesis hypothesis=BASED_ON_VELOCITY)
Definition: RBFilter.cpp:748
FeatureCloudPCLwc::Ptr _predicted_measurement_pc_vh
Definition: RBFilter.h:524
virtual void setMeasurementDepthFactor(double v)
Definition: RBFilter.h:354
Eigen::Matrix< double, 6, 6 > _predicted_velocity_covariance
Definition: RBFilter.h:489
virtual void correctState()
Definition: RBFilter.cpp:191
double _cov_sys_acc_tz
Definition: RBFilter.h:463
double _cov_sys_acc_tx
Definition: RBFilter.h:461
Eigen::Twistd _predicted_velocity
Definition: RBFilter.h:488
bool _use_predicted_state_from_kh
Definition: RBFilter.h:518
virtual void setMinCovarianceMeasurementZ(double v)
Definition: RBFilter.h:349
virtual geometry_msgs::TwistWithCovariancePtr getPoseECWithCovariance() const
Definition: RBFilter.cpp:704
std::map< Feature::Id, Feature::Location > _predicted_measurement_map
Definition: RBFilter.h:534
double _min_cov_meas_x
Definition: RBFilter.h:457
std::vector< Eigen::Matrix4d > Trajectory
Definition: RBFilter.h:108
Eigen::Matrix4d _predicted_pose
Definition: RBFilter.h:485
Eigen::VectorXd _R_inv_times_innovation_memory
Definition: RBFilter.h:470
Eigen::Matrix< double, 6, 6 > _predicted_velocity_cov_kh
Definition: RBFilter.h:516
virtual void setCovarianceSystemAccelerationRy(double v)
Definition: RBFilter.h:379
FeatureCloudPCLwc::Ptr _predicted_measurement_pc_kh
Definition: RBFilter.h:526
virtual Eigen::Matrix4d getPose() const
Definition: RBFilter.cpp:665
RB_id_t _id
Definition: RBFilter.h:476
long int RB_id_t
FeatureCloudPCLwc::Ptr _features_at_birth
Definition: RBFilter.h:522
Feature::Location _initial_location_of_centroid
Definition: RBFilter.h:491
void resetFeaturesAtBirth()
Definition: RBFilter.h:424
int _num_tracked_feats
Definition: RBFilter.h:544
virtual void setMotionConstraint(int motion_constraint)
Set a constraint for the motion of the RB Right now this is only used by the StaticEnvironmentFilter...
Definition: RBFilter.h:327
Eigen::Twistd _predicted_velocity_bh
Definition: RBFilter.h:511
virtual void integrateShapeBasedPose(const geometry_msgs::TwistWithCovariance twist_refinement, double pose_time_elapsed_ns)
Definition: RBFilter.cpp:523
static RB_id_t _rb_id_generator
Definition: RBFilter.h:474
Eigen::Matrix4d _predicted_delta_pose_kh
Definition: RBFilter.h:503
virtual void setNumberOfTrackedFeatures(int v)
Definition: RBFilter.h:389
std::map< Feature::Id, Feature::Location > _predicted_measurement_map_bh
Definition: RBFilter.h:531
virtual void setMinNumberOfSupportingFeaturesToCorrectPredictedState(int v)
Definition: RBFilter.h:394
double _cov_sys_acc_rz
Definition: RBFilter.h:466
virtual void _initializeAuxiliarMatrices()
Definition: RBFilter.cpp:781
Eigen::Matrix4d _pose
Definition: RBFilter.h:479
virtual void setEstimationThreshold(double v)
Definition: RBFilter.h:399
FeatureCloudPCLwc::Ptr _features_predicted
Definition: RBFilter.h:521
std::map< Feature::Id, double > _supporting_feats_errors
Definition: RBFilter.h:453
std::vector< Feature::Id > _supporting_features_ids
Definition: RBFilter.h:495
Eigen::Matrix< double, 3, 6 > _D_T_p0_circle
Definition: RBFilter.h:472
virtual void setMinCovarianceMeasurementY(double v)
Definition: RBFilter.h:344
virtual void GetLocationOfFeatureAtBirthOfRB(Feature::Ptr feature, bool contemporary_last_feat_loc_and_last_pose_in_trajectory, Feature::Location &location_at_birth) const
Get the location of the feature at the frame when the RB was detected first. If the feature is "young...
Definition: RBFilter.cpp:616
Eigen::Matrix4d _predicted_pose_kh
Definition: RBFilter.h:504
double _prior_cov_pose
Definition: RBFilter.h:455
bool _use_predicted_measurement_from_kh
Definition: RBFilter.h:519
Eigen::Matrix< double, 6, 6 > _predicted_velocity_cov_bh
Definition: RBFilter.h:515
RBFilter::Ptr clone() const
Definition: RBFilter.h:153
double _cov_sys_acc_rx
Definition: RBFilter.h:465
FeatureCloudPCLwc::Ptr getFeaturesPredicted()
Definition: RBFilter.h:419
virtual geometry_msgs::TwistWithCovariancePtr getVelocityWithCovariance() const
Definition: RBFilter.cpp:724
virtual void setCovarianceSystemAccelerationRx(double v)
Definition: RBFilter.h:374
Eigen::Matrix< double, 6, 6 > _predicted_pose_covariance
Definition: RBFilter.h:486
virtual void Init()
Definition: RBFilter.cpp:65
Eigen::Matrix< double, 6, 6 > _pose_covariance
Definition: RBFilter.h:480
Eigen::Twistd _velocity
Definition: RBFilter.h:482
FeaturesDataBase::Ptr _features_database
Definition: RBFilter.h:498
virtual FeaturesDataBase::Ptr getFeaturesDatabase() const
Definition: RBFilter.cpp:776
virtual Eigen::Matrix< double, 6, 6 > getVelocityCovariance() const
Definition: RBFilter.cpp:680
Eigen::Twistd _predicted_velocity_kh
Definition: RBFilter.h:512
double _estimation_error_threshold
Definition: RBFilter.h:451
Eigen::Matrix< double, 6, 6 > _predicted_pose_cov_bh
Definition: RBFilter.h:507
virtual RB_id_t getId() const
Definition: RBFilter.cpp:660
double _prior_cov_vel
Definition: RBFilter.h:456
double _cov_sys_acc_ry
Definition: RBFilter.h:464
virtual void predictState(double time_interval_ns=-1.)
Definition: RBFilter.cpp:91
int _min_num_supporting_feats_to_correct
Definition: RBFilter.h:545
virtual Feature::Location getIntialLocationOfCentroid() const
Definition: RBFilter.h:404
double _meas_depth_factor
Definition: RBFilter.h:460
virtual void setCovarianceSystemAccelerationTz(double v)
Definition: RBFilter.h:369
virtual RBFilter * doClone() const
Definition: RBFilter.h:539
void resetFeaturesPredicted()
Definition: RBFilter.h:429
std::vector< Eigen::Matrix4d > _trajectory
Definition: RBFilter.h:493
virtual Eigen::Twistd getVelocity() const
Definition: RBFilter.cpp:675
pcl::PointCloud< FeaturePCLwc > FeatureCloudPCLwc
double _cov_sys_acc_ty
Definition: RBFilter.h:462
Eigen::Matrix4d _predicted_pose_bh
Definition: RBFilter.h:502
std::vector< double > _supporting_features_probs
Definition: RBFilter.h:496
virtual int getNumberSupportingFeatures() const
Definition: RBFilter.cpp:771
virtual void setCovarianceSystemAccelerationTx(double v)
Definition: RBFilter.h:359
std::map< Feature::Id, Feature::Location > _predicted_measurement_map_kh
Definition: RBFilter.h:532
double _min_cov_meas_z
Definition: RBFilter.h:459
virtual void addPredictedFeatureLocation(const Feature::Location &predicted_location_velocity, const Feature::Location &predicted_location_brake, const Feature::Id feature_id)
Definition: RBFilter.cpp:550
Eigen::Twistd _predicted_velocity_vh
Definition: RBFilter.h:510
FeatureCloudPCLwc::Ptr getFeaturesAtBirth()
Definition: RBFilter.h:414
virtual ~RBFilter()
Definition: RBFilter.cpp:87
Eigen::Matrix4d _predicted_pose_vh
Definition: RBFilter.h:501
Eigen::MatrixXd _G_t_memory
Definition: RBFilter.h:469
Eigen::Matrix< double, 6, 6 > _predicted_pose_cov_kh
Definition: RBFilter.h:508
Eigen::Matrix< double, 6, 6 > _velocity_covariance
Definition: RBFilter.h:483
double _min_cov_meas_y
Definition: RBFilter.h:458
virtual void setPriorCovariancePose(double v)
Definition: RBFilter.h:329
virtual void predictMeasurement()
Second step when updating the filter. The next measurement is predicted from the predicted next state...
Definition: RBFilter.cpp:142
virtual void PredictFeatureLocation(Feature::Ptr feature, const Eigen::Matrix4d &predicted_pose, bool contemporary_last_feat_loc_and_last_pose_in_trajectory, Feature::Location &predicted_location, bool publish_locations=false) const
Definition: RBFilter.cpp:574
Eigen::Matrix< double, 6, 6 > _predicted_pose_cov_vh
Definition: RBFilter.h:506
virtual void doNotUsePredictionFromHigherLevel()
Definition: RBFilter.h:409


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