15 #ifndef BASE_FOOTPRINT_PUBLISHER_HPP_
16 #define BASE_FOOTPRINT_PUBLISHER_HPP_
21 #include "rclcpp/rclcpp.hpp"
22 #include "tf2_msgs/msg/tf_message.hpp"
23 #include "geometry_msgs/msg/transform_stamped.hpp"
24 #include "tf2_ros/create_timer_ros.hpp"
25 #include "tf2_ros/transform_listener.hpp"
26 #include "tf2_ros/transform_broadcaster.hpp"
27 #include "tf2_ros/buffer.hpp"
28 #include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
29 #include "tf2/utils.hpp"
43 : tf2_ros::TransformListener(buffer, spin_thread)
45 node.declare_parameter(
46 "base_link_frame", rclcpp::ParameterValue(std::string(
"base_link")));
47 node.declare_parameter(
48 "base_footprint_frame", rclcpp::ParameterValue(std::string(
"base_footprint")));
49 base_link_frame_ = node.get_parameter(
"base_link_frame").as_string();
50 base_footprint_frame_ = node.get_parameter(
"base_footprint_frame").as_string();
51 tf_broadcaster_ = std::make_shared<tf2_ros::TransformBroadcaster>(node);
59 TransformListener::subscription_callback(msg, is_static);
65 for (
unsigned int i = 0; i != msg->transforms.size(); i++) {
66 auto & t = msg->transforms[i];
67 if (t.child_frame_id == base_link_frame_) {
68 geometry_msgs::msg::TransformStamped transform;
69 transform.header.stamp = t.header.stamp;
70 transform.header.frame_id = base_link_frame_;
71 transform.child_frame_id = base_footprint_frame_;
74 transform.transform.translation = t.transform.translation;
75 transform.transform.translation.z = 0.0;
79 q.setRPY(0, 0, tf2::getYaw(t.transform.rotation));
81 transform.transform.rotation.x = q.x();
82 transform.transform.rotation.y = q.y();
83 transform.transform.rotation.z = q.z();
84 transform.transform.rotation.w = q.w();
86 tf_broadcaster_->sendTransform(transform);
93 std::shared_ptr<tf2_ros::TransformBroadcaster> tf_broadcaster_;
94 std::string base_link_frame_, base_footprint_frame_;
110 : Node(
"base_footprint_publisher", options)
112 RCLCPP_INFO(get_logger(),
"Creating base footprint publisher");
113 tf_buffer_ = std::make_shared<tf2_ros::Buffer>(get_clock());
114 auto timer_interface = std::make_shared<tf2_ros::CreateTimerROS>(
115 get_node_base_interface(),
116 get_node_timers_interface());
117 tf_buffer_->setCreateTimerInterface(timer_interface);
118 listener_publisher_ = std::make_shared<BaseFootprintPublisherListener>(
119 *tf_buffer_,
true, *
this);
123 std::shared_ptr<tf2_ros::Buffer> tf_buffer_;
124 std::shared_ptr<BaseFootprintPublisherListener> listener_publisher_;