diff --git a/include/subscriber_odom2d.h b/include/subscriber_odom2d.h index 50a3a7d65eeb6b83fbd0f6708aa45d008cf11cb6..d59ae5397ed58817cdc8a59985ac7b261ad6db1b 100644 --- a/include/subscriber_odom2d.h +++ b/include/subscriber_odom2d.h @@ -18,7 +18,7 @@ class SubscriberOdom2d : public Subscriber { protected: ros::Time last_odom_stamp_; - double odometry_translational_cov_factor_, odometry_rotational_cov_factor_; + SensorOdom2dPtr sensor_odom_; public: diff --git a/src/subscriber_odom2d.cpp b/src/subscriber_odom2d.cpp index e9645b46cf409d0efedf3f3e63a77dbad392ed61..0643bc002716c0115b9cb87617c66cd7939c273e 100644 --- a/src/subscriber_odom2d.cpp +++ b/src/subscriber_odom2d.cpp @@ -28,9 +28,9 @@ SubscriberOdom2d::SubscriberOdom2d(const std::string& _unique_name, const SensorBasePtr _sensor_ptr) : Subscriber(_unique_name, _server, _sensor_ptr) , last_odom_stamp_(ros::Time(0)) - , odometry_translational_cov_factor_(std::static_pointer_cast<SensorOdom2d>(_sensor_ptr)->getDispVarToDispNoiseFactor()) - , odometry_rotational_cov_factor_(std::static_pointer_cast<SensorOdom2d>(_sensor_ptr)->getRotVarToRotNoiseFactor()) + , sensor_odom_(std::static_pointer_cast<SensorOdom2d>(_sensor_ptr)) { + assert(std::dynamic_pointer_cast<SensorOdom2d>(_sensor_ptr) != nullptr && "SubscriberOdom2d: sensor provided is not of type SensorOdom2d!"); } void SubscriberOdom2d::initialize(ros::NodeHandle& nh, const std::string& topic) @@ -45,12 +45,12 @@ void SubscriberOdom2d::callback(const nav_msgs::Odometry::ConstPtr& msg) if (last_odom_stamp_ != ros::Time(0)) { double dt = (msg->header.stamp - last_odom_stamp_).toSec(); + Eigen::Vector2d data(msg->twist.twist.linear.x * dt, msg->twist.twist.angular.z * dt); CaptureOdom2dPtr new_capture = std::make_shared<CaptureOdom2d>( TimeStamp(msg->header.stamp.sec, msg->header.stamp.nsec), sensor_ptr_, - Eigen::Vector2d(msg->twist.twist.linear.x * dt, msg->twist.twist.angular.z * dt), - Eigen::DiagonalMatrix<double, 2>(msg->twist.twist.linear.x * dt * (double)odometry_translational_cov_factor_, - msg->twist.twist.angular.z * dt * (double)odometry_rotational_cov_factor_)); + data, + sensor_odom_->computeCovFromMotion(data)); sensor_ptr_->process(new_capture); } last_odom_stamp_ = msg->header.stamp;