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 "nav2_ros_common/tf2_factories.hpp"
25 #include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
26 #include "tf2/utils.hpp"
27 #include "nav2_ros_common/node_utils.hpp"
44 base_link_frame_ = nav2::declare_or_get_parameter(
45 &node,
"base_link_frame", std::string(
"base_link"));
46 base_footprint_frame_ = nav2::declare_or_get_parameter(
47 &node,
"base_footprint_frame", std::string(
"base_footprint"));
48 tf_broadcaster_ = nav2::create_transform_broadcaster(&node);
56 TransformListener::subscription_callback(msg, is_static);
62 for (
unsigned int i = 0; i != msg->transforms.size(); i++) {
63 auto & t = msg->transforms[i];
64 if (t.child_frame_id == base_link_frame_) {
65 geometry_msgs::msg::TransformStamped transform;
66 transform.header.stamp = t.header.stamp;
67 transform.header.frame_id = base_link_frame_;
68 transform.child_frame_id = base_footprint_frame_;
71 transform.transform.translation = t.transform.translation;
72 transform.transform.translation.z = 0.0;
76 q.setRPY(0, 0, tf2::getYaw(t.transform.rotation));
78 transform.transform.rotation.x = q.x();
79 transform.transform.rotation.y = q.y();
80 transform.transform.rotation.z = q.z();
81 transform.transform.rotation.w = q.w();
83 tf_broadcaster_->sendTransform(transform);
90 nav2::TransformBroadcaster::SharedPtr tf_broadcaster_;
91 std::string base_link_frame_, base_footprint_frame_;
107 : Node(
"base_footprint_publisher", options)
109 RCLCPP_INFO(get_logger(),
"Creating base footprint publisher");
110 tf_buffer_ = nav2::create_transform_buffer(
this);
111 listener_publisher_ = std::make_shared<BaseFootprintPublisherListener>(
112 *tf_buffer_,
true, *
this);
116 nav2::TransformBuffer::SharedPtr tf_buffer_;
117 std::shared_ptr<BaseFootprintPublisherListener> listener_publisher_;