@@ -21,7 +21,7 @@ GliderNode::GliderNode(const rclcpp::NodeOptions& options) : rclcpp::Node("glide
2121 declare_parameter (" path" , " " );
2222
2323 // Get parameters
24- double freq = this ->get_parameter (" publishers.rate" ).as_double ();
24+ freq_ = this ->get_parameter (" publishers.rate" ).as_double ();
2525
2626 publish_nsf_ = this ->get_parameter (" publishers.nav_sat_fix" ).as_bool ();
2727 viz_ = this ->get_parameter (" publishers.viz.use" ).as_bool ();
@@ -60,13 +60,13 @@ GliderNode::GliderNode(const rclcpp::NodeOptions& options) : rclcpp::Node("glide
6060 if (publish_nsf_)
6161 {
6262 LOG (INFO ) << " [GLIDER] Publishing NavSatFix msg on /glider/fix" ;
63- LOG (INFO ) << " [GLIDER] Using prediction rate: " << freq ;
63+ LOG (INFO ) << " [GLIDER] Using prediction rate: " << freq_ ;
6464 gps_pub_ = this ->create_publisher <sensor_msgs::msg::NavSatFix>(" /glider/fix" , 10 );
6565 }
6666 else
6767 {
6868 LOG (INFO ) << " [GLIDER] Publishing Odometry msg on /glider/odom" ;
69- LOG (INFO ) << " [GLIDER] Using prediction rate: " << freq ;
69+ LOG (INFO ) << " [GLIDER] Using prediction rate: " << freq_ ;
7070 odom_pub_ = this ->create_publisher <nav_msgs::msg::Odometry>(" /glider/odom" , 10 );
7171 }
7272
@@ -76,9 +76,11 @@ GliderNode::GliderNode(const rclcpp::NodeOptions& options) : rclcpp::Node("glide
7676 odom_viz_pub_ = this ->create_publisher <nav_msgs::msg::Odometry>(" /glider/odom/viz" , 10 );
7777 }
7878
79- // TODO add in predictor
80- std::chrono::milliseconds d = GliderROS::Conversions::hzToDuration (freq);
81- timer_ = this ->create_wall_timer (d, std::bind (&GliderNode::interpolationCallback, this ));
79+ if (freq_ > 0 )
80+ {
81+ std::chrono::milliseconds d = GliderROS::Conversions::hzToDuration (freq_);
82+ timer_ = this ->create_wall_timer (d, std::bind (&GliderNode::interpolationCallback, this ));
83+ }
8284 LOG (INFO ) << " [GLIDER] GliderNode Initialized" ;
8385}
8486
@@ -106,6 +108,12 @@ void GliderNode::imuCallback(const sensor_msgs::msg::Imu::ConstSharedPtr msg)
106108 int64_t timestamp = getTime (msg->header .stamp );
107109
108110 glider_->addImu (timestamp, accel, gyro, orient);
111+
112+ if (freq_ == 0 && current_state_.isInitialized ())
113+ {
114+ Glider::Odometry odom = glider_->interpolate (timestamp);
115+ (publish_nsf_) ? publishNavSatFix (odom) : publishOdometry (odom);
116+ }
109117}
110118
111119void GliderNode::gpsCallback (const sensor_msgs::msg::NavSatFix::ConstSharedPtr msg)
0 commit comments