Skip to content

Commit 11d7a09

Browse files
committed
fix tf callback contention and incorrect node parameter loading
1 parent 9d65d33 commit 11d7a09

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

state_manager/include/state_manager.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#ifndef __STATE_INFO_GENERATOR_H__
1010
#define __STATE_INFO_GENERATOR_H__
1111

12+
#include <memory>
1213
#include "rclcpp/rclcpp.hpp"
1314
#include "geometry_msgs/msg/transform_stamped.hpp"
1415
#include "geometry_msgs/msg/twist_stamped.hpp"
@@ -22,6 +23,7 @@
2223
#include <tf2/impl/utils.h>
2324
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
2425
#include <tf2_ros/buffer.h>
26+
#include <tf2_ros/transform_listener.h>
2527

2628
#include "freyja_msgs/msg/current_state.hpp"
2729
#include "freyja_msgs/msg/asctec_data.hpp"
@@ -83,7 +85,8 @@ class StateManager: public rclcpp::Node
8385
std::string tf_base_frame_;
8486
std::string tf_my_frame_;
8587
std::unique_ptr<tf2_ros::Buffer> tf_buffer_;
86-
88+
std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
89+
8790
/* containers for handling gps data */
8891
double home_lat_, home_lon_;
8992
bool have_location_fix_;

state_manager/src/callback_implementations.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,11 @@ void StateManager::timerTfCallback()
8888
/* This is a timer callback */
8989
static TFStamped tform;
9090

91-
tform = tf_buffer_ -> lookupTransform( tf_my_frame_, tf_base_frame_, tf2::TimePointZero );
91+
if( tf_buffer_ -> canTransform( tf_my_frame_, tf_base_frame_, tf2::TimePointZero ) )
92+
{
93+
tform = tf_buffer_ -> lookupTransform( tf_my_frame_, tf_base_frame_, tf2::TimePointZero );
94+
mocapCallback( std::make_shared<const TFStamped>( tform ) );
95+
}
9296

9397
}
9498

state_manager/src/state_manager.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ StateManager::StateManager() : Node( rclcpp_NODE_NAME )
2222

2323

2424
get_parameter( "state_source", state_source_ );
25+
get_parameter( "filter_type", filter_type_ );
26+
get_parameter( "filter_length", filter_len_ );
2527

2628
if( state_source_ == "mocap" )
2729
initMocapManager();
@@ -68,6 +70,8 @@ StateManager::StateManager() : Node( rclcpp_NODE_NAME )
6870
rate_filter_ = FreyjaFilters( -1, "median", "~" );
6971
filter_len_ = pose_filter_.getCurrentFilterLen();
7072
}
73+
else
74+
RCLCPP_WARN( get_logger(), "No filter initialised by Freyja." );
7175

7276
// init history containers
7377
prev_pn_.resize( filter_len_ );
@@ -105,9 +109,12 @@ void StateManager::initTfManager()
105109
get_parameter( "state_base_frame", tf_base_frame_ );
106110
get_parameter( "state_my_frame", tf_my_frame_ );
107111

112+
RCLCPP_INFO( get_logger(), "Registered tf frames: [%s] to [%s]", tf_base_frame_.c_str(), tf_my_frame_.c_str() );
113+
tf_buffer_ = std::make_unique<tf2_ros::Buffer>( get_clock() );
114+
tf_listener_ = std::make_shared<tf2_ros::TransformListener>( *tf_buffer_ );
108115
tf_timer_ = rclcpp::create_timer( this, get_clock(), std::chrono::duration<float>(1.0/tf_lookup_rate),
109116
std::bind(&StateManager::timerTfCallback, this) );
110-
tf_buffer_ = std::make_unique<tf2_ros::Buffer>( get_clock() );
117+
111118
}
112119

113120
// void StateManager::initAsctecManager()

0 commit comments

Comments
 (0)