15 #include "opennav_docking/pose_filter.hpp"
16 #include "rclcpp/rclcpp.hpp"
18 namespace opennav_docking
25 pose_.header.stamp = rclcpp::Time(0);
28 geometry_msgs::msg::PoseStamped
36 if ((rclcpp::Time(measurement.header.stamp) - pose_.header.stamp).seconds() > timeout_) {
38 }
else if (pose_.header.frame_id != measurement.header.frame_id) {
42 pose_.header = measurement.header;
45 filter(pose_.pose.position.x, measurement.pose.position.x);
46 filter(pose_.pose.position.y, measurement.pose.position.y);
47 filter(pose_.pose.position.z, measurement.pose.position.z);
50 tf2::Quaternion f_quat, m_quat;
51 tf2::fromMsg(measurement.pose.orientation, m_quat);
52 tf2::fromMsg(pose_.pose.orientation, f_quat);
53 f_quat = f_quat.slerp(m_quat, coef_);
54 pose_.pose.orientation = tf2::toMsg(f_quat);
60 void PoseFilter::filter(
double & filt,
double meas)
62 filt = (1 - coef_) * filt + coef_ * meas;
PoseFilter(double coef, double timeout)
Create a pose filter instance.
geometry_msgs::msg::PoseStamped update(const geometry_msgs::msg::PoseStamped &measurement)
Update the filter.