15 #include "opennav_docking/pose_filter.hpp"
16 #include "rclcpp/rclcpp.hpp"
17 #include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
19 namespace opennav_docking
26 pose_.header.stamp = rclcpp::Time(0);
29 geometry_msgs::msg::PoseStamped
37 if ((rclcpp::Time(measurement.header.stamp) - pose_.header.stamp).seconds() > timeout_) {
39 }
else if (pose_.header.frame_id != measurement.header.frame_id) {
43 pose_.header = measurement.header;
46 filter(pose_.pose.position.x, measurement.pose.position.x);
47 filter(pose_.pose.position.y, measurement.pose.position.y);
48 filter(pose_.pose.position.z, measurement.pose.position.z);
51 tf2::Quaternion f_quat, m_quat;
52 tf2::fromMsg(measurement.pose.orientation, m_quat);
53 tf2::fromMsg(pose_.pose.orientation, f_quat);
54 f_quat = f_quat.slerp(m_quat, coef_);
55 pose_.pose.orientation = tf2::toMsg(f_quat);
61 void PoseFilter::filter(
double & filt,
double meas)
63 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.