41
41
42
42
#include < pointcloud_to_laserscan/frame_publisher.h>
43
43
44
+ FramePublisher::FramePublisher () :
45
+ tf_listener_(tf_buffer_)
46
+ {}
47
+
48
+ FramePublisher::~FramePublisher ()
49
+ {}
50
+
44
51
bool FramePublisher::initialize ()
45
52
{
46
53
priv_nh_ = ros::NodeHandle (" ~" );
@@ -64,22 +71,23 @@ bool FramePublisher::initialize()
64
71
65
72
// / Broadcast a frame aligned with the base frame but rotated around specified axes as rotation_frame
66
73
void FramePublisher::frameBroadcastCallback (const ros::TimerEvent& event)
67
- {
68
- tf::StampedTransform frame_transform;
69
- try
70
- {
71
- tf_listener_.waitForTransform (base_frame_, rotation_frame_, event.current_real , ros::Duration (0.1 ));
72
- tf_listener_.lookupTransform (base_frame_, rotation_frame_, ros::Time (0 ), frame_transform);
74
+ {
75
+ ros::Time time = event.current_real ;
76
+ geometry_msgs::TransformStamped transform_msg;
77
+ try {
78
+ transform_msg = tf_buffer_.lookupTransform (base_frame_, rotation_frame_, time, ros::Duration (0.1 ));
73
79
}
74
- catch (tf ::TransformException& ex)
80
+ catch (tf2 ::TransformException & ex)
75
81
{
76
- ROS_ERROR (" FramePublisher::getTransform : \n %s" , ex.what ());
82
+ ROS_ERROR (" FramePublisher::frameBroadcastCallback : \n %s" ,ex.what ());
77
83
return ;
78
84
}
85
+ // ROS_WARN_STREAM("FramePublisher::frameBroadcastCallback: \n" << transform_msg);
79
86
87
+ tf2::Stamped<tf2::Transform> transform_tf;
88
+ tf2::fromMsg (transform_msg, transform_tf);
80
89
double rot_frame_roll, rot_frame_pitch, rot_frame_yaw;
81
- frame_transform.getBasis ().getRPY (rot_frame_roll, rot_frame_pitch, rot_frame_yaw);
82
- tf::Transform target_transform (frame_transform.getRotation ());
90
+ transform_tf.getBasis ().getRPY (rot_frame_roll, rot_frame_pitch, rot_frame_yaw);
83
91
84
92
// Use rotations according to settings
85
93
double target_frame_roll = 0 ;
@@ -89,8 +97,13 @@ void FramePublisher::frameBroadcastCallback(const ros::TimerEvent& event)
89
97
if (rot_x_){ target_frame_roll = rot_frame_roll;}
90
98
if (rot_y_){ target_frame_pitch = rot_frame_pitch;}
91
99
92
- target_transform.getBasis ().setRPY (target_frame_roll, target_frame_pitch, target_frame_yaw);
100
+ tf2::Stamped<tf2::Transform> target_tf (transform_tf); // keep header
101
+ target_tf.setOrigin (tf2::Vector3 (0 ,0 ,0 ));
102
+ target_tf.getBasis ().setRPY (target_frame_roll, target_frame_pitch, target_frame_yaw);
93
103
94
104
// Broadcast new frame
95
- tf_broadcaster_.sendTransform (tf::StampedTransform (target_transform, frame_transform.stamp_ , base_frame_, target_frame_));
105
+ geometry_msgs::TransformStamped target_msg = tf2::toMsg (target_tf);
106
+ target_msg.child_frame_id = target_frame_;
107
+ // ROS_ERROR_STREAM("FramePublisher::frameBroadcastCallback: \n" << target_msg);
108
+ tf_broadcaster_.sendTransform (target_msg);
96
109
}
0 commit comments