Skip to content

Commit 16c0748

Browse files
authored
Merge pull request #12 from ipa-fxm/review_frame_publisher
review frame publisher
2 parents bcff028 + c57e32c commit 16c0748

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
lines changed

include/pointcloud_to_laserscan/frame_publisher.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,30 @@
4343

4444
#include <ros/ros.h>
4545

46-
#include <tf/transform_listener.h>
47-
#include <tf/transform_broadcaster.h>
48-
#include <tf/transform_datatypes.h>
46+
#include <tf2_ros/buffer.h>
47+
#include <tf2_ros/transform_listener.h>
48+
#include <tf2_ros/transform_broadcaster.h>
49+
#include <tf2/LinearMath/Transform.h>
50+
#include <tf2/transform_datatypes.h>
51+
#include <tf2/convert.h>
52+
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
4953

5054
class FramePublisher
5155
{
5256
public:
57+
FramePublisher();
58+
~FramePublisher();
5359
bool initialize();
5460

5561
private:
5662
void frameBroadcastCallback(const ros::TimerEvent& event);
5763

5864
private:
5965
ros::NodeHandle nh_, priv_nh_;
60-
tf::TransformListener tf_listener_;
61-
tf::TransformBroadcaster tf_broadcaster_;
66+
67+
tf2_ros::Buffer tf_buffer_;
68+
tf2_ros::TransformListener tf_listener_;
69+
tf2_ros::TransformBroadcaster tf_broadcaster_;
6270

6371
ros::Timer frame_broadcast_timer_;
6472
double update_rate_;

src/frame_publisher.cpp

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@
4141

4242
#include <pointcloud_to_laserscan/frame_publisher.h>
4343

44+
FramePublisher::FramePublisher() :
45+
tf_listener_(tf_buffer_)
46+
{}
47+
48+
FramePublisher::~FramePublisher()
49+
{}
50+
4451
bool FramePublisher::initialize()
4552
{
4653
priv_nh_ = ros::NodeHandle("~");
@@ -64,22 +71,23 @@ bool FramePublisher::initialize()
6471

6572
/// Broadcast a frame aligned with the base frame but rotated around specified axes as rotation_frame
6673
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));
7379
}
74-
catch (tf::TransformException& ex)
80+
catch(tf2::TransformException &ex)
7581
{
76-
ROS_ERROR("FramePublisher::getTransform: \n%s", ex.what());
82+
ROS_ERROR("FramePublisher::frameBroadcastCallback: \n%s",ex.what());
7783
return;
7884
}
85+
//ROS_WARN_STREAM("FramePublisher::frameBroadcastCallback: \n" << transform_msg);
7986

87+
tf2::Stamped<tf2::Transform> transform_tf;
88+
tf2::fromMsg(transform_msg, transform_tf);
8089
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);
8391

8492
// Use rotations according to settings
8593
double target_frame_roll = 0;
@@ -89,8 +97,13 @@ void FramePublisher::frameBroadcastCallback(const ros::TimerEvent& event)
8997
if (rot_x_){ target_frame_roll = rot_frame_roll;}
9098
if (rot_y_){ target_frame_pitch = rot_frame_pitch;}
9199

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);
93103

94104
// 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);
96109
}

0 commit comments

Comments
 (0)