15 #ifndef BASE_FOOTPRINT_PUBLISHER_HPP_
16 #define BASE_FOOTPRINT_PUBLISHER_HPP_
21 #include "rclcpp/logging.hpp"
22 #include "rclcpp/node.hpp"
23 #include "rclcpp/node_options.hpp"
24 #include "tf2_msgs/msg/tf_message.hpp"
25 #include "geometry_msgs/msg/transform_stamped.hpp"
26 #include "nav2_ros_common/tf2_factories.hpp"
27 #include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
28 #include "tf2/utils.hpp"
29 #include "nav2_ros_common/node_utils.hpp"
46 base_link_frame_ = nav2::declare_or_get_parameter(
47 &node,
"base_link_frame", std::string(
"base_link"));
48 base_footprint_frame_ = nav2::declare_or_get_parameter(
49 &node,
"base_footprint_frame", std::string(
"base_footprint"));
50 tf_broadcaster_ = nav2::create_transform_broadcaster(&node);
58 TransformListener::subscription_callback(msg, is_static);
64 for (
unsigned int i = 0; i != msg->transforms.size(); i++) {
65 auto & t = msg->transforms[i];
66 if (t.child_frame_id == base_link_frame_) {
67 geometry_msgs::msg::TransformStamped transform;
68 transform.header.stamp = t.header.stamp;
69 transform.header.frame_id = base_link_frame_;
70 transform.child_frame_id = base_footprint_frame_;
73 transform.transform.translation = t.transform.translation;
74 transform.transform.translation.z = 0.0;
78 q.setRPY(0, 0, tf2::getYaw(t.transform.rotation));
80 transform.transform.rotation.x = q.x();
81 transform.transform.rotation.y = q.y();
82 transform.transform.rotation.z = q.z();
83 transform.transform.rotation.w = q.w();
85 tf_broadcaster_->sendTransform(transform);
92 nav2::TransformBroadcaster::SharedPtr tf_broadcaster_;
93 std::string base_link_frame_, base_footprint_frame_;
109 : Node(
"base_footprint_publisher", options)
111 RCLCPP_INFO(get_logger(),
"Creating base footprint publisher");
112 tf_buffer_ = nav2::create_transform_buffer(
this);
113 listener_publisher_ = std::make_shared<BaseFootprintPublisherListener>(
114 *tf_buffer_,
true, *
this);
118 nav2::TransformBuffer::SharedPtr tf_buffer_;
119 std::shared_ptr<BaseFootprintPublisherListener> listener_publisher_;