12 _likelihood_sample_num(-1),
13 _externally_set_likelihood(false),
14 _measurement_timestamp_ns(0),
15 _unnormalized_model_probability(0),
17 _inverted_delta_srb_pose_in_rrbf(false),
18 _from_inverted_to_non_inverted(false),
19 _from_non_inverted_to_inverted(false)
25 const Eigen::Twistd& rrb_pose_at_srb_birth_in_sf,
26 const Eigen::Twistd& srb_pose_at_srb_birth_in_sf)
30 ROSTwist2EigenTwist(initial_measurement.first.pose_wc.twist, this->_rrb_current_pose_in_sf);
35 ROSTwist2EigenTwist(initial_measurement.first.velocity_wc.twist, this->_rrb_current_vel_in_sf);
39 ROSTwist2EigenTwist(initial_measurement.second.pose_wc.twist, this->_srb_current_pose_in_sf);
43 ROSTwist2EigenTwist(initial_measurement.second.velocity_wc.twist, this->_srb_current_vel_in_sf);
46 for (
unsigned int i = 0; i < 6; i++)
48 for (
unsigned int j = 0; j < 6; j++)
51 this->
_rrb_vel_cov_in_sf(i, j) = initial_measurement.first.velocity_wc.covariance[6 * i + j];
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;
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;
85 _rrb_id = initial_measurement.first.rb_id;
94 initial_measurement.first.centroid.y,
95 initial_measurement.first.centroid.z);
100 initial_measurement.second.centroid.y,
101 initial_measurement.second.centroid.z);
192 _rrb_id = acquired_measurement.first.rb_id;
193 int srb_id = acquired_measurement.second.rb_id;
198 ROSTwist2EigenTwist(acquired_measurement.first.pose_wc.twist,this->_rrb_current_pose_in_sf);
200 ROSTwist2EigenTwist(acquired_measurement.first.velocity_wc.twist, this->_rrb_current_vel_in_sf);
202 ROSTwist2EigenTwist(acquired_measurement.second.pose_wc.twist, this->_srb_current_pose_in_sf);
204 ROSTwist2EigenTwist(acquired_measurement.second.velocity_wc.twist, this->_srb_current_vel_in_sf);
206 for (
unsigned int i = 0; i < 6; i++)
208 for (
unsigned int j = 0; j < 6; j++)
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];
218 Eigen::Displacementd T_rrbf_sf = T_sf_rrbf.inverse();
219 Eigen::Displacementd T_rrbf_srbf = T_rrbf_sf * T_sf_srbf;
224 bool inverted =
false;
237 Eigen::Displacementd delta_displ = T_rrbf_srbf * (T_rrbf_srbf_t0.inverse());
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();
275 acquired_measurement.first.centroid.y,
276 acquired_measurement.first.centroid.z);
281 acquired_measurement.second.centroid.y,
282 acquired_measurement.second.centroid.z);
405 Eigen::Vector3d joint_ori_rpy(0., theta, phi);
407 return joint_ori_rpy;
462 #ifdef PUBLISH_PREDICTED_POSE_AS_PWC 464 std::ostringstream oss_pwc_topic;
466 _predicted_next_pose_publisher = _predicted_next_pose_nh.advertise<geometry_msgs::PoseWithCovarianceStamped>(oss_pwc_topic.str(), 100);
virtual void setCovarianceAdditiveSystemNoiseJointState(double sigma_sys_noise_pv)
Eigen::Twistd _previous_delta_pose_in_rrbf
virtual ~JointFilter()
Destructor.
virtual void setCovariancePrior(double prior_cov_vel)
Eigen::Twistd _rrb_current_pose_in_sf
Eigen::Twistd _srb_current_pose_in_sf
std::pair< omip_msgs::RigidBodyPoseAndVelMsg, omip_msgs::RigidBodyPoseAndVelMsg > joint_measurement_t
double _sigma_sys_noise_px
bool _from_inverted_to_non_inverted
virtual void setCovarianceAdditiveSystemNoisePhi(double sigma_sys_noise_phi)
Eigen::Twistd _predicted_delta_pose_in_rrbf
Eigen::Matrix3d _uncertainty_joint_position
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
Eigen::Matrix< double, 6, 6 > _current_delta_pose_cov_in_rrbf
virtual Eigen::Vector3d getJointOrientationRPYInRRBFrame() const
virtual double getOrientationThetaInRRBFrame() const
virtual void initialize()
double _sigma_sys_noise_py
double _joint_orientation_phi
Eigen::Twistd _srb_current_pose_in_rrbf
Eigen::Twistd _srb_initial_pose_in_rrbf
virtual double getJointVelocity() const
Return the joint velocity. Useful for plotting and testing purposes (monitoring action) ...
int _likelihood_sample_num
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
bool _externally_set_likelihood
virtual Eigen::Vector3d getJointOrientationUnitaryVector() const
virtual double getLoopPeriodNS() const
Eigen::Twistd _rrb_current_vel_in_sf
Eigen::Twistd _srb_previous_pose_in_rrbf
Eigen::Vector3d _rrb_centroid_in_sf
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)
double _model_prior_probability
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
virtual void setCovarianceAdditiveSystemNoisePy(double sigma_sys_noise_py)
virtual void setCovarianceAdditiveSystemNoisePx(double sigma_sys_noise_px)
double _measurement_timestamp_ns
virtual double getUnnormalizedProbabilityOfJointFilter() const
Return the unnormalized joint filter probability as p(Data|Model) x p(Model)
Eigen::Twistd _srb_predicted_pose_in_rrbf
virtual double getNormalizingTerm()
Eigen::Matrix2d _uncertainty_joint_orientation_phitheta
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
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
Eigen::Vector3d _joint_orientation
bool _inverted_delta_srb_pose_in_rrbf
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
double _measurements_likelihood
virtual double getCovarianceOrientationPhiPhiInRRBFrame() const
double _unnormalized_model_probability
virtual int getNumSamplesForLikelihoodEstimation() const
Eigen::Vector3d _joint_position
virtual double getCovarianceOrientationThetaThetaInRRBFrame() const
double _joint_orientation_theta
int long JointCombinedFilterId
JointFilter()
Constructor.
Eigen::Twistd _current_delta_pose_in_rrbf
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
JointCombinedFilterId _joint_id
double _sigma_sys_noise_theta
double _sigma_sys_noise_jvd
std::vector< Eigen::Twistd > _delta_poses_in_rrbf
Eigen::Matrix< double, 6, 6 > _srb_initial_pose_cov_in_rrbf
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
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)
Eigen::Vector3d _srb_centroid_in_sf
double _sigma_sys_noise_phi
Eigen::Twistd _srb_previous_predicted_pose_in_rrbf
void _initVariables(JointCombinedFilterId joint_id)
Initialize all variables of the filter.
Eigen::Twistd invertTwist(Eigen::Twistd ¤t_twist, Eigen::Twistd &previous_twist, bool &inverted)
virtual double getOrientationPhiInRRBFrame() const
double _sigma_sys_noise_pz
virtual void setCovarianceMeasurementNoise(double sigma_meas_noise)
virtual double getProbabilityOfJointFilter() const
Return the normalized joint filter probability as p(Model|Data) = p(Data|Model) x p(Model) / p(Data) ...